X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI.pm;h=139be54e1bc6adbca1de50b04dddbb68efee399b;hb=b1ad1a8402a5eb0955c6b76310809c2ab29291a9;hp=942438d93a7c54437a4fbed252085a952d51c7bc;hpb=e57fd7269a26350d11d6162e7aca7812b0938f7a;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI.pm b/lib/DBIx/Class/Schema/Loader/DBI.pm index 942438d..139be54 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI.pm @@ -6,7 +6,7 @@ use base qw/DBIx::Class::Schema::Loader::Base/; use Class::C3; use Carp::Clan qw/^DBIx::Class/; -our $VERSION = '0.04999_07'; +our $VERSION = '0.04999_10'; =head1 NAME @@ -46,14 +46,8 @@ sub new { } # Set up the default quoting character and name seperators - $self->{_quoter} = $self->schema->storage->sql_maker->quote_char - || $dbh->get_info(29) - || q{"}; - - $self->{_namesep} = $self->schema->storage->sql_maker->name_sep - || $dbh->get_info(41) - || q{.}; - + $self->{_quoter} = $self->_build_quoter; + $self->{_namesep} = $self->_build_namesep; # For our usage as regex matches, concatenating multiple quoter # values works fine (e.g. s/\Q<>\E// if quoter was [ '<', '>' ]) if( ref $self->{_quoter} eq 'ARRAY') { @@ -65,6 +59,22 @@ sub new { $self; } +sub _build_quoter { + my $self = shift; + my $dbh = $self->schema->storage->dbh; + return $dbh->get_info(29) + || $self->schema->storage->sql_maker->quote_char + || q{"}; +} + +sub _build_namesep { + my $self = shift; + my $dbh = $self->schema->storage->dbh; + return $dbh->get_info(41) + || $self->schema->storage->sql_maker->name_sep + || q{.}; +} + # Override this in vendor modules to do things at the end of ->new() sub _setup { } @@ -79,8 +89,15 @@ sub _tables_list { my $dbh = $self->schema->storage->dbh; my @tables = $dbh->tables(undef, $self->db_schema, $table, $type); - s/\Q$self->{_quoter}\E//g for @tables; - s/^.*\Q$self->{_namesep}\E// for @tables; + + my $qt = qr/\Q$self->{_quoter}\E/; + + if ($self->{_quoter} && $tables[0] =~ /$qt/) { + s/.* $qt (?= .* $qt)//xg for @tables; + } else { + s/^.*\Q$self->{_namesep}\E// for @tables; + } + s/$qt//g for @tables; return @tables; } @@ -106,10 +123,13 @@ sub _table_columns { my $dbh = $self->schema->storage->dbh; if($self->{db_schema}) { - $table = $self->{db_schema} . $self->{_namesep} . $table; + $table = $self->{db_schema} . $self->{_namesep} . + $self->_quote_table_name($table); + } else { + $table = $self->_quote_table_name($table); } - my $sth = $dbh->prepare($self->schema->storage->sql_maker->select($table, undef, \'1 = 0')); + my $sth = $dbh->prepare($self->schema->storage->sql_maker->select(\$table, undef, \'1 = 0')); $sth->execute; my $retval = \@{$sth->{NAME_lc}}; $sth->finish;