#=============================================================================
BEGIN {
- maybe_plan(53,
+ maybe_plan(undef,
'SQL::Translator::Producer::PostgreSQL',
'Test::Differences',
)
}
else {
is($fk_constraint_fk_ref->[0], 'ALTER TABLE mytable ADD FOREIGN KEY (myfield)
- REFERENCES mytable2 (myfield_2) DEFERRABLE', 'Create named Foreign Key Constraint works');
+ REFERENCES mytable2 (myfield_2) DEFERRABLE', 'Create un-named Foreign Key Constraint works');
my $alter_fk_constraint = SQL::Translator::Producer::PostgreSQL::alter_drop_constraint($fk_constraint);
- is($alter_fk_constraint, 'ALTER TABLE mytable DROP CONSTRAINT mytable_myfield_fkey', 'Alter drop named Foreign Key constraint works');
+ is($alter_fk_constraint, 'ALTER TABLE mytable DROP CONSTRAINT mytable_myfield_fkey', 'Alter drop un-named Foreign Key constraint works');
}
}
+# check named, and unnamed primary keys
+for my $name ( 'foo', undef ) {
+ my $pk_constraint = SQL::Translator::Schema::Constraint->new(
+ table => $table,
+ name => $name,
+ fields => [qw(myfield)],
+ type => 'PRIMARY_KEY',
+ );
+ my $pk_constraint_2 = SQL::Translator::Schema::Constraint->new(
+ table => $table,
+ name => $name,
+ fields => [qw(myfield)],
+ type => 'PRIMARY_KEY',
+ );
+
+ my ($pk_constraint_def_ref, $pk_constraint_pk_ref ) = SQL::Translator::Producer::PostgreSQL::create_constraint($pk_constraint);
+
+ if ( $name ) {
+ is($pk_constraint_def_ref->[0], "CONSTRAINT $name PRIMARY KEY (myfield)", 'Create Primary Key Constraint works');
+
+ # ToDo: may we should check if the constraint name was valid, or if next
+ # unused_name created has choosen a different one
+ my $alter_pk_constraint = SQL::Translator::Producer::PostgreSQL::alter_drop_constraint($pk_constraint);
+ is($alter_pk_constraint, "ALTER TABLE mytable DROP CONSTRAINT $name", 'Alter drop Primary Key constraint works');
+ }
+ else {
+ is($pk_constraint_def_ref->[0], 'PRIMARY KEY (myfield)', 'Create un-named Primary Key Constraint works');
+
+ my $alter_pk_constraint = SQL::Translator::Producer::PostgreSQL::alter_drop_constraint($pk_constraint);
+ is($alter_pk_constraint, 'ALTER TABLE mytable DROP CONSTRAINT mytable_pkey', 'Alter drop un-named Foreign Key constraint works');
+ }
+}
my $alter_field = SQL::Translator::Producer::PostgreSQL::alter_field($field1,
$field2);
my $field5 = SQL::Translator::Schema::Field->new( name => 'enum_field',
table => $table,
data_type => 'enum',
- extra => { list => [ 'Foo', 'Bar' ] },
+ extra => { list => [ 'Foo', 'Bar', 'Ba\'z' ] },
is_auto_increment => 0,
is_nullable => 0,
is_foreign_key => 0,
is_unique => 0 );
-my $field5_sql = SQL::Translator::Producer::PostgreSQL::create_field($field5,{ postgres_version => 8.3 });
+my $field5_types = {};
+my $field5_sql = SQL::Translator::Producer::PostgreSQL::create_field(
+ $field5,
+ {
+ postgres_version => 8.3,
+ type_defs => $field5_types,
+ }
+);
is($field5_sql, 'enum_field mytable_enum_field_type NOT NULL', 'Create real enum field works');
-
-
-
+is_deeply(
+ $field5_types,
+ { mytable_enum_field_type =>
+ "DROP TYPE IF EXISTS mytable_enum_field_type CASCADE;\n" .
+ "CREATE TYPE mytable_enum_field_type AS ENUM ('Foo', 'Bar', 'Ba''z')"
+ },
+ 'Create real enum type works'
+);
my $field6 = SQL::Translator::Schema::Field->new(
name => 'character',
my $field13 = SQL::Translator::Schema::Field->new( name => 'enum_field_with_type_name',
table => $table,
data_type => 'enum',
- extra => { list => [ 'Foo', 'Bar' ],
+ extra => { list => [ 'Foo', 'Bar', 'Ba\'z' ],
custom_type_name => 'real_enum_type' },
is_auto_increment => 0,
is_nullable => 0,
is_foreign_key => 0,
is_unique => 0 );
-my $field13_sql = SQL::Translator::Producer::PostgreSQL::create_field($field13,{ postgres_version => 8.3 });
+my $field13_types = {};
+my $field13_sql = SQL::Translator::Producer::PostgreSQL::create_field(
+ $field13,
+ {
+ postgres_version => 8.3,
+ type_defs => $field13_types,
+ }
+);
is($field13_sql, 'enum_field_with_type_name real_enum_type NOT NULL', 'Create real enum field works');
+is_deeply(
+ $field13_types,
+ { real_enum_type =>
+ "DROP TYPE IF EXISTS real_enum_type CASCADE;\n" .
+ "CREATE TYPE real_enum_type AS ENUM ('Foo', 'Bar', 'Ba''z')"
+ },
+ 'Create real enum type works'
+);
{
{
my $table = SQL::Translator::Schema::Table->new( name => 'foobar', fields => [qw( foo bar )] );
- my $quote = { quote_table_names => '"', quote_field_names => '"' };
+ my $quote = { quote_table_names => '"' };
{
my $index = $table->add_index(name => 'myindex', fields => ['foo']);
";
is($drop_view_9_1_produced, $drop_view_9_1_expected, "My DROP VIEW statement for 9.1 is correct");
+
+done_testing;