Yuriy Kaminskiy wrote:
> Yuriy Kaminskiy wrote:
>> Yuriy Kaminskiy wrote:
>>> Hello!
>>> I noticed strange problem on error path handling.
>>>
>>> Not sure if this sqlite error, DBD::SQLite error, or some misunderstanding 
>>> on my
>>> part.
>>>
>>> Verified on DBD::SQLite-1.33 and 1.34_1 (with bundled sqlite.c) and 
>>> DBI-1.616.
>>>
>>> my $sth=$dbh->prepare("SELECT * FROM t");
>>> $sth->execute; # success - 0E0
>>> my $row1 = $sth->fetch; # returns [1]
>>> $sth->finish;
>>> sleep 5;
>>> # ^^ here another instance issued BEGIN EXCLUSIVE ...
>>> $sth->execute; # ... so this returns "database is locked";
>>> # it's legitimate/expected behavior
>>> #
>>> $sth->finish; # just in case (clears error)
>>> #
>>> sleep 5;
>>> # ^^ here another instance already COMMIT'ed, DB is not locked anymore
>>> #
>>> $sth->execute; # success - 0E0
>>> my $row2 = $sth->fetch; # returns undef
>>> #
>>> # WTF?
>>> #
>>> # If I prepare another statement (cloned from first!),
>>> # it returns row as expected:
>>> #
>>> my $sth2 = $dbh->prepare($sth->{Statement});
>>> $sth2->execute; # success
>>> my $row3 = $sth2->fetch; # returns [1]
>> With attached patch it works as expected. Seems passes regression test, even
>> under valgrind (but maybe regression test should be improved, so that it 
>> won't
>> pass it *before* this patch).
>>
>> This bug was introduced (or, maybe, "incompletely fixed") by svn revision 
>> 5944
>> (author: adamk/subject: "Changed finalize to reset per RT #32100 et al"/date:
>> 2009-04-04 07:01:40), that replaced sqlite3_finalize with sqlite3_reset, but
>> have not removed stmt NULLification.
> 
> v2: remove tabs, split unrelated changes to separate patch
> 
Most code adopted from from t/08_busy.t

Attachment: 46_execute.t
Description: Troff document

_______________________________________________
DBD-SQLite mailing list
DBD-SQLite@lists.scsys.co.uk
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbd-sqlite

Reply via email to