use strict;
use warnings;
+
+use base qw/DBIx::Class::Storage::DBI/;
+use mro 'c3';
+
use POSIX 'strftime';
use File::Copy;
use File::Spec;
-use base qw/DBIx::Class::Storage::DBI::MultiDistinctEmulation/;
-
-sub _dbh_last_insert_id {
- my ($self, $dbh, $source, $col) = @_;
- $dbh->func('last_insert_rowid');
-}
+__PACKAGE__->sql_maker_class('DBIx::Class::SQLAHacks::SQLite');
sub backup
{
$dir ||= './';
## Where is the db file?
- my $dsn = $self->connect_info()->[0];
+ my $dsn = $self->_dbi_connect_info()->[0];
my $dbname = $1 if($dsn =~ /dbname=([^;]+)/);
if(!$dbname)
return $backupfile;
}
-sub disconnect {
+sub deployment_statements {
+ my $self = shift;;
+ my ($schema, $type, $version, $dir, $sqltargs, @rest) = @_;
- # As described in this node http://www.perlmonks.org/?node_id=666210
- # there seems to be no sane way to ->disconnect a SQLite database with
- # cached statement handles. As per mst we just zap the cache and
- # proceed as normal.
+ $sqltargs ||= {};
- my $self = shift;
- if ($self->connected) {
- $self->_dbh->{CachedKids} = {};
- $self->next::method (@_);
+ # it'd be cool to use the normalized perl-style version but this needs sqlt hacking as well
+ if (my $sqlite_version = $self->_server_info->{dbms_version}) {
+ # numify, SQLT does a numeric comparison
+ $sqlite_version =~ s/^(\d+) \. (\d+) (?: \. (\d+))? .*/${1}.${2}/x;
+
+ $sqltargs->{producer_args}{sqlite_version} = $sqlite_version if $sqlite_version;
}
+
+ $self->next::method($schema, $type, $version, $dir, $sqltargs, @rest);
}
+sub datetime_parser_type { return "DateTime::Format::SQLite"; }
+
+=head2 connect_call_use_foreign_keys
+
+Used as:
+
+ on_connect_call => 'use_foreign_keys'
+
+In L<connect_info|DBIx::Class::Storage::DBI/connect_info> to turn on foreign key
+(including cascading) support for recent versions of SQLite and L<DBD::SQLite>.
+
+Executes:
+
+ PRAGMA foreign_keys = ON
+
+See L<http://www.sqlite.org/foreignkeys.html> for more information.
+
+=cut
+
+sub connect_call_use_foreign_keys {
+ my $self = shift;
+
+ $self->_do_query(
+ 'PRAGMA foreign_keys = ON'
+ );
+}
1;
=head1 SYNOPSIS
# In your table classes
- __PACKAGE__->load_components(qw/PK::Auto Core/);
+ use base 'DBIx::Class::Core';
__PACKAGE__->set_primary_key('id');
=head1 DESCRIPTION