#!/usr/bin/perl
#
# $Id: autocommit.t,v 1.6 2005/10/01 13:05:13 mpeppler Exp $
use lib 'blib/lib';
use lib 'blib/arch';
use lib 't';
use _test;
use strict;
use Test::More tests => 9;
#use Test::More qw(no_plan);
BEGIN { use_ok('DBI');
use_ok('DBD::Sybase');}
use vars qw($Pwd $Uid $Srv $Db);
#DBI->trace(2);
($Uid, $Pwd, $Srv, $Db) = _test::get_info();
my $dbh = DBI->connect("dbi:Sybase:server=$Srv;database=$Db", $Uid, $Pwd, {PrintError => 0});
ok(defined($dbh), 'Connect');
if(!$dbh) {
warn "No connection - did you set the user, password and server name correctly in PWD?\n";
for (4 .. 11) {
ok(0);
}
exit(0);
}
$dbh->do("create table #ttt (foo varchar(20), bar int)");
$dbh->{AutoCommit} = 0;
$dbh->do("insert #ttt values('a string', 1)");
$dbh->do("insert #ttt values('another string', 2)");
$dbh->do("insert #ttt values('foodiboo', 3)");
$dbh->do("insert #ttt values('a string', 4)");
$dbh->rollback;
my $sth = $dbh->prepare("select * from #ttt");
$sth->execute;
my $found = 0;
while(my $d = $sth->fetch) {
print "@$d\n";
++$found;
}
ok(!$found, 'rollback');
$dbh->do("insert #ttt values('a string', 1)");
$dbh->do("insert #ttt values('another string', 2)");
$dbh->do("insert #ttt values('foodiboo', 3)");
$dbh->do("insert #ttt values('a string', 4)");
$dbh->commit;
$sth = $dbh->prepare("select * from #ttt");
$sth->execute;
$found = 0;
while(my $d = $sth->fetch) {
print "@$d\n";
++$found;
}
ok($found == 4, 'Commit');
# Add some tests to validate the begin_work() functionality
$dbh->{AutoCommit} = 1;
$dbh->begin_work;
$dbh->do("insert #ttt values('a string', 1)");
$dbh->do("insert #ttt values('another string', 2)");
$dbh->do("insert #ttt values('foodiboo', 3)");
$dbh->do("insert #ttt values('a string', 4)");
$dbh->commit;
ok($dbh->{AutoCommit} == 1, "begin_work");
# Test to check for problems with non-chained mode.
$dbh->{syb_chained_txn} = 0;
$dbh->{AutoCommit} = 0;
$sth = $dbh->prepare("select 5");
ok($sth, "Non-chained prepare");
my $rc = $sth->finish;
ok($rc, "Finish");
$rc = $dbh->commit;
ok($rc, "commit");
$dbh->disconnect;