[Dbix-class] ->storage->disconnect() Required After Using SQLite?
Steven Mackenzie
dbix at aptile.co.uk
Wed Oct 4 00:08:42 CEST 2006
Hello,
DBD::SQLite::VERSION 1.12
DBIx::Class::VERSION 0.07001
I'm running a script to patch an error in my database. It loops over
each bad row and fixes it, and works fine, except that it requires me to
have
$data->storage->disconnect();
at the end of it, otherwise I get this message:
Issuing rollback() for database handle being DESTROY'd without explicit
disconnect().
Is there a DBIx close() or disconnect() type of method I should be
calling? It seems a bit wrong to be calling methods directly on the
storage? I haven't seen it needed in any examples ...
Steven
== script that I am running: PatchPtid.pl ===
my $db_filename = shift;
use HousePrices::Schema;
my $data =
HousePrices::Schema->connect(
"dbi:SQLite:$db_filename" , undef , undef ,
{
AutoCommit => 0, # ... so use txn_begin to start transactions
RaiseError => 1 # raise exceptions on error
}
);
my $delisted =
$data->resultset('Availability')->find({Status=>'HP_DELISTED'});
my @mpd_rows = $delisted->search_related('marketedPropertyDetails');
# ... pull all rows in to an array instead of using an iterator
# because SQLite will not let us update the DB inside an iterator loop.
$data->txn_begin();
foreach my $mpd (@mpd_rows)
{
my $previous_observation =
$data->resultset('MarketedPropertyDetails')->search_literal(
"mpid = ? and (avid != ? or avid is NULL) order by SeenOnDate desc
limit 1",
$mpd->mpid(), $delisted->avid() )->single();
die "No previous observation for ".$mpd->mpid() if(
!$previous_observation );
if( $previous_observation->ptid() )
{
$mpd->ptid( $previous_observation->ptid );
print "--updated mpid: ".$mpd->mpid." ptid: ".$mpd->ptid."\n";
$mpd->update();
}
}
$data->txn_commit();
my $mpd_still_null = $delisted->search_related('marketedPropertyDetails',
{ptid => undef})->count;
print "$mpd_still_null MarketedPropertyDetails rows were not updated.\n";
#$data->storage->disconnect();
#Issuing rollback() for database handle being DESTROY'd without explicit
# disconnect().
More information about the Dbix-class
mailing list