From 31e75dd45e81bbba3902564207b7bfc5dfc91fd3 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 28 Dec 2006 08:05:54 +0000 Subject: [PATCH] - Fixes for adding nullability on old Pg (<= 7.3) - Throw a warning if pg_server_version is unavailable, assume >= 7.3 --- Changes | 2 ++ DBSchema/Column.pm | 78 ++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 60 insertions(+), 20 deletions(-) diff --git a/Changes b/Changes index 6c56511..3f7e486 100644 --- 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: diff --git a/DBSchema/Column.pm b/DBSchema/Column.pm index f981ede..17c6bdb 100644 --- a/DBSchema/Column.pm +++ b/DBSchema/Column.pm @@ -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... -- 2.11.0