Fixes for dropping nullability on old Pg (<= 7.2)
authorivan <ivan>
Thu, 2 Nov 2006 07:18:55 +0000 (07:18 +0000)
committerivan <ivan>
Thu, 2 Nov 2006 07:18:55 +0000 (07:18 +0000)
Changes
DBSchema/Column.pm

diff --git a/Changes b/Changes
index 9f67fef..6c56511 100644 (file)
--- a/Changes
+++ b/Changes
@@ -6,6 +6,7 @@ Revision history for Perl extension DBIx::DBSchema.
        - Error reporting for load constructor
        - Update documentation wrt supported databases and new update_schema
          stuff
+       - Fixes for dropping nullability on old Pg (<= 7.2)
 
 0.31 Thu Mar 30 05:28:20 PST 2006
        - more schema update stuff:
index ca6ecc8..14351ec 100644 (file)
@@ -9,7 +9,7 @@ use DBIx::DBSchema::_util qw(_load_driver _dbh);
 #@ISA = qw(Exporter);
 @ISA = qw();
 
-$VERSION = '0.07';
+$VERSION = '0.08';
 
 =head1 NAME
 
@@ -360,7 +360,8 @@ sub sql_add_column {
     $real_null = $self->null;
     $self->null('NULL');
 
-    if ( $dbh->{'pg_server_version'} > 70300 ) {
+    #if ( $dbh->{'pg_server_version'} > 70300 ) { #this seemed to work on 7.3
+    if ( $dbh->{'pg_server_version'} > 70400 ) {  #after all...
 
       push @after_add, sub {
         my($table, $column) = @_;
@@ -429,7 +430,7 @@ sub sql_alter_column {
 
   my $name = $self->name;
 
-#  my $driver = $dbh ? _load_driver($dbh) : '';
+  my $driver = $dbh ? _load_driver($dbh) : '';
 
   my @r = ();
 
@@ -439,7 +440,16 @@ sub sql_alter_column {
 
   # change nullability from NOT NULL to NULL
   if ( ! $self->null && $new->null ) {
-    push @r, "ALTER TABLE $table ALTER COLUMN $name DROP NOT NULL";
+
+    if ( $driver eq 'Pg' && $dbh->{'pg_server_version'} < 70300 ) {
+      push @r, "UPDATE pg_attribute SET attnotnull = FALSE
+                 WHERE attname = '$name'
+                   AND attrelid = ( SELECT oid FROM pg_class
+                                      WHERE relname = '$table'
+                                  )";
+    } else {
+      push @r, "ALTER TABLE $table ALTER COLUMN $name DROP NOT NULL";
+    }
   }
 
   # change nullability from NULL to NOT NULL...