use base qw/DBIx::Class::Schema::Loader::Base/;
use Class::C3;
use Carp::Clan qw/^DBIx::Class/;
-use UNIVERSAL::require;
-our $VERSION = '0.04003';
+our $VERSION = '0.04999_07';
=head1 NAME
# rebless to vendor-specific class if it exists and loads
my $dbh = $self->schema->storage->dbh;
my $driver = $dbh->{Driver}->{Name};
+
my $subclass = 'DBIx::Class::Schema::Loader::DBI::' . $driver;
- $subclass->require;
- if($@ && $@ !~ /^Can't locate /) {
- croak "Failed to require $subclass: $@";
- }
- elsif(!$@) {
- bless $self, "DBIx::Class::Schema::Loader::DBI::${driver}";
+ if ($self->ensure_class_found($subclass)) {
+ eval { $self->ensure_class_loaded($subclass) };
+ croak "Failed to load $subclass: $@" if $@;
+ bless $self, $subclass unless $self->isa($subclass);
+ $self->_rebless();
}
# Set up the default quoting character and name seperators
# Override this in vendor modules to do things at the end of ->new()
sub _setup { }
+# Override this in vendor module to load a subclass if necessary
+sub _rebless { }
+
# Returns an array of table names
sub _tables_list {
my $self = shift;
my ($self, $table) = @_;
my $dbh = $self->schema->storage->dbh;
- my $sth = $dbh->foreign_key_info( '', '', '', '',
- $self->db_schema, $table );
+ my $sth = $dbh->foreign_key_info( '', $self->db_schema, '',
+ '', $self->db_schema, $table );
return [] if !$sth;
my %rels;
my %result;
eval {
my $sth = $dbh->column_info( undef, $self->db_schema, $table, '%' );
- $sth->execute();
while ( my $info = $sth->fetchrow_hashref() ){
my %column_info;
$column_info{data_type} = $info->{TYPE_NAME};
my $col_name = $info->{COLUMN_NAME};
$col_name =~ s/^\"(.*)\"$/$1/;
- $result{$col_name} = \%column_info;
+ my $extra_info = $self->_extra_column_info($info) || {};
+
+ $result{$col_name} = { %column_info, %$extra_info };
}
$sth->finish;
};
$column_info{size} = $2;
}
- $result{$columns[$i]} = \%column_info;
+ my $extra_info = $self->_extra_column_info($table, $columns[$i], $sth, $i) || {};
+
+ $result{$columns[$i]} = { %column_info, %$extra_info };
}
$sth->finish;
return \%result;
}
+# Override this in vendor class to return any additional column
+# attributes
+sub _extra_column_info {}
+
=head1 SEE ALSO
L<DBIx::Class::Schema::Loader>