X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2FSQLite.pm;h=40ecec17c7f358102c4a47ebdd856a12958236c1;hb=6b1d4f76b756e4b4119153a1f1e8a7bd59ad4e87;hp=af8c3a0bd84f9abf89fde7c7882821900fab2618;hpb=dd87d4c4612dbc0120da1e1826cb3f09c15fbcdb;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm b/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm index af8c3a0..40ecec1 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/SQLite.pm @@ -10,7 +10,7 @@ use Carp::Clan qw/^DBIx::Class/; use Text::Balanced qw( extract_bracketed ); use Class::C3; -our $VERSION = '0.07000'; +our $VERSION = '0.07001'; =head1 NAME @@ -49,6 +49,22 @@ sub rescan { $self->next::method($schema); } +# A hack so that qualify_objects can be tested on SQLite, SQLite does not +# actually have schemas. +{ + sub _table_as_sql { + my $self = shift; + local $self->{db_schema}; + return $self->next::method(@_); + } + + sub _table_pk_info { + my $self = shift; + local $self->{db_schema}; + return $self->next::method(@_); + } +} + sub _columns_info_for { my $self = shift; my ($table) = @_; @@ -58,31 +74,20 @@ sub _columns_info_for { my $dbh = $self->schema->storage->dbh; local $dbh->{FetchHashKeyName} = 'NAME_lc'; - my $has_autoinc = eval { - my $get_seq = $self->{_cache}{sqlite_sequence} - ||= $dbh->prepare(q{SELECT count(*) FROM sqlite_sequence WHERE name = ?}); - $get_seq->execute($table); - my ($ret) = $get_seq->fetchrow_array; - $get_seq->finish; - $ret; - }; - - if (!$@ && $has_autoinc) { - my $sth = $dbh->prepare( - "pragma table_info(" . $dbh->quote_identifier($table) . ")" - ); - $sth->execute; - my $cols = $sth->fetchall_hashref('name'); - - while (my ($col_name, $info) = each %$result) { - if ($cols->{$col_name}{pk}) { - $info->{is_auto_increment} = 1; - } - } + my $sth = $dbh->prepare( + "pragma table_info(" . $dbh->quote_identifier($table) . ")" + ); + $sth->execute; + my $cols = $sth->fetchall_hashref('name'); + + while (my ($col_name, $info) = each %$result) { + if ($cols->{$col_name}{pk} && lc($cols->{$col_name}{type}) eq 'integer') { + $info->{is_auto_increment} = 1; + } } while (my ($col, $info) = each %$result) { - if (eval { ${ $info->{default_value} } }||'' eq 'CURRENT_TIMESTAMP') { + if ((eval { ${ $info->{default_value} } }||'') eq 'CURRENT_TIMESTAMP') { ${ $info->{default_value} } = 'current_timestamp'; } }