* Update the Free Software Foundation's address (RT#100531)
* Provide default index names for SQLite (GH#45)
* Fix SQLite diffing on perl 5.8.1
+ * Fix multi-column indexes in Parser::DBI::PostgreSQL
0.11020 2014-09-02
my $index_select = $dbh->prepare(
"SELECT oid, c.relname, i.indkey, i.indnatts, i.indisunique,
- ARRAY(SELECT a.attname
- FROM pg_attribute a
- WHERE a.attrelid=i.indrelid AND a.attnum = ANY(i.indkey)
- ) AS attname,
i.indisprimary, pg_get_indexdef(oid) AS create_string
FROM pg_class c,pg_index i
WHERE c.relnamespace IN (SELECT oid FROM pg_namespace WHERE nspname='public') AND c.relkind='i'
next if ($$indexhash{'indkey'} eq ''
or !defined($$indexhash{'indkey'}) );
+ my @columns = map $column_names[$_ - 1], split /\s+/, $$indexhash{'indkey'};
+
my $type;
if ($$indexhash{'indisprimary'}) {
$type = UNIQUE; #PRIMARY_KEY;
#tell sqlt that this is the primary key:
- my $col_name=$column_names[($$indexhash{'indkey'} - 1)];
- $table->get_field($col_name)->{is_primary_key}=1;
+ for my $column (@columns) {
+ $table->get_field($column)->{is_primary_key}=1;
+ }
} elsif ($$indexhash{'indisunique'}) {
$type = UNIQUE;
}
- my @column_ids = split /\s+/, $$indexhash{'indkey'};
- my @columns = split /\s+/, $$indexhash{'attname'};
-
$table->add_index(
name => $$indexhash{'relname'},
type => $type,
create table sqlt_test2 (
f_id integer NOT NULL,
f_int smallint,
- primary key (f_id),
- f_fk1 integer NOT NULL references sqlt_test1 (f_serial)
+ f_fk1 integer NOT NULL references sqlt_test1 (f_serial),
+ primary key (f_id, f_fk1)
);
CREATE TABLE sqlt_products_1 (
is( $t2_f3->is_nullable, 0, 'Field cannot be null' );
is( $t2_f3->size, 0, 'Size is "0"' );
is( $t2_f3->default_value, undef, 'Default value is undefined' );
-is( $t2_f3->is_primary_key, 0, 'Field is not PK' );
+is( $t2_f3->is_primary_key, 1, 'Field is PK' );
is( $t2_f3->is_foreign_key, 1, 'Field is a FK' );
my $fk_ref1 = $t2_f3->foreign_key_reference;
isa_ok( $fk_ref1, 'SQL::Translator::Schema::Constraint', 'FK' );