[DBD-SQLite] Re: Regression test for this bug (was [PATCH v2] Don't set imp_sth->stmt to NULL on error path)

kenichi ishigaki kishigaki at gmail.com
Thu Oct 6 05:25:53 GMT 2011


Hi Yuriy,

Thank you for the patches. This issue seems to have deeper roots,
so please give me some time before I apply them.

Best,

Kenichi

2011/10/6 Yuriy Kaminskiy <yumkam at mail.ru>:
> 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
>
> _______________________________________________
> DBD-SQLite mailing list
> DBD-SQLite at lists.scsys.co.uk
> http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbd-sqlite
>
>



More information about the DBD-SQLite mailing list