From: Rafael Kitover Date: Mon, 30 Nov 2009 16:35:46 +0000 (+0000) Subject: fix MySQL rel introspection with on_connect_call => "set_strict_mode" (RT#52087) X-Git-Tag: 0.04999_12~2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=309e2aa14d57924130888412aeb903c3b298d389;p=dbsrgits%2FDBIx-Class-Schema-Loader.git fix MySQL rel introspection with on_connect_call => "set_strict_mode" (RT#52087) --- diff --git a/Changes b/Changes index 6f59321..e684901 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,9 @@ Revision history for Perl extension DBIx::Class::Schema::Loader + - fix MySQL rel introspection with on_connect_call => + 'set_strict_mode' (RT#52087) + - now using base 'DBIx::Class::Core' for Results (RT#52141) + 0.04999_11 2009-11-29 18:08:46 - added patch to generate POD from postgres by Andrey Kostenko (GUGU) - added test for norewrite feature diff --git a/Makefile.PL b/Makefile.PL index 62ffddc..5dabf38 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -22,7 +22,7 @@ requires 'Class::C3' => '0.18'; requires 'Class::C3::Componentised' => '1.0005'; requires 'Carp::Clan' => 0; requires 'Class::Inspector' => 0; -requires 'DBIx::Class' => '0.08109'; +requires 'DBIx::Class' => '0.08114'; requires 'Class::Unload' => 0; install_script 'script/dbicdump'; diff --git a/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm b/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm index e229604..ab102ab 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/mysql.pm @@ -27,20 +27,10 @@ See L. =cut -# had to override here because MySQL apparently -# doesn't support '%' syntax. Perhaps the other -# drivers support this syntax also, but I didn't -# want to risk breaking some esoteric DBD::foo version -# in a maint release... sub _tables_list { my $self = shift; - my $dbh = $self->schema->storage->dbh; - my @tables = $dbh->tables(undef, $self->db_schema, undef, undef); - s/\Q$self->{_quoter}\E//g for @tables; - s/^.*\Q$self->{_namesep}\E// for @tables; - - return @tables; + return $self->next::method(undef, undef); } sub _table_fk_info { @@ -50,8 +40,12 @@ sub _table_fk_info { my $table_def_ref = $dbh->selectrow_arrayref("SHOW CREATE TABLE `$table`") or croak ("Cannot get table definition for $table"); my $table_def = $table_def_ref->[1] || ''; - - my (@reldata) = ($table_def =~ /CONSTRAINT `.*` FOREIGN KEY \(`(.*)`\) REFERENCES `(.*)` \(`(.*)`\)/ig); + + my $qt = qr/["`]/; + + my (@reldata) = ($table_def =~ + /CONSTRAINT $qt.*$qt FOREIGN KEY \($qt(.*)$qt\) REFERENCES $qt(.*)$qt \($qt(.*)$qt\)/ig + ); my @rels; while (scalar @reldata > 0) { @@ -59,10 +53,10 @@ sub _table_fk_info { my $f_table = shift @reldata; my $f_cols = shift @reldata; - my @cols = map { s/\Q$self->{_quoter}\E//; lc $_ } + my @cols = map { s/(?: \Q$self->{_quoter}\E | $qt )//x; lc $_ } split(/\s*,\s*/, $cols); - my @f_cols = map { s/\Q$self->{_quoter}\E//; lc $_ } + my @f_cols = map { s/(?: \Q$self->{_quoter}\E | $qt )//x; lc $_ } split(/\s*,\s*/, $f_cols); push(@rels, { diff --git a/t/11mysql_common.t b/t/11mysql_common.t index 95404a6..151009f 100644 --- a/t/11mysql_common.t +++ b/t/11mysql_common.t @@ -17,6 +17,7 @@ my $tester = dbixcsl_common_tests->new( dsn => $dsn, user => $user, password => $password, + connect_info_opts=> { on_connect_call => 'set_strict_mode' }, skip_rels => $test_innodb ? 0 : $skip_rels_msg, no_inline_rels => 1, no_implicit_rels => 1,