update SQLAnywhere ODBC driver for default \"null"
Rafael Kitover [Wed, 19 Oct 2011 19:53:07 +0000 (15:53 -0400)]
Previously a fix was committed to support DEFAULT NULL in Pg, this
broke the SQLAnywhere ODBC driver tests, because ::DBI::SQLAnywhere had
a fixup for default_value => \"NULL", and it is now lowercased.

Only the ODBC driver sets nullable columns DEFAULT NULL, so this fixup
has been moved to ::DBI::ODBC::SQL_Anywhere, with the correct case.

All SQL Anywhere tests pass again.

lib/DBIx/Class/Schema/Loader/DBI/ODBC/SQL_Anywhere.pm
lib/DBIx/Class/Schema/Loader/DBI/SQLAnywhere.pm

index 32bfb3a..f4f0ec0 100644 (file)
@@ -21,6 +21,23 @@ Proxy for L<DBIx::Class::Schema::Loader::DBI::SQLAnywhere> when using L<DBD::ODB
 
 See L<DBIx::Class::Schema::Loader::Base> for usage information.
 
+=cut
+
+sub _columns_info_for {
+    my $self = shift;
+
+    my $result = $self->next::method(@_);
+
+    while (my ($col, $info) = each %$result) {
+        # The ODBC driver sets the default value to NULL even when it was not specified.
+        if (ref $info->{default_value} && ${ $info->{default_value} } eq 'null') {
+            delete $info->{default_value};
+        }
+    }
+
+    return $result;
+}
+
 =head1 SEE ALSO
 
 L<DBIx::Class::Schema::Loader::DBI::SQLAnywhere>,
@@ -39,3 +56,4 @@ the same terms as Perl itself.
 =cut
 
 1;
+# vim:et sw=4 sts=4 tw=0:
index e92cfe6..c6b119c 100644 (file)
@@ -142,8 +142,6 @@ EOF
             $info->{data_type} = 'real';
         }
 
-        delete $info->{default_value} if ref($info->{default_value}) eq 'SCALAR' && ${ $info->{default_value} } eq 'NULL';
-
         if ((eval { lc ${ $info->{default_value} } }||'') eq 'current timestamp') {
             ${ $info->{default_value} } = 'current_timestamp';