Really fix the DBD::SQLite ping() issue
authorPeter Rabbitson <ribasushi@cpan.org>
Tue, 9 Oct 2012 11:35:09 +0000 (13:35 +0200)
committerPeter Rabbitson <ribasushi@cpan.org>
Fri, 12 Oct 2012 14:20:32 +0000 (16:20 +0200)
commit2aeb3c7f2097a133952939b32d7dcaa46b0bfd3c
tree68c22ad8d96eefca3fdb8622c99cabe27f3defb6
parent2e0924422e40d5a054b74c6db93af0d48da758ec
Really fix the DBD::SQLite ping() issue

Apparently DBD::SQLite is notoriously bad at synchronizing its internal
transaction state with {AutoCommit}
https://metacpan.org/source/ADAMK/DBD-SQLite-1.37/lib/DBD/SQLite.pm#L921
There is a function http://www.sqlite.org/c3ref/get_autocommit.html
but DBD::SQLite does not expose it (nor does it seem to properly use it)

Furthermore the detection is rather broken as described in RT#80087.
Bend over backwards to attempt to preserve as much sanity as possible.
While at it issue a non-trappable warning so that folks fix the offending
codepath (which arguably is still broken)

It is possible to have a proper "connection", and have "ping" return
false anyway (e.g. corrupted file). In such cases DBD::SQLite still
keeps the actual file handle open. We don't really want this to happen,
so force-close the handle via DBI itself (this solves a bunch of Win32
test failures)
Changes
lib/DBIx/Class/Storage/DBI/SQLite.pm
t/752sqlite.t