Cascade drop pg tables to overcome key constraints when dropping
[dbsrgits/SQL-Translator.git] / lib / SQL / Translator / Producer / PostgreSQL.pm
index 9ea1d69..10976e8 100644 (file)
@@ -1,7 +1,7 @@
 package SQL::Translator::Producer::PostgreSQL;
 
 # -------------------------------------------------------------------
-# $Id: PostgreSQL.pm,v 1.25 2006-08-04 21:38:20 schiffbruechige Exp $
+# $Id: PostgreSQL.pm,v 1.28 2006-11-20 23:56:14 schiffbruechige Exp $
 # -------------------------------------------------------------------
 # Copyright (C) 2002-4 SQLFairy Authors
 #
@@ -39,7 +39,7 @@ producer.
 use strict;
 use warnings;
 use vars qw[ $DEBUG $WARN $VERSION ];
-$VERSION = sprintf "%d.%02d", q$Revision: 1.25 $ =~ /(\d+)\.(\d+)/;
+$VERSION = sprintf "%d.%02d", q$Revision: 1.28 $ =~ /(\d+)\.(\d+)/;
 $DEBUG = 1 unless defined $DEBUG;
 
 use SQL::Translator::Schema::Constants;
@@ -207,7 +207,7 @@ sub produce {
     $output = join("\n\n", @table_defs);
     if ( @fks ) {
         $output .= "--\n-- Foreign Key Definitions\n--\n\n" unless $no_comments;
-        $output .= join( "\n\n", @fks );
+        $output .= join( "\n\n", @fks ) . "\n";
     }
 
     if ( $WARN ) {
@@ -377,7 +377,7 @@ sub create_table
 
     my $create_statement;
     $create_statement = join("\n", @comments);
-    $create_statement .= qq[DROP TABLE $qt$table_name_ur$qt;\n] 
+    $create_statement .= qq[DROP TABLE $qt$table_name_ur$qt CASCADE;\n] 
         if $add_drop_table;
     $create_statement .= qq[CREATE TABLE $qt$table_name_ur$qt (\n].
                             join( ",\n", map { "  $_" } @field_defs, @constraint_defs ).
@@ -430,13 +430,17 @@ sub create_table
         #
         # Default value -- disallow for timestamps
         #
-        my $default = $data_type =~ /(timestamp|date)/i
-            ? undef : $field->default_value;
+#        my $default = $data_type =~ /(timestamp|date)/i
+#            ? undef : $field->default_value;
+        my $default = $field->default_value;
         if ( defined $default ) {
+            my $qd = "'";
+            $qd = '' if ($default eq 'now()' || 
+                         $default eq 'CURRENT_TIMESTAMP');
             $field_def .= sprintf( ' DEFAULT %s',
                                    ( $field->is_auto_increment && $seq_name )
                                    ? qq[nextval('"$seq_name"'::text)] :
-                                   ( $default =~ m/null/i ) ? 'NULL' : "'$default'"
+                                   ( $default =~ m/null/i ) ? 'NULL' : "$qd$default$qd"
                                    );
         }