summaryrefslogtreecommitdiff
path: root/t/15_ak_dbd.t
diff options
context:
space:
mode:
Diffstat (limited to 't/15_ak_dbd.t')
-rw-r--r--t/15_ak_dbd.t138
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' );
+}