The way we generate create view statements is not standards compliant (per RhodiumToa...
[dbsrgits/SQL-Translator.git] / t / 47postgres-producer.t
index 9a5d2e9..c4bb28d 100644 (file)
@@ -14,7 +14,7 @@ use FindBin qw/$Bin/;
 #=============================================================================
 
 BEGIN {
-    maybe_plan(13,
+    maybe_plan(17,
         'SQL::Translator::Producer::PostgreSQL',
         'Test::Differences',
     )
@@ -104,6 +104,59 @@ my $field5_sql = SQL::Translator::Producer::PostgreSQL::create_field($field5,{ p
 
 is($field5_sql, 'enum_field mytable_enum_field_type NOT NULL', 'Create real enum field works');
 
+
+
+
+my $field6 = SQL::Translator::Schema::Field->new(
+                                                  name      => 'character',
+                                                  table => $table,
+                                                  data_type => 'character',
+                                                  size => '123',
+                                                  default_value => 'foobar',
+                                                    is_auto_increment => 0,
+                                                    is_nullable => 0,
+                                                    is_foreign_key => 0,
+                                                    is_unique => 0);
+
+my $field7 = SQL::Translator::Schema::Field->new(
+                                name      => 'character',
+                                table => $table,
+                                data_type => 'character',
+                                size => '123',
+                                default_value => undef,
+                                  is_auto_increment => 0,
+                                  is_nullable => 0,
+                                  is_foreign_key => 0,
+                                  is_unique => 0);
+
+$alter_field = SQL::Translator::Producer::PostgreSQL::alter_field($field6,
+                                                                $field7);
+
+is($alter_field, q(ALTER TABLE mytable ALTER COLUMN character DROP DEFAULT), 'DROP DEFAULT');
+
+$field7->default_value(q(foo'bar'));
+
+$alter_field = SQL::Translator::Producer::PostgreSQL::alter_field($field6,
+                                                                $field7);
+
+is($alter_field, q(ALTER TABLE mytable ALTER COLUMN character SET DEFAULT 'foo''bar'''), 'DEFAULT with escaping');
+
+$field7->default_value(\q(foobar));
+
+$alter_field = SQL::Translator::Producer::PostgreSQL::alter_field($field6,
+                                                                $field7);
+
+is($alter_field, q(ALTER TABLE mytable ALTER COLUMN character SET DEFAULT foobar), 'DEFAULT unescaped if scalarref');
+
+$field7->is_nullable(1);
+$field7->default_value(q(foobar));
+
+$alter_field = SQL::Translator::Producer::PostgreSQL::alter_field($field6,
+                                                                $field7);
+
+is($alter_field, q(ALTER TABLE mytable ALTER COLUMN character DROP NOT NULL), 'DROP NOT NULL');
+
+
 {
     # let's test default values! -- rjbs, 2008-09-30
     my %field = (
@@ -182,9 +235,9 @@ my $view1 = SQL::Translator::Schema::View->new(
 my $create_opts = { add_replace_view => 1, no_comments => 1 };
 my $view1_sql1 = SQL::Translator::Producer::PostgreSQL::create_view($view1, $create_opts);
 
-my $view_sql_replace = "CREATE VIEW view_foo ( id, name ) AS (
+my $view_sql_replace = "CREATE VIEW view_foo ( id, name ) AS
     SELECT id, name FROM thing
-  )";
+";
 is($view1_sql1, $view_sql_replace, 'correct "CREATE OR REPLACE VIEW" SQL');
 
 my $view2 = SQL::Translator::Schema::View->new(
@@ -198,7 +251,7 @@ my $view2 = SQL::Translator::Schema::View->new(
 my $create2_opts = { add_replace_view => 1, no_comments => 1 };
 my $view2_sql1 = SQL::Translator::Producer::PostgreSQL::create_view($view2, $create2_opts);
 
-my $view2_sql_replace = "CREATE TEMPORARY VIEW view_foo2 AS (
+my $view2_sql_replace = "CREATE TEMPORARY VIEW view_foo2 AS
     SELECT id, name FROM thing
-  ) WITH CASCADED CHECK OPTION";
+ WITH CASCADED CHECK OPTION";
 is($view2_sql1, $view2_sql_replace, 'correct "CREATE OR REPLACE VIEW" SQL 2');