diff options
Diffstat (limited to 't/48dbi_dbd_sqlengine.t')
-rw-r--r-- | t/48dbi_dbd_sqlengine.t | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/t/48dbi_dbd_sqlengine.t b/t/48dbi_dbd_sqlengine.t new file mode 100644 index 0000000..c916d51 --- /dev/null +++ b/t/48dbi_dbd_sqlengine.t @@ -0,0 +1,81 @@ +#!perl -w +$|=1; + +use strict; + +use Cwd; +use File::Path; +use File::Spec; +use Test::More; + +my $using_dbd_gofer = ($ENV{DBI_AUTOPROXY}||"") =~ /^dbi:Gofer.*transport=/i; + +my $tbl; +BEGIN { $tbl = "db_". $$ . "_" }; +#END { $tbl and unlink glob "${tbl}*" } + +use_ok ("DBI"); +use_ok ("DBI::DBD::SqlEngine"); +use_ok ("DBD::File"); + +my $sql_statement = DBI::DBD::SqlEngine::Statement->isa('SQL::Statement'); +my $dbh = DBI->connect( "DBI:File:", undef, undef, { PrintError => 0, RaiseError => 0, } ); # Can't use DBI::DBD::SqlEngine direct + +for my $sql ( split "\n", <<"" ) + CREATE TABLE foo (id INT, foo TEXT) + CREATE TABLE bar (id INT, baz TEXT) + INSERT INTO foo VALUES (1, "Hello world") + INSERT INTO bar VALUES (1, "Bugfixes welcome") + INSERT bar VALUES (2, "Bug reports, too") + SELECT foo FROM foo where ID=1 + UPDATE bar SET id=5 WHERE baz="Bugfixes welcome" + DELETE FROM foo + DELETE FROM bar WHERE baz="Bugfixes welcome" + +{ + my $sth; + $sql =~ s/^\s+//; + eval { $sth = $dbh->prepare( $sql ); }; + ok( $sth, "prepare '$sql'" ); +} + +for my $line ( split "\n", <<"" ) + Junk -- Junk + CREATE foo (id INT, foo TEXT) -- missing table + INSERT INTO bar (1, "Bugfixes welcome") -- missing "VALUES" + UPDATE bar id=5 WHERE baz="Bugfixes welcome" -- missing "SET" + DELETE * FROM foo -- waste between "DELETE" and "FROM" + +{ + my $sth; + $line =~ s/^\s+//; + my ($sql, $test) = ( $line =~ m/^([^-]+)\s+--\s+(.*)$/ ); + eval { $sth = $dbh->prepare( $sql ); }; + ok( !$sth, "$test: prepare '$sql'" ); +} + +SKIP: { + # some SQL::Statement / SQL::Parser related tests + skip( "Not running with SQL::Statement", 3 ) unless ($sql_statement); + for my $line ( split "\n", <<"" ) + Junk -- Junk + CREATE TABLE bar (id INT, baz CHARACTER VARYING(255)) -- invalid column type + + { + my $sth; + $line =~ s/^\s+//; + my ($sql, $test) = ( $line =~ m/^([^-]+)\s+--\s+(.*)$/ ); + eval { $sth = $dbh->prepare( $sql ); }; + ok( !$sth, "$test: prepare '$sql'" ); + } + + my $dbh2 = DBI->connect( "DBI:File:", undef, undef, { sql_dialect => "ANSI" } ); + my $sth; + eval { $sth = $dbh2->prepare( "CREATE TABLE foo (id INTEGER PRIMARY KEY, phrase CHARACTER VARYING(40) UNIQUE)" ); }; + ok( $sth, "prepared statement using ANSI dialect" ); + skip( "Gofer proxy prevents fetching embedded SQL::Parser object", 1 ); + my $sql_parser = $dbh2->FETCH("sql_parser_object"); + cmp_ok( $sql_parser->dialect(), "eq", "ANSI", "SQL::Parser has 'ANSI' as dialect" ); +} + +done_testing (); |