use Text::Balanced qw( extract_bracketed );
use Class::C3;
-our $VERSION = '0.03999_01';
+our $VERSION = '0.04006';
=head1 NAME
package My::Schema;
use base qw/DBIx::Class::Schema::Loader/;
- __PACKAGE__->loader_optoins( relationships => 1 );
+ __PACKAGE__->loader_options( debug => 1 );
1;
See L<DBIx::Class::Schema::Loader::Base>.
+=head1 METHODS
+
+=head2 rescan
+
+SQLite will fail all further commands on a connection if the
+underlying schema has been modified. Therefore, any runtime
+changes requiring C<rescan> also require us to re-connect
+to the database. The C<rescan> method here handles that
+reconnection for you, but beware that this must occur for
+any other open sqlite connections as well.
+
=cut
+sub rescan {
+ my ($self, $schema) = @_;
+
+ $schema->storage->disconnect if $schema->storage;
+ $self->next::method($schema);
+}
+
# XXX this really needs a re-factor
sub _sqlite_parse_table {
my ($self, $table) = @_;
$sth->finish;
# Cut "CREATE TABLE ( )" blabla...
- $sql =~ /^[\w\s]+\((.*)\)$/si;
+ $sql =~ /^[\w\s']+\((.*)\)$/si;
my $cols = $1;
# strip single-line comments
# Grab reference
chomp $col;
- if($col =~ /^(.*)\s+UNIQUE/) {
+ if($col =~ /^(.*)\s+UNIQUE/i) {
my $colname = $1;
$colname =~ s/\s+.*$//;
push(@uniqs, [ "${colname}_unique" => [ lc $colname ] ]);
}
- elsif($col =~/^\s*UNIQUE\s*\(\s*(.*)\)/) {
+ elsif($col =~/^\s*UNIQUE\s*\(\s*(.*)\)/i) {
my $cols = $1;
$cols =~ s/\s+$//;
my @cols = map { lc } split(/\s*,\s*/, $cols);
push(@uniqs, [ $name => \@cols ]);
}
- next if $col !~ /^(.*)\s+REFERENCES\s+(\w+) (?: \s* \( (.*) \) )? /ix;
+ next if $col !~ /^(.*\S)\s+REFERENCES\s+(\w+) (?: \s* \( (.*) \) )? /ix;
my ($cols, $f_table, $f_cols) = ($1, $2, $3);
my @tables;
while ( my $row = $sth->fetchrow_hashref ) {
next unless lc( $row->{type} ) eq 'table';
+ next if $row->{tbl_name} =~ /^sqlite_/;
push @tables, $row->{tbl_name};
}
+ $sth->finish;
return @tables;
}