- Fixes for adding nullability on old Pg (<= 7.3)
authorivan <ivan>
Thu, 28 Dec 2006 08:05:54 +0000 (08:05 +0000)
committerivan <ivan>
Thu, 28 Dec 2006 08:05:54 +0000 (08:05 +0000)
- Throw a warning if pg_server_version is unavailable, assume >= 7.3

Changes
DBSchema/Column.pm

diff --git a/Changes b/Changes
index 6c56511..3f7e486 100644 (file)
--- a/Changes
+++ b/Changes
@@ -7,6 +7,8 @@ Revision history for Perl extension DBIx::DBSchema.
        - Update documentation wrt supported databases and new update_schema
          stuff
        - Fixes for dropping nullability on old Pg (<= 7.2)
+        - Fixes for adding nullability on old Pg (<= 7.3)
+        - Throw a warning if pg_server_version is unavailable, assume >= 7.3
 
 0.31 Thu Mar 30 05:28:20 PST 2006
        - more schema update stuff:
index f981ede..17c6bdb 100644 (file)
@@ -335,10 +335,16 @@ sub sql_add_column {
     push @after_add, sub {
       my($table, $column) = @_;
 
-      #needs more work for old Pg
+      #needs more work for old Pg?
+      
+      my $pg_server_version = $dbh->{'pg_server_version'};
+      unless ( $pg_server_version =~ /\d/ ) {
+        warn "WARNING: no pg_server_version!  Assuming >= 7.3\n";
+        $pg_server_version = 70300;
+      }
 
       my $nextval;
-      if ( $dbh->{'pg_server_version'} > 70300 ) {
+      if ( $pg_server_version >= 70300 ) {
         $nextval = "nextval('public.${table}_${column}_seq'::text)";
       } else {
         $nextval = "nextval('${table}_${column}_seq'::text)";
@@ -360,8 +366,14 @@ sub sql_add_column {
     $real_null = $self->null;
     $self->null('NULL');
 
-    #if ( $dbh->{'pg_server_version'} > 70300 ) { #this seemed to work on 7.3
-    if ( $dbh->{'pg_server_version'} > 70400 ) {  #after all...
+    my $pg_server_version = $dbh->{'pg_server_version'};
+    unless ( $pg_server_version =~ /\d/ ) {
+      warn "WARNING: no pg_server_version!  Assuming >= 7.3\n";
+      $pg_server_version = 70300;
+    }
+
+    if ( $pg_server_version >= 70300 ) { #this did work on 7.3
+    #if ( $pg_server_version > 70400 ) {
 
       push @after_add, sub {
         my($table, $column) = @_;
@@ -441,15 +453,28 @@ sub sql_alter_column {
   # change nullability from NOT NULL to NULL
   if ( ! $self->null && $new->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";
+    my $alter = "ALTER TABLE $table ALTER COLUMN $name DROP NOT NULL";
+
+    if ( $driver eq 'Pg' ) {
+
+      my $pg_server_version = $dbh->{'pg_server_version'};
+      unless ( $pg_server_version =~ /\d/ ) {
+        warn "WARNING: no pg_server_version!  Assuming >= 7.3\n";
+        $pg_server_version = 70300;
+      }
+
+      if ( $pg_server_version < 70300 ) {
+        $alter = "UPDATE pg_attribute SET attnotnull = FALSE
+                    WHERE attname = '$name'
+                      AND attrelid = ( SELECT oid FROM pg_class
+                                         WHERE relname = '$table'
+                                     )";
+      }
+
     }
+
+    push @r, $alter;
+
   }
 
   # change nullability from NULL to NOT NULL...
@@ -457,15 +482,28 @@ sub sql_alter_column {
   # the table first...
   if ( $self->null && ! $new->null ) {
 
-    if ( $driver eq 'Pg' && $dbh->{'pg_server_version'} < 70300 ) {
-      push @r, "UPDATE pg_attribute SET attnotnull = TRUE
-                 WHERE attname = '$name'
-                   AND attrelid = ( SELECT oid FROM pg_class
-                                      WHERE relname = '$table'
-                                  )";
-    } else {
-      push @r, "ALTER TABLE $table ALTER COLUMN $name SET NOT NULL";
+    my $alter = "ALTER TABLE $table ALTER COLUMN $name SET NOT NULL";
+
+    if ( $driver eq 'Pg' ) {
+
+      my $pg_server_version = $dbh->{'pg_server_version'};
+      unless ( $pg_server_version =~ /\d/ ) {
+        warn "WARNING: no pg_server_version!  Assuming >= 7.3\n";
+        $pg_server_version = 70300;
+      }
+
+      if ( $pg_server_version < 70300 ) {
+        push @r, "UPDATE pg_attribute SET attnotnull = TRUE
+                    WHERE attname = '$name'
+                      AND attrelid = ( SELECT oid FROM pg_class
+                                         WHERE relname = '$table'
+                                     )";
+      }
+
     }
+
+    push @r, $alter;
+  
   }
 
   # change other stuff...