Skip Menu |
 

This queue is for tickets about the DBD-SQLite CPAN distribution.

Report information
The Basics
Id: 32889
Status: resolved
Priority: 0/
Queue: DBD-SQLite

People
Owner: Nobody in particular
Requestors: 0x62ash [...] gmail.com
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: prepare_cached does not work correctly
Date: Sun, 3 Feb 2008 00:33:42 +0100
To: bug-DBD-SQLite [...] rt.cpan.org
From: "Alexander Batyrshin" <0x62ash [...] gmail.com>
Download (untitled) / with headers
text/plain 1.2k
Installed sqlite-3.5.4 and DBD::SQLite-1.14 I get problems with this code: ----%<-------------------------------------------- #!/usr/bin/perl -w use strict; use DBI; use Data::Dumper; use Storable; use warnings; sub get_session { my ($dbh) = shift; #$dbh->{TraceLevel} = 2; my $sid = $ARGV[0]; my $SQL = sprintf("select a_session from sessions where id = %s", $dbh->quote($sid)); my $sth = $dbh->prepare_cached($SQL, undef, 3); $sth->execute; my ($val) = $sth->fetchrow_array; $sth->execute; my ($val) = $sth->fetchrow_array; #[1] my ($val2) = $sth->fetchrow_array; #[2] $sth->finish; my $session = Storable::thaw($val); } my $dbh = DBI->connect('dbi:SQLite:dbname=db/sessions.db'); print Dumper(get_session($dbh)); $dbh->disconnect; ----%<-------------------------------------------- If we run program as it looks, result will be: DBI::db=HASH(0x87a79c)->disconnect invalidates 1 active statement handle (either destroy statement handles or call finish on them before disconnecting) at ./decode_sessions.pl line 26. closing dbh with active statement handles at ./decode_sessions.pl line 26. Note: that my database does not contain duplicated records. If I uncomment (1), (2) or (1)+(2) result: closing dbh with active statement handles at ./decode_sessions.pl line 26.
Download (untitled) / with headers
text/plain 316b
I've checked our cleanup behaviour as much as I can, and examined the default DBI::DBD behaviour, and as far as I can tell you MUST use ->finish when using prepare_cached statements, otherwise the cursors will persist and cause much bigger problems. Added a regression test for all known-good or expected behaviour.
From: ptushnik [...] gmail.com
Download (untitled) / with headers
text/plain 868b
On Sun Apr 05 14:53:38 2009, ADAMK wrote: Show quoted text
> I've checked our cleanup behaviour as much as I can, and examined the > default DBI::DBD behaviour, and as far as I can tell you MUST use > ->finish when using prepare_cached statements, otherwise the cursors > will persist and cause much bigger problems.
I am using ->finish result is the same: ---%<------------------ #!/usr/bin/perl -w use strict; use DBD::SQLite; use warnings; sub get_dbtime { my ($dbh) = shift; my $SQL = "SELECT strftime('%s', 'now')"; my $sth = $dbh->prepare_cached($SQL); $sth->execute; my ($val) = $sth->fetchrow_array; $sth->finish; return $val; } my $dbh = DBI->connect('dbi:SQLite:dbname=test.db'); print get_dbtime($dbh), "\n"; $dbh->disconnect; ---%<------------------ Result is: 1238960026 closing dbh with active statement handles at ./sql_test.pl line 20.
Which version of DBD::SQLite are you using? 1.19_09 or higher?
Download (untitled) / with headers
text/plain 197b
On Sun Apr 05 15:44:46 2009, ADAMK wrote: Show quoted text
> Which version of DBD::SQLite are you using? 1.19_09 or higher?
Sorry, I tested it under old 1.14. With 1.19_10 everything is OK. Thank you for response.
Original reporter confirms this is resolved.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.