CC: | jbroadwater [...] onairusa.com (Jim Broadwater), johnnyschad [...] smartsbroadcast.com (Johnny Schad), pcervasio [...] onairusa.com, cervasio [...] airmail.net, toddmontag [...] smartsbroadcast.com (Todd Montag), janschad [...] smartsbroadcast.com (Jan (Smarts) Schad) |
Subject: | Version 0.47 and Next transactions |
Date: | Sat, 17 Nov 2007 19:01:14 -0600 (CST) |
To: | bug-DBD-InterBase [...] rt.cpan.org |
From: | nelsonbe [...] earthlink.net |
To: bug-DBD-InterBase@rt.cpan.org
cc: On Air Tech Staff
Fr: Bob Nelson bnelson@onairusa.com, support@onairusa.com
Dt: 17 NOV 2007
Re: DBD::InterBase Version 0.47 and Next transactions
Edwin Pratomo <edpratomo@cpan.org> and Daniel Ritz <daniel.ritz@gmx.ch>:
* Please see this response from Helen Borrie (author of ``The Firebird
Book'') concerning a topic I raised concerning the value of ``Next
transaction'':
http://tech.groups.yahoo.com/group/firebird-support/message/90535
Everything is described in that link (platform and Firebird version).
The crux of the problem is that ``DBD::InterBase-0.47'' increments only the
value of ``Next transaction'' when ONLY a single ``SELECT'' query is
executed.
- If more than just one ``SELECT'' execution is added to the test script
shown below, the problem vanishes and the Firebird transaction counters
all increment accordingly.
The simple program shown below illustrates the problem, especially when run
in a loop from the shell and the output of ``gstat -h'' is being checked as
the program runs. For example:
1). while true ; do ./dbd47-transaction.pl; sleep 1; done
2). gstat -h -user sysdba -pass masterkey \
/opt/firebird/examples/empbuild/employee.fdb
-------------------- [ BEGIN dbd47-transaction.pl ] -------------------------
#!/usr/bin/perl -w
use strict;
use DBI;
my $host = 'localhost';
my $db = 'employee';
my $user = 'sysdba';
my $pass = 'masterkey';
my $dbi = "dbi:InterBase:host=$host;db=$db;ib_dialect=3";
my $dbh = DBI->connect($dbi, $user, $pass, { PrintError => 1,
RaiseError => 1,
AutoCommit => 1 });
die "can't connect to $dbi - $DBI::errstr\n" unless $dbh;
my $query = 'SELECT FIRST 1 * FROM country';
my $sth = $dbh->prepare($query);
die "dbh->prepare failed - $DBI::errstr\n" unless $sth;
$sth->execute;
while(my @row = $sth->fetchrow_array) {
foreach my $data(@row) {
if(defined $data) {
print "$data|";
}
else {
print "NULL|";
}
}
print "\n";
}
$sth->finish;
$dbh->disconnect;
-------------------- [ END dbd47-transaction.pl ] -------------------------