- $proto->new (
- $name,
- scalar(eval "DBIx::DBSchema::DBD::$driver->primary_key(\$dbh, \$name)"),
- DBIx::DBSchema::ColGroup::Unique->new(
- $driver
- ? [values %{eval "DBIx::DBSchema::DBD::$driver->unique(\$dbh, \$name)"}]
- : []
- ),
- DBIx::DBSchema::ColGroup::Index->new(
- $driver
- ? [ values %{eval "DBIx::DBSchema::DBD::$driver->index(\$dbh, \$name)"} ]
- : []
- ),
- map {
- my $type_info = scalar($dbh->type_info($sth->{TYPE}->[$sthpos]))
- or die "DBI::type_info ". $dbh->{Driver}->{Name}. " driver ".
- "returned no results for type ". $sth->{TYPE}->[$sthpos];
- new DBIx::DBSchema::Column
- $_,
- $type_info->{'TYPE_NAME'},
- #"SQL_". uc($type_info->{'TYPE_NAME'}),
- $sth->{NULLABLE}->[$sthpos],
- &{ $create_params{ $type_info->{CREATE_PARAMS} } }( $sth, $sthpos++ ), $driver && #default
- ${ [
- eval "DBIx::DBSchema::DBD::$driver->column(\$dbh, \$name, \$_)"
- ] }[4]
- # DB-local
- } @{$sth->{NAME}}
- );
+
+ my $indices_hr =
+ ( $driver
+ ? eval "DBIx::DBSchema::DBD::$driver->indices(\$dbh, \$name)"
+ : {}
+ );
+
+ $proto->new({
+ 'name' => $name,
+ 'primary_key' => scalar(eval "DBIx::DBSchema::DBD::$driver->primary_key(\$dbh, \$name)"),
+
+ 'columns' => [
+
+ map {
+
+ my $col_name = $_;
+
+ my $type_info = scalar($dbh->type_info($sth->{TYPE}->[$sthpos]))
+ or die "DBI::type_info ". $dbh->{Driver}->{Name}. " driver ".
+ "returned no results for type ". $sth->{TYPE}->[$sthpos];
+
+ my $length = &{ $create_params{ $type_info->{CREATE_PARAMS} } }
+ ( $sth, $sthpos++ );
+
+ my $default = '';
+ if ( $driver ) {
+ $default = ${ [
+ eval "DBIx::DBSchema::DBD::$driver->column(\$dbh, \$name, \$_)"
+ ] }[4];
+ }
+
+ DBIx::DBSchema::Column->new({
+ 'name' => $col_name,
+ #'type' => "SQL_". uc($type_info->{'TYPE_NAME'}),
+ 'type' => $type_info->{'TYPE_NAME'},
+ 'null' => $sth->{NULLABLE}->[$sthpos],
+ 'length' => $length,
+ 'default' => $default,
+ #'local' => # DB-local
+ });
+
+ }
+ @{$sth->{NAME}}
+
+ ],
+
+ #old-style indices
+ #DBIx::DBSchema::ColGroup::Unique->new(
+ # $driver
+ # ? [values %{eval "DBIx::DBSchema::DBD::$driver->unique(\$dbh, \$name)"}]
+ # : []
+ #),
+ #DBIx::DBSchema::ColGroup::Index->new(
+ # $driver
+ # ? [ values %{eval "DBIx::DBSchema::DBD::$driver->index(\$dbh, \$name)"} ]
+ # : []
+ #),
+
+ #new-style indices
+ 'indices' => { map { my $indexname = $_;
+ $indexname =>
+ DBIx::DBSchema::Index->new($indices_hr->{$indexname})
+ }
+ keys %$indices_hr
+ },
+
+ });