various identifier cleanups, to help prevent clashing with Schema stuff down the...
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / mysql.pm
index 8c941f8..fb7bb26 100644 (file)
@@ -17,7 +17,6 @@ DBIx::Class::Schema::Loader::mysql - DBIx::Schema::Class::Loader mysql Implement
     dsn       => "dbi:mysql:dbname",
     user      => "root",
     password  => "",
-    namespace => "Data",
   );
 
 =head1 DESCRIPTION
@@ -26,16 +25,15 @@ See L<DBIx::Class::Schema::Loader>.
 
 =cut
 
-sub _db_classes {
+sub _loader_db_classes {
     return qw/DBIx::Class::PK::Auto::MySQL/;
 }
 
-# Very experimental and untested!
-sub _relationships {
+sub _loader_relationships {
     my $class   = shift;
     my @tables = $class->tables;
     my $dbh    = $class->storage->dbh;
-    my $dsn    = $class->loader_data->{_datasource}[0];
+    my $dsn    = $class->_loader_data->{datasource}[0];
     my %conn   =
       $dsn =~ m/\Adbi:\w+(?:\(.*?\))?:(.+)\z/i
       && index( $1, '=' ) >= 0
@@ -44,6 +42,8 @@ sub _relationships {
     my $dbname = $conn{database} || $conn{dbname} || $conn{db};
     die("Can't figure out the table name automatically.") if !$dbname;
 
+    my $quoter = $dbh->get_info(29);
+
     foreach my $table (@tables) {
         my $query = "SHOW CREATE TABLE ${dbname}.${table}";
         my $sth   = $dbh->prepare($query)
@@ -51,22 +51,32 @@ sub _relationships {
         $sth->execute;
         my $table_def = $sth->fetchrow_arrayref->[1] || '';
         
-        my (@cols) = ($table_def =~ /CONSTRAINT `.*` FOREIGN KEY \(`(.*)`\) REFERENCES `(.*)` \(`(.*)`\)/g);
+        my (@reldata) = ($table_def =~ /CONSTRAINT `.*` FOREIGN KEY \(`(.*)`\) REFERENCES `(.*)` \(`(.*)`\)/g);
+
+        while (scalar @reldata > 0) {
+            my $cols = shift @reldata;
+            my $f_table = shift @reldata;
+            my $f_cols = shift @reldata;
 
-        while (scalar @cols > 0) {
-            my $column = shift @cols;
-            my $remote_table = shift @cols;
-            my $remote_column = shift @cols;
+            my @cols = map { s/$quoter//; $_ } split(/\s*,\s*/,$cols);
+            my @f_cols = map { s/$quoter//; $_ } split(/\s*,\s*/,$f_cols);
+            die "Mismatched column count in rel for $table => $f_table"
+              if @cols != @f_cols;
             
-            eval { $class->_belongs_to_many( $table, $column, $remote_table, $remote_column) };
-            warn qq/\# belongs_to_many failed "$@"\n\n/ if $@ && $class->debug_loader;
+            my $cond = {};
+            for(my $i = 0 ; $i < @cols; $i++) {
+                $cond->{$f_cols[$i]} = $cols[$i];
+            }
+
+            eval { $class->_loader_make_relations( $table, $f_table, $cond) };
+            warn qq/\# belongs_to_many failed "$@"\n\n/ if $@ && $class->_loader_debug;
         }
         
         $sth->finish;
     }
 }
 
-sub _tables {
+sub _loader_tables {
     my $class = shift;
     my $dbh    = $class->storage->dbh;
     my @tables;
@@ -79,7 +89,7 @@ sub _tables {
     return @tables;
 }
 
-sub _table_info {
+sub _loader_table_info {
     my ( $class, $table ) = @_;
     my $dbh    = $class->storage->dbh;