1 package DBIx::Class::Schema::Loader::mysql;
4 use base 'DBIx::Class::Schema::Loader::Generic';
9 DBIx::Class::Schema::Loader::mysql - DBIx::Schema::Class::Loader mysql Implementation.
13 use DBIx::Class::Schema::Loader;
15 # $loader is a DBIx::Class::Schema::Loader::mysql
16 my $loader = DBIx::Class::Schema::Loader->new(
17 dsn => "dbi:mysql:dbname",
25 See L<DBIx::Class::Schema::Loader>.
30 return qw/DBIx::Class::PK::Auto::MySQL/;
33 # Very experimental and untested!
36 my @tables = $class->tables;
37 my $dbh = $class->storage->dbh;
38 my $dsn = $class->loader_data->{_datasource}[0];
40 $dsn =~ m/\Adbi:\w+(?:\(.*?\))?:(.+)\z/i
41 && index( $1, '=' ) >= 0
44 my $dbname = $conn{database} || $conn{dbname} || $conn{db};
45 die("Can't figure out the table name automatically.") if !$dbname;
47 foreach my $table (@tables) {
48 my $query = "SHOW CREATE TABLE ${dbname}.${table}";
49 my $sth = $dbh->prepare($query)
50 or die("Cannot get table definition: $table");
52 my $table_def = $sth->fetchrow_arrayref->[1] || '';
54 my (@cols) = ($table_def =~ /CONSTRAINT `.*` FOREIGN KEY \(`(.*)`\) REFERENCES `(.*)` \(`(.*)`\)/g);
56 while (scalar @cols > 0) {
57 my $column = shift @cols;
58 my $remote_table = shift @cols;
59 my $remote_column = shift @cols;
61 eval { $class->_belongs_to_many( $table, $column, $remote_table, $remote_column) };
62 warn qq/\# belongs_to_many failed "$@"\n\n/ if $@ && $class->debug_loader;
71 my $dbh = $class->storage->dbh;
73 foreach my $table ( $dbh->tables ) {
74 my $quoter = $dbh->get_info(29);
75 $table =~ s/$quoter//g if ($quoter);
77 if $table =~ /\A(\w+)\z/;
83 my ( $class, $table ) = @_;
84 my $dbh = $class->storage->dbh;
86 # MySQL 4.x doesn't support quoted tables
87 my $query = "DESCRIBE $table";
88 my $sth = $dbh->prepare($query) or die("Cannot get table status: $table");
91 while ( my $hash = $sth->fetchrow_hashref ) {
92 my ($col) = $hash->{Field} =~ /(\w+)/;
94 push @pri, $col if $hash->{Key} eq "PRI";
97 return ( \@cols, \@pri );
102 L<DBIx::Class::Schema::Loader>