# Copyright (c) 2003, 2004, 2005 Jeffrey I Cohen. All rights reserved. # # Before `make install' is performed this script should be runnable with # `make test'. After `make install' it should work as `perl test.pl' ######################### We start with some black magic to print on failure. # Change 1..1 below to 1..last_test_to_print . # (It may become useful if the test is moved to ./t subdirectory.) BEGIN { $| = 1; print "1..48\n"; } END {print "not ok 1\n" unless $loaded;} use Genezzo::GenDBI; $loaded = 1; print "ok 1\n"; ######################### End of black magic. # Insert your test code below (better if it prints "ok 13" # (correspondingly "not ok 13") depending on the success of chunk 13 # of the test code): use strict; use warnings; use File::Path; use File::Spec; my $TEST_COUNT; $TEST_COUNT = 2; my $dbinit = 1; my $gnz_home = File::Spec->catdir("t", "gnz_home"); my $gnz_restore = File::Spec->catdir("t", "restore"); #rmtree($gnz_home, 1, 1); #mkpath($gnz_home, 1, 0755); { use Genezzo::TestSetup; my $fb = Genezzo::TestSetup::CreateOrRestoreDB( gnz_home => $gnz_home, restore_dir => $gnz_restore); unless (defined($fb)) { not_ok ("could not create database"); exit 1; } ok(); $dbinit = 0; } { use Genezzo::Util; my $fb = Genezzo::GenDBI->new(exe => $0, gnz_home => $gnz_home, dbinit => $dbinit); unless (defined($fb)) { not_ok ("could not find database"); exit 1; } ok(); $dbinit = 0; if ($fb->Parseall("startup")) { ok(); } else { not_ok ("could not startup"); } if ($fb->Parseall("addfile")) { ok(); } else { not_ok ("could not addfile"); } if ($fb->Parseall("addfile")) { ok(); } else { not_ok ("could not addfile"); } if ($fb->Parseall("addfile")) { ok(); } else { not_ok ("could not addfile"); } if ($fb->Parseall("ct test1 col1=c col2=c col3=c col4=c")) { ok(); } else { not_ok ("could not create table"); } if ($fb->Parseall("i test1 a b c d e f g h i j k l")) { ok(); } else { not_ok ("could not insert"); } if ($fb->Parseall('insert into test1 values (\'a1\', \'b1\', \'c1\', \'d1\', \'e1\', \'f1\', \'g1\', \'h1\')')) { ok(); } else { not_ok ("could not insert"); } my $dictobj = $fb->{dictobj}; my $tstable = $dictobj->DictTableGetTable (tname => "test1"); my $tv = tied(%{$tstable}); greet $tstable; # greet $tstable, $tv; greet "colcnt is ", $tv->HCount(); my @plist; my @glist = qw( alphabravo delta_echo golf_hotel lima__mike ); for my $jj (@glist) { my $vv = $jj x 200; # make 2k bytes each push @plist, $vv; } # XXX XXX: Note that direct manipulation of the hash lets you insert # more columns than specified in the create table statement greet $tv->HPush (\@plist); greet $tv->HPush (\@plist); greet $tv->HPush (\@plist); greet $tv->HPush (\@plist); # greet $tv->HSuck (value => \@plist); for my $jj (1..10) { $fb->Parseall("i test1 a b c d e f g h i j k l"); $fb->Parseall('insert into test1 values (\'a1\', \'b1\', \'c1\', \'d1\', \'e1\', \'f1\', \'g1\', \'h1\')'); $tv->HPush (\@plist); for my $ii (1..100) { last unless ($tv->HPush(\@glist)); } } if ($fb->Parseall("commit")) { ok(); } else { not_ok ("could not commit"); } if ($fb->Parseall("shutdown")) { ok(); } else { not_ok ("could not shutdown"); } } { use Genezzo::Util; my $dbh = Genezzo::GenDBI->connect($gnz_home, "NOUSER", "NOPASSWORD"); unless (defined($dbh)) { not_ok ("could not find database"); exit 1; } ok(); if ($dbh->do("startup")) { ok(); } else { not_ok ("could not startup"); } my $sth = $dbh->prepare('insert into test1 values (\'a\',\'b\',\'c\',\'d\',\'e\',\'f\',\'g\',\'h\')'); greet $sth->rows; print $sth->execute(), " rows \n"; print $sth->execute(), " rows \n"; greet $sth->rows; if ($dbh->do("ct test2 col1=c col2=c col3=c col4=c")) { ok(); } else { not_ok ("could not create table"); } $sth = $dbh->prepare('insert into test2 values ( \'alpha\', \'bravo\', \'charlie\', \'delta\', \'echo\', \'foxtrot\', \'golf\', \'hotel\')'); greet $sth->rows; for my $ii (1..10) { if (2 == $sth->execute()) { ok(); } else { not_ok ("could insert 2 rows"); } if (2 == $sth->rows()) { ok(); } else { not_ok ("could not get row count"); } } $sth = $dbh->prepare("select * from test2"); print $sth->execute(), " rows \n"; my @ftchary; while (1) { my @ggg = $sth->fetchrow_array(); last unless (scalar(@ggg)); @ftchary = @ggg; } greet @ftchary; $sth = $dbh->prepare("select count(*) from test2"); print $sth->execute(), " rows \n"; my $lastfetch; while (1) { my $ggg = $sth->fetchrow_hashref(); last unless (defined($ggg)); $lastfetch = $ggg; } if (exists($lastfetch->{'COUNT(*)'}) && $lastfetch->{'COUNT(*)'} == 20) { ok(); } else { not_ok ("could not fetch count(*)"); } greet "test1 ecount"; $sth = $dbh->prepare("s test1 ecount"); print $sth->execute(), " rows \n"; @ftchary = (); while (1) { my @ggg = $sth->fetchrow_array(); last unless (scalar(@ggg)); @ftchary = @ggg; } shift @ftchary; # clear off the estimate if ($ftchary[0] == 1073) { ok(); } else { not_ok ("could not fetch ecount(*)"); } $sth = $dbh->prepare("s test1 count"); print $sth->execute(), " rows \n"; @ftchary = (); while (1) { my @ggg = $sth->fetchrow_array(); last unless (scalar(@ggg)); @ftchary = @ggg; } greet @ftchary; if ($ftchary[0] == 1073) { ok(); } else { not_ok ("could not fetch ecount(*)"); } $sth = $dbh->prepare("select rid \"ROWid\", rownum as \"NuMbEr\", col1 \"BAKER\", col2 as \"CHUCK\" from test2"); print $sth->execute(), " rows \n"; if ($sth->{NUM_OF_FIELDS} == 4) { ok(); } else { not_ok ("could get number of fields"); } my @name1; push @name1, @{$sth->{NAME}}; for my $nn ('ROWid', 'NuMbEr', 'BAKER', 'CHUCK') { my $n2 = shift @name1; if ($n2 eq $nn) { ok(); } else { not_ok ("invalid field names $n2, $nn"); } } $lastfetch = (); while (1) { my $ggg = $sth->fetch; last unless (defined($ggg)); $lastfetch = $ggg; } greet $sth->rows; @ftchary = $dbh->selectrow_array("select count(*) from test2"); if (scalar(@ftchary) && $ftchary[0] == 20) { ok(); } else { not_ok ("could not fetch array count(*)"); } $lastfetch = $dbh->selectrow_hashref("select count(*) from test2"); if (exists($lastfetch->{'COUNT(*)'}) && $lastfetch->{'COUNT(*)'} == 20) { ok(); } else { not_ok ("could not fetch hash count(*)"); } $lastfetch = $dbh->selectrow_arrayref("select count(*) from test2"); if (scalar(@{$lastfetch}) && $lastfetch->[0] == 20) { ok(); } else { not_ok ("could not fetch ary ref count(*)"); } if ($dbh->do("commit")) { ok(); } else { not_ok ("could not commit"); } if ($dbh->do("shutdown")) { ok(); } else { not_ok ("could not shutdown"); } } sub ok { print "ok $TEST_COUNT\n"; $TEST_COUNT++; } sub not_ok { my ( $message ) = @_; print "not ok $TEST_COUNT # $message\n"; $TEST_COUNT++; } sub skip { my ( $message ) = @_; print "ok $TEST_COUNT # skipped: $message\n"; $TEST_COUNT++; }