fix data_type for identities in MSSQL RT#50523
Rafael Kitover [Sat, 31 Oct 2009 11:19:24 +0000 (11:19 +0000)]
lib/DBIx/Class/Schema/Loader/DBI/MSSQL.pm
t/lib/dbixcsl_mssql_extra_tests.pm

index 1d4dac5..09bb494 100644 (file)
@@ -38,6 +38,18 @@ sub _setup {
     $self->_set_quote_char_and_name_sep;
 }
 
+# remove 'IDENTITY' from column data_type
+sub _columns_info_for {
+    my $self   = shift;
+    my $result = $self->next::method(@_);
+
+    for my $col (keys %$result) {
+        $result->{$col}->{data_type} =~ s/\s* identity \s*//ix;
+    }
+
+    return $result;
+}
+
 sub _table_pk_info {
     my ($self, $table) = @_;
     my $dbh = $self->schema->storage->dbh;
index bf178d7..d4125ef 100644 (file)
@@ -19,10 +19,11 @@ sub extra { +{
         },
     ],
     drop   => [ "[${vendor}_loader_test1.dot]" ],
-    count  => 4,
+    count  => 6,
     run    => sub {
         my ($schema, $monikers, $classes) = @_;
 
+# Test that the table above (with '.' in name) gets loaded correctly.
         my $vendor_titlecased = "\u\L$vendor";
 
         ok((my $rs = eval {
@@ -36,6 +37,17 @@ sub extra { +{
 
         is eval { $$from }, "[${vendor}_loader_test1.dot]",
             '->table name is correct';
+
+# Test that identity columns do not have 'identity' in the data_type, and do
+# have is_auto_increment.
+        my $identity_col_info = $schema->resultset('LoaderTest10')
+            ->result_source->column_info('id10');
+
+        is $identity_col_info->{data_type}, 'int',
+            q{'INT IDENTITY' column has data_type => 'int'};
+
+        is $identity_col_info->{is_auto_increment}, 1,
+            q{'INT IDENTITY' column has is_auto_increment => 1};
     },
 }}