1 package DBIx::Class::Schema::Loader::mysql;
6 use base 'DBIx::Class::Schema::Loader::Generic';
10 DBIx::Class::Schema::Loader::mysql - DBIx::Schema::Class::Loader mysql Implementation.
14 use DBIx::Class::Schema::Loader;
16 # $loader is a DBIx::Class::Schema::Loader::mysql
17 my $loader = DBIx::Class::Schema::Loader->new(
18 dsn => "dbi:mysql:dbname",
25 See L<DBIx::Class::Schema::Loader>.
30 return qw/DBIx::Class::PK::Auto::MySQL/;
33 sub _load_relationships {
35 my @tables = $self->tables;
36 my $dbh = $self->schema->storage->dbh;
39 $dsn =~ m/\Adbi:\w+(?:\(.*?\))?:(.+)\z/i
40 && index( $1, '=' ) >= 0
43 my $dbname = $conn{database} || $conn{dbname} || $conn{db};
44 die("Can't figure out the table name automatically.") if !$dbname;
46 my $quoter = $dbh->get_info(29) || q{`};
48 foreach my $table (@tables) {
49 my $query = "SHOW CREATE TABLE ${dbname}.${table}";
50 my $sth = $dbh->prepare($query)
51 or die("Cannot get table definition: $table");
53 my $table_def = $sth->fetchrow_arrayref->[1] || '';
55 my (@reldata) = ($table_def =~ /CONSTRAINT `.*` FOREIGN KEY \(`(.*)`\) REFERENCES `(.*)` \(`(.*)`\)/ig);
57 while (scalar @reldata > 0) {
58 my $cols = shift @reldata;
59 my $f_table = shift @reldata;
60 my $f_cols = shift @reldata;
62 my @cols = map { s/$quoter//; $_ } split(/\s*,\s*/,$cols);
63 my @f_cols = map { s/$quoter//; $_ } split(/\s*,\s*/,$f_cols);
64 die "Mismatched column count in rel for $table => $f_table"
68 for(my $i = 0; $i < @cols; $i++) {
69 $cond->{$f_cols[$i]} = $cols[$i];
72 eval { $self->_make_cond_rel( $table, $f_table, $cond) };
73 warn qq/\# belongs_to_many failed "$@"\n\n/ if $@ && $self->debug;
82 my $dbh = $self->schema->storage->dbh;
84 my $quoter = $dbh->get_info(29) || q{`};
85 foreach my $table ( $dbh->tables ) {
86 $table =~ s/$quoter//g;
88 if $table =~ /\A(\w+)\z/;
94 my ( $self, $table ) = @_;
95 my $dbh = $self->schema->storage->dbh;
97 # MySQL 4.x doesn't support quoted tables
98 my $query = "DESCRIBE $table";
99 my $sth = $dbh->prepare($query) or die("Cannot get table status: $table");
102 while ( my $hash = $sth->fetchrow_hashref ) {
103 my ($col) = $hash->{Field} =~ /(\w+)/;
105 push @pri, $col if $hash->{Key} eq "PRI";
108 return ( \@cols, \@pri );
113 L<DBIx::Class::Schema::Loader>