# -*-Perl-*-
# $Id: multi_sth.t,v 1.3 2005/10/01 13:05:13 mpeppler Exp $
#
#
# Multiple sth on single dbh test.
use lib 't';
use _test;
use strict;
use Test::More tests => 43;
#use Test::More qw(no_plan);
BEGIN { use_ok('DBI');
use_ok('DBD::Sybase');}
use vars qw($Pwd $Uid $Srv $Db);
($Uid, $Pwd, $Srv, $Db) = _test::get_info();
my $dbh = DBI->connect("dbi:Sybase:server=$Srv;database=$Db",
$Uid, $Pwd,
{PrintError=>0,
AutoCommit => 1,});
ok(defined($dbh), 'Connect');
if(!$dbh) {
warn "No connection - did you set the user, password and server name correctly in PWD?\n";
for (4 .. 43) {
ok(0);
}
exit(0);
}
test1($dbh);
test2($dbh);
test3($dbh);
test4($dbh);
test5($dbh);
test6($dbh);
# Vanilla test - do the "correct" prepare/execute handling.
sub test1 {
my $dbh = shift;
my $rc;
my $sth1 = $dbh->prepare("select * from master..sysprocesses");
ok(defined($sth1), 'test1 prepare1');
my $sth2 = $dbh->prepare("select * from sysusers");
ok(defined($sth2), 'test1 prepare2');
$rc = $sth1->execute;
ok(defined($rc), 'test1 execute1');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test1 fetch1");
$rc = $sth2->execute;
ok(defined($rc), 'test1 execute2');
$rc = 0;
while(my $d = $sth2->fetch) {
if($sth2->err) {
$rc = $sth2->err;
}
}
if($sth2->err) {
$rc = $sth2->err;
}
ok($rc == 0, "test1 fetch2");
}
# Same thing, with placeholders.
sub test2 {
my $dbh = shift;
SKIP: {
skip '? placeholders not supported', 6 unless $dbh->{syb_dynamic_supported};
my $rc;
my $sth1 = $dbh->prepare("select * from master..sysprocesses where spid = ?");
ok(defined($sth1), 'test2 prepare1');
my $sth2 = $dbh->prepare("select * from sysusers where suid = ?");
ok(defined($sth2), 'test2 prepare2');
$rc = $sth1->execute(1);
ok(defined($rc), 'test2 execute1');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test2 fetch1");
$rc = $sth2->execute(1);
ok(defined($rc), 'test2 execute2');
$rc = 0;
while(my $d = $sth2->fetch) {
if($sth2->err) {
$rc = $sth2->err;
}
}
if($sth2->err) {
$rc = $sth2->err;
}
ok($rc == 0, "test2 fetch2");
} # SKIP
}
# Same thing, with placeholders.
sub test3 {
my $dbh = shift;
SKIP: {
skip '? placeholders not supported', 6 unless $dbh->{syb_dynamic_supported};
my $rc;
my $sth1 = $dbh->prepare("select * from master..sysprocesses where spid = ?");
ok(defined($sth1), 'test3 prepare1');
my $sth2 = $dbh->prepare("select * from sysusers where suid = ?");
ok(defined($sth2), 'test3 prepare2');
$rc = $sth1->execute(1);
ok(defined($rc), 'test3 execute1');
# Interleaved execute()
$rc = $sth2->execute(1);
ok(defined($rc), 'test3 execute2');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test3 fetch1");
$rc = 0;
#DBI->trace(4);
while(my $d = $sth2->fetch) {
if($sth2->err) {
$rc = $sth2->err;
}
}
if($sth2->err) {
$rc = $sth2->err;
}
ok($rc == 0, "test3 fetch2");
} #SKIP
}
# Same thing, first with placeholders, second without
sub test4 {
my $dbh = shift;
SKIP: {
skip '? placeholders not supported', 6 unless $dbh->{syb_dynamic_supported};
my $rc;
my $sth1 = $dbh->prepare("select * from master..sysprocesses where spid = ?");
ok(defined($sth1), 'test4 prepare1');
my $sth2 = $dbh->prepare("select * from sysusers");
ok(defined($sth2), 'test4 prepare2');
$rc = $sth1->execute(1);
ok(defined($rc), 'test4 execute1');
# Interleaved execute()
$rc = $sth2->execute();
ok(defined($rc), 'test4 execute2');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test4 fetch1");
$rc = 0;
#DBI->trace(4);
while(my $d = $sth2->fetch) {
if($sth2->err) {
$rc = $sth2->err;
}
}
if($sth2->err) {
$rc = $sth2->err;
}
ok($rc == 0, "test4 fetch2");
} #SKIP
}
# This time, set the "no_child_con" flag, and execute the statements
# sequentially.
sub test5 {
my $dbh = shift;
SKIP: {
skip '? placeholders not supported', 8 unless $dbh->{syb_dynamic_supported};
my $rc;
$dbh->{syb_no_child_con} = 1;
my $sth1 = $dbh->prepare("select * from master..sysprocesses where spid = ?");
ok(defined($sth1), 'test5 prepare1');
$rc = $sth1->execute(1);
ok(defined($rc), 'test5 execute1');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test5 fetch1");
my $sth2 = $dbh->prepare("select * from sysusers");
ok(defined($sth2), 'test5 prepare2');
$rc = $sth2->execute();
ok(defined($rc), 'test5 execute2');
$rc = 0;
#DBI->trace(4);
while(my $d = $sth2->fetch) {
if($sth2->err) {
$rc = $sth2->err;
}
}
if($sth2->err) {
$rc = $sth2->err;
}
ok($rc == 0, "test5 fetch2");
$rc = $sth1->execute(1);
ok(defined($rc), 'test5 execute3');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test5 fetch3");
} #SKIP
$dbh->{syb_no_child_con} = 0;
}
# This time, set the "no_child_con" flag, and execute the statements
# sequentially. Same as test5, but no dynamic SQL.
sub test6 {
my $dbh = shift;
my $rc;
$dbh->{syb_no_child_con} = 1;
my $sth1 = $dbh->prepare("select * from master..sysprocesses");
ok(defined($sth1), 'test6 prepare1');
$rc = $sth1->execute();
ok(defined($rc), 'test6 execute1');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test6 fetch1");
my $sth2 = $dbh->prepare("select * from sysusers");
ok(defined($sth2), 'test6 prepare2');
$rc = $sth2->execute();
ok(defined($rc), 'test6 execute2');
$rc = 0;
#DBI->trace(4);
while(my $d = $sth2->fetch) {
if($sth2->err) {
$rc = $sth2->err;
}
}
if($sth2->err) {
$rc = $sth2->err;
}
ok($rc == 0, "test6 fetch2");
$rc = $sth1->execute();
ok(defined($rc), 'test6 execute3');
$rc = 0;
while(my $d = $sth1->fetch) {
if($sth1->err) {
$rc = $sth1->err;
}
}
if($sth1->err) {
$rc = $sth1->err;
}
ok($rc == 0, "test6 fetch3");
$dbh->{syb_no_child_con} = 0;
}