use namespace::clean;
use DBIx::Class::Schema::Loader::Table ();
-our $VERSION = '0.07036_01';
+our $VERSION = '0.07039';
__PACKAGE__->mk_group_accessors('simple', qw/
_disable_pk_detection
next if $row->{TYPE} eq 'table'
|| defined $row->{FILTER_CONDITION}
|| !$row->{INDEX_NAME}
- || !defined $row->{ORDINAL_POSITION}
- || !$row->{COLUMN_NAME};
+ || !defined $row->{ORDINAL_POSITION};
- $indices{$row->{INDEX_NAME}}[$row->{ORDINAL_POSITION}] = $self->_lc($row->{COLUMN_NAME});
+ $indices{$row->{INDEX_NAME}}[$row->{ORDINAL_POSITION}] = $self->_lc($row->{COLUMN_NAME} || '');
}
$sth->finish;
my @retval;
foreach my $index_name (keys %indices) {
- my $index = $indices{$index_name};
- push(@retval, [ $index_name => [ @$index[1..$#$index] ] ]);
+ my (undef, @cols) = @{$indices{$index_name}};
+ # skip indexes with missing column names (e.g. expression indexes)
+ next unless @cols == grep $_, @cols;
+ push(@retval, [ $index_name => \@cols ]);
}
return \@retval;
EOF
# Failback: try the REMARKS column on table_info
- if (!$comment && $dbh->can('table_info')) {
- my $sth = $self->_dbh_table_info( $dbh, undef, $table->schema, $table->name );
- my $info = $sth->fetchrow_hashref();
- $comment = $info->{REMARKS};
+ if (!$comment) {
+ my $info = $self->_dbh_table_info( $dbh, $table );
+ $comment = $info->{REMARKS} if $info;
}
return $comment;
# override to mask warnings if needed
sub _dbh_table_info {
- my ($self, $dbh) = (shift, shift);
+ my ($self, $dbh, $table) = (shift, shift, shift);
+
+ return undef if !$dbh->can('table_info');
+ my $sth = $dbh->table_info(undef, $table->schema, $table->name);
+ while (my $info = $sth->fetchrow_hashref) {
+ next if !$self->_table_info_matches($table, $info);
+ return $info;
+ }
+ return undef;
+}
+
+sub _table_info_matches {
+ my ($self, $table, $info) = @_;
- return $dbh->table_info(@_);
+ no warnings 'uninitialized';
+ return $info->{TABLE_SCHEM} eq $table->schema
+ && $info->{TABLE_NAME} eq $table->name;
}
# override to mask warnings if needed (see mysql)
return $self->schema->storage->dbh;
}
+sub _table_is_view {
+ my ($self, $table) = @_;
+
+ my $info = $self->_dbh_table_info($self->dbh, $table)
+ or return 0;
+ return $info->{TABLE_TYPE} eq 'VIEW';
+}
+
=head1 SEE ALSO
L<DBIx::Class::Schema::Loader>