X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FSQLite.pm;h=f69fe0a389803e7cbd81dc2cae7e433c54df302b;hb=c9d2e0a20b79cf2c65ff86e8b400ff683b18627d;hp=2d7d9ad44c211408af731bf6a5b47c5c59f7dc23;hpb=35a2ad468ae7e957cd24cdf6579c92a889baf6cc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/SQLite.pm b/lib/DBIx/Class/Storage/DBI/SQLite.pm index 2d7d9ad..f69fe0a 100644 --- a/lib/DBIx/Class/Storage/DBI/SQLite.pm +++ b/lib/DBIx/Class/Storage/DBI/SQLite.pm @@ -2,6 +2,9 @@ package DBIx::Class::Storage::DBI::SQLite; use strict; use warnings; +use POSIX 'strftime'; +use File::Copy; +use Path::Class; use base qw/DBIx::Class::Storage::DBI::MultiDistinctEmulation/; @@ -10,6 +13,34 @@ sub _dbh_last_insert_id { $dbh->func('last_insert_rowid'); } +sub backup +{ + my ($self) = @_; + + ## Where is the db file? + my $dsn = $self->connect_info()->[0]; + + my $dbname = $1 if($dsn =~ /dbname=([^;]+)/); + if(!$dbname) + { + $dbname = $1 if($dsn =~ /^dbi:SQLite:(.+)$/i); + } + $self->throw_exception("Cannot determine name of SQLite db file") + if(!$dbname || !-f $dbname); + +# print "Found database: $dbname\n"; + my $dbfile = file($dbname); +# my ($vol, $dir, $file) = File::Spec->splitpath($dbname); + my $file = $dbfile->basename(); + $file = strftime("%y%m%d%h%M%s", localtime()) . $file; + $file = "B$file" while(-f $file); + + my $res = copy($dbname, $file); + $self->throw_exception("Backup failed! ($!)") if(!$res); + + return $file; +} + 1; =head1 NAME