X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSQLite.pm;h=3024e890d4a2fd807e1db05268f59c1043a98798;hb=3705e3b2801ea6a8f770b6f0c528b119bea92fe9;hp=2e4e312c8b784d85781fe6886c399403813a50c6;hpb=215102b97a8da582b004401ae6a9ba8092268bce;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/SQLite.pm b/lib/DBIx/Class/Storage/DBI/SQLite.pm index 2e4e312..3024e89 100644 --- a/lib/DBIx/Class/Storage/DBI/SQLite.pm +++ b/lib/DBIx/Class/Storage/DBI/SQLite.pm @@ -6,7 +6,7 @@ use warnings; use base qw/DBIx::Class::Storage::DBI/; use mro 'c3'; -use DBIx::Class::_Util qw(modver_gt_or_eq sigwarn_silencer); +use DBIx::Class::_Util qw(modver_gt_or_eq sigwarn_silencer is_plain_value); use DBIx::Class::Carp; use Try::Tiny; use namespace::clean; @@ -126,11 +126,23 @@ sub _exec_svp_release { sub _exec_svp_rollback { my ($self, $name) = @_; - # For some reason this statement changes the value of $dbh->{AutoCommit}, so - # we localize it here to preserve the original value. - local $self->_dbh->{AutoCommit} = $self->_dbh->{AutoCommit}; + $self->_dbh->do("ROLLBACK TO SAVEPOINT $name"); +} + +# older SQLite has issues here too - both of these are in fact +# completely benign warnings (or at least so say the tests) +sub _exec_txn_rollback { + local $SIG{__WARN__} = sigwarn_silencer( qr/rollback ineffective/ ) + unless $DBD::SQLite::__DBIC_TXN_SYNC_SANE__; - $self->_dbh->do("ROLLBACK TRANSACTION TO SAVEPOINT $name"); + shift->next::method(@_); +} + +sub _exec_txn_commit { + local $SIG{__WARN__} = sigwarn_silencer( qr/commit ineffective/ ) + unless $DBD::SQLite::__DBIC_TXN_SYNC_SANE__; + + shift->next::method(@_); } sub _ping { @@ -314,7 +326,7 @@ sub _dbi_attrs_for_bind { for my $i (0.. $#$bindattrs) { - $stringifiable++ if ( length ref $bind->[$i][1] and overload::Method($bind->[$i][1], '""') ); + $stringifiable++ if ( length ref $bind->[$i][1] and is_plain_value($bind->[$i][1]) ); if ( defined $bindattrs->[$i]