diff options
Diffstat (limited to 't/15_ak_dbd.t')
-rw-r--r-- | t/15_ak_dbd.t | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/t/15_ak_dbd.t b/t/15_ak_dbd.t new file mode 100644 index 0000000..ddde0f7 --- /dev/null +++ b/t/15_ak_dbd.t @@ -0,0 +1,138 @@ +#!/usr/bin/perl + +use strict; +BEGIN { + $| = 1; + $^W = 1; +} + +use t::lib::Test; +use Test::More tests => 37; +use Test::NoWarnings; + +# Create a database +my $dbh = connect_ok( dbfile => 'foo', RaiseError => 1, PrintError => 1, PrintWarn => 1 ); + +# Create the table +ok( $dbh->do(<<'END_SQL'), 'CREATE TABLE' ); +CREATE TABLE one ( + id INTEGER NOT NULL, + name CHAR (64) +) +END_SQL + +# Test quoting +my $quoted = $dbh->quote('test1'); +is( $quoted, "'test1'", '->quote(test1) ok' ); + +# Disconnect +ok( $dbh->disconnect, '->disconnect' ); + +# Reconnect +$dbh = connect_ok( dbfile => 'foo' ); + +# Delete the table and recreate it +ok( $dbh->do('DROP TABLE one'), 'DROP' ); + +# Create the table again +ok( $dbh->do(<<'END_SQL'), 'CREATE TABLE' ); +CREATE TABLE one ( + id INTEGER NULL, + name CHAR (64) NULL +) +END_SQL + +# Insert into table +ok( $dbh->do("INSERT INTO one VALUES ( 1, 'A' )"), 'INSERT 1' ); + +# Delete it +ok( $dbh->do('DELETE FROM one WHERE id = 1'), 'DELETE 1' ); + +# When we "forget" execute, fail with error message +SCOPE: { + my $sth = $dbh->prepare('SELECT * FROM one WHERE id = 1'); + isa_ok( $sth, 'DBI::st' ); + my ($pe) = $sth->{PrintError}; + $sth->{PrintError} = 0; + my $rv = eval { + $sth->fetchrow; + }; + $sth->{PrintError} = $pe; + ok( $sth->execute, '->execute' ); + + # This should fail without error message: No rows returned. + my(@row, $ref); + SCOPE: { + local $^W = 0; + is( $sth->fetch, undef, '->fetch returns undef' ); + } + ok( $sth->finish, '->finish' ); +} + +# This section should exercise the sth->func( '_NumRows' ) private +# method by preparing a statement, then finding the number of rows +# within it. Prior to execution, this should fail. After execution, +# the number of rows affected by the statement will be returned. +SCOPE: { + my $sth = $dbh->prepare('SELECT * FROM one WHERE id = 1'); + isa_ok( $sth, 'DBI::st' ); + is( $sth->rows, -1, '->rows is negative' ); + ok( $sth->execute, '->execute ok' ); + is( $sth->rows, 0, '->rows returns 0' ); + ok( $sth->finish, '->finish' ); +} + +# Test whether or not a field containing a NULL is returned correctly +# as undef, or something much more bizarre +ok( $dbh->do("INSERT INTO one VALUES ( NULL, 'NULL-valued id' )"), 'INSERT 2' ); +SCOPE: { + my $sth = $dbh->prepare("SELECT id FROM one WHERE id IS NULL"); + isa_ok( $sth, 'DBI::st' ); + ok( $sth->execute, '->execute' ); + is_deeply( + $sth->fetchall_arrayref, + [ [ undef ] ], + 'NULL returned ok', + ); + ok( $sth->finish, '->finish' ); +} + +# Delete the test row from the table +ok( $dbh->do("DELETE FROM one WHERE id is NULL AND name = 'NULL-valued id'"), 'DELETE' ); + +# Test whether or not a char field containing a blank is returned +# correctly as blank, or something much more bizarre +ok( $dbh->do("INSERT INTO one VALUES ( 2, NULL )"), 'INSERT 3' ); +SCOPE: { + my $sth = $dbh->prepare("SELECT name FROM one WHERE id = 2 AND name IS NULL"); + isa_ok( $sth, 'DBI::st' ); + ok( $sth->execute, '->execute' ); + is_deeply( + $sth->fetchall_arrayref, + [ [ undef ] ], + '->fetchall_arrayref', + ); + ok( $sth->finish, '->finish' ); +} + + +# Delete the test row from the table +ok( $dbh->do('DELETE FROM ONE WHERE id = 2 AND name IS NULL'), 'DELETE' ); + +# Test the new funky routines to list the fields applicable to a SELECT +# statement, and not necessarily just those in a table... +SCOPE: { + my $sth = $dbh->prepare("SELECT * FROM one"); + isa_ok( $sth, 'DBI::st' ); + ok( $sth->execute, 'Execute' ); + ok( $sth->execute, 'Reexecute' ); + my @row = $sth->fetchrow_array; + ok( $sth->finish, '->finish' ); +} + +# Insert some more data into the test table......... +ok( $dbh->do("INSERT INTO one VALUES( 2, 'Gary Shea' )"), 'INSERT 4' ); +SCOPE: { + my $sth = $dbh->prepare("UPDATE one SET id = 3 WHERE name = 'Gary Shea'"); + isa_ok( $sth, 'DBI::st' ); +} |