#!/usr/bin/perl use strict; use warnings; use Test::More; use Cwd; BEGIN { use_ok ("DBI"); } do "t/lib.pl"; my @tbl_def = ( [ "id", "INTEGER", 4, &COL_KEY ], [ "str", "CHAR", 64, &COL_NULLABLE ], [ "name", "CHAR", 64, &COL_NULLABLE ], ); sub DbFile; my $dir = DbDir () || "output"; my $fqd = Cwd::abs_path $dir; ok (my $dbh = Connect (), "connect"); ok ($dbh->{f_dir} eq $dir || $dbh->{f_dir} eq $fqd, "default dir"); ok ($dbh->{f_dir} = $dir, "set f_dir"); ok (my $tbl = FindNewTable ($dbh), "find new test table"); ok (!-f DbFile ($tbl), "does not exist"); ok (my $tbl2 = FindNewTable ($dbh), "find new test table"); ok (!-f DbFile ($tbl2), "does not exist"); ok (my $tbl3 = FindNewTable ($dbh), "find new test table"); ok (!-f DbFile ($tbl3), "does not exist"); ok (my $tbl4 = FindNewTable ($dbh), "find new test table"); ok (!-f DbFile ($tbl4), "does not exist"); isnt ($tbl, $tbl2, "different 1 2"); isnt ($tbl, $tbl3, "different 1 3"); isnt ($tbl, $tbl4, "different 1 4"); isnt ($tbl2, $tbl3, "different 2 3"); isnt ($tbl2, $tbl4, "different 2 4"); isnt ($tbl3, $tbl4, "different 3 4"); like (my $def = TableDefinition ($tbl, @tbl_def), qr{^create table $tbl}i, "table definition"); ok ($dbh->do ($def), "create table 1"); ok (-f DbFile ($tbl), "does exists"); ok ($dbh->do ("drop table $tbl"), "drop table"); ok (!-f DbFile ($tbl), "does not exist"); ok ($dbh->disconnect, "disconnect"); undef $dbh; my $dsn = "DBI:CSV:f_dir=$dir;csv_eol=\015\012;csv_sep_char=\\;;"; ok ($dbh = Connect ($dsn), "connect"); ok ($dbh->do ($def), "create table"); ok (-f DbFile ($tbl), "does exists"); ok ($dbh->do ("insert into $tbl values (1, 1, ?)", undef, "joe"), "insert 1"); ok ($dbh->do ("insert into $tbl values (2, 2, ?)", undef, "Jochen;"), "insert 2"); ok (my $sth = $dbh->prepare ("select * from $tbl"), "prepare"); ok ($sth->execute, "execute"); ok (my $row = $sth->fetch, "fetch 1"); is_deeply ($row, [ 1, "1", "joe" ], "content"); ok ( $row = $sth->fetch, "fetch 2"); is_deeply ($row, [ 2, "2", "Jochen;" ], "content"); ok ($sth->finish, "finish"); undef $sth; ok ($dbh->do ("drop table $tbl"), "drop table"); ok (!-f DbFile ($tbl), "does not exist"); ok ($dbh->disconnect, "disconnect"); undef $dbh; $dsn = "DBI:CSV:"; ok ($dbh = Connect ($dsn), "connect"); # Check, whether the csv_tables->{$tbl}{file} attribute works like (my $def4 = TableDefinition ($tbl4, @tbl_def), qr{^create table $tbl4}i, "table definition"); ok ($dbh->{csv_tables}{$tbl4}{file} = DbFile ($tbl4), "set table/file"); ok ($dbh->do ($def4), "create table"); ok (-f DbFile ($tbl4), "does exists"); ok ($dbh->do ("drop table $tbl4"), "drop table"); ok ($dbh->disconnect, "disconnect"); undef $dbh; ok ($dbh = DBI->connect ("dbi:CSV:", "", "", { f_dir => DbDir (), f_ext => ".csv", dbd_verbose => 8, csv_sep_char => ";", csv_blank_is_undef => 1, csv_always_quote => 1, }), "connect with attr"); is ($dbh->{dbd_verbose}, 8, "dbd_verbose set"); is ($dbh->{f_ext}, ".csv", "f_ext set"); is ($dbh->{csv_sep_char}, ";", "sep_char set"); is ($dbh->{csv_blank_is_undef}, 1, "blank_is_undef set"); ok ($dbh->do ($def), "create table"); ok (-f DbFile ($tbl).".csv", "does exists"); #is ($sth->{blank_is_undef}, 1, "blank_is_undef"); eval { local $SIG{__WARN__} = sub { }; ok ($sth = $dbh->prepare ("insert into $tbl values (?, ?, ?)"), "prepare"); is ($sth->execute (1, ""), undef, "not enough values"); like ($dbh->errstr, qr/passed 2 parameters where 3 required/, "error message"); # Cannot use the same handle twice. SQL::Statement bug ok ($sth = $dbh->prepare ("insert into $tbl values (?, ?, ?)"), "prepare"); is ($sth->execute (1, "", 1, ""), undef, "too many values"); like ($dbh->errstr, qr/passed 4 parameters where 3 required/, "error message"); }; ok ($sth->execute ($_, undef, "Code $_"), "insert $_") for 0 .. 9; ok ($dbh->do ("drop table $tbl"), "drop table"); ok (!-f DbFile ($tbl), "does not exist"); ok (!-f DbFile ($tbl).".csv", "does not exist"); ok ($dbh->disconnect, "disconnect"); undef $dbh; done_testing ();