Merge 'current' into 'mssql_tweaks'
Rafael Kitover [Fri, 28 Aug 2009 23:03:49 +0000 (23:03 +0000)]
r7308@hlagh (orig r7307):  caelum | 2009-08-11 20:58:06 -0400
fix CURRENT_TIMESTAMP default for MySQL
r7309@hlagh (orig r7308):  caelum | 2009-08-12 07:26:13 -0400
fix mysql tests for CURRENT_TIMESTAMP
r7310@hlagh (orig r7309):  caelum | 2009-08-12 07:51:05 -0400
add TODO comment for mysql

Makefile.PL
lib/DBIx/Class/Schema/Loader/DBI/mysql.pm
t/11mysql_common.t

index 71460bc..8ae715a 100644 (file)
@@ -9,6 +9,7 @@ test_requires 'DBI'           => '1.56';
 test_requires 'DBD::SQLite'   => '1.12';
 test_requires 'File::Path'    => 0;
 test_requires 'IPC::Open3'    => 0;
+test_requires 'Test::Exception';
 
 requires 'File::Spec'                  => 0;
 requires 'Scalar::Util'                => 0;
index f2046b1..7a2920a 100644 (file)
@@ -122,6 +122,7 @@ sub _table_uniq_info {
 }
 
 sub _extra_column_info {
+    no warnings 'uninitialized';
     my ($self, $info) = @_;
     my %extra_info;
 
@@ -134,6 +135,11 @@ sub _extra_column_info {
     if ($info->{mysql_values}) {
         $extra_info{extra}{list} = $info->{mysql_values};
     }
+# XXX we need to distinguish between DEFAULT CURRENT_TIMESTAMP and DEFAULT 'foo'
+# somehow, but DBI column_info doesn't preserve quotes.
+    if ($info->{COLUMN_DEF} =~ /^CURRENT_TIMESTAMP\z/i) {
+        $extra_info{default_value} = \'CURRENT_TIMESTAMP';
+    }
 
     return \%extra_info;
 }
index bd86d93..f917c90 100644 (file)
@@ -28,9 +28,16 @@ my $tester = dbixcsl_common_tests->new(
                     value ENUM('foo', 'bar', 'baz')
                 )
             },
+            qq{
+                CREATE TABLE mysql_loader_test2 (
+                  id INTEGER UNSIGNED NOT NULL PRIMARY KEY,
+                  somedate TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
+                  somestr VARCHAR(100) NOT NULL DEFAULT 'foo'
+                )
+            },
         ],
-        drop   => [ qw/ mysql_loader_test1 / ],
-        count  => 3,
+        drop   => [ qw/ mysql_loader_test1 mysql_loader_test2 / ],
+        count  => 5,
         run    => sub {
             my ($schema, $monikers, $classes) = @_;
         
@@ -44,6 +51,14 @@ my $tester = dbixcsl_common_tests->new(
             like($column_info->{data_type}, qr/^enum$/i, 'MySQL ENUM type');
             is_deeply($column_info->{extra}->{list}, [qw/foo bar baz/],
                       'MySQL ENUM values');
+
+            $rs = $schema->resultset($monikers->{mysql_loader_test2});
+            my $column_info = $rs->result_source->column_info('somedate');
+            my $default     = $column_info->{default_value};
+            ok (ref($default) eq 'SCALAR'),
+                'CURRENT_TIMESTAMP default_value is a scalar ref';
+            like $$default, qr/^CURRENT_TIMESTAMP\z/i,
+                'CURRENT_TIMESTAMP default eq "CURRENT_TIMESTAMP"';
         },
     }
 );