From: Rafael Kitover Date: Mon, 10 May 2010 16:48:00 +0000 (-0400) Subject: minor MSSQL improvements X-Git-Tag: 0.07000~22 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8c41c3ce6f1db7b202d3465f84e0ba3e4d55e820;hp=4ea15dfe3e9a63998ff72e90c86e6a829e69127c;p=dbsrgits%2FDBIx-Class-Schema-Loader.git minor MSSQL improvements --- diff --git a/Changes b/Changes index 12bb26c..6e09f58 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,6 @@ Revision history for Perl extension DBIx::Class::Schema::Loader - - minor Pg type info improvements + - minor type info improvements for all DBs - fix erroneous default_value for MySQL NOT NULL columns (RT#57225) - remove is_deferrable => 1 from default for belongs_to rels - better type info for Oracle diff --git a/lib/DBIx/Class/Schema/Loader/DBI/MSSQL.pm b/lib/DBIx/Class/Schema/Loader/DBI/MSSQL.pm index d2847c3..1b9ce7d 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/MSSQL.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/MSSQL.pm @@ -91,9 +91,9 @@ sub _tables_list { my $sth = $dbh->prepare(<<'EOF'); SELECT t.table_name FROM INFORMATION_SCHEMA.TABLES t -WHERE lower(t.table_schema) = ? +WHERE t.table_schema = ? EOF - $sth->execute(lc $self->db_schema); + $sth->execute($self->db_schema); my @tables = map @$_, @{ $sth->fetchall_arrayref }; @@ -154,7 +154,7 @@ SELECT ccu.constraint_name, ccu.column_name FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc on (ccu.constraint_name = tc.constraint_name) JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu on (ccu.constraint_name = kcu.constraint_name and ccu.column_name = kcu.column_name) -wHERE lower(ccu.table_name) = @{[ $dbh->quote(lc $table) ]} AND constraint_type = 'UNIQUE' ORDER BY kcu.ordinal_position +wHERE ccu.table_name = @{[ $dbh->quote($table) ]} AND constraint_type = 'UNIQUE' ORDER BY kcu.ordinal_position }); $sth->execute; my $constraints; @@ -181,8 +181,8 @@ sub _columns_info_for { my $sth = $dbh->prepare(qq{ SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS -WHERE columnproperty(object_id(@{[ $dbh->quote(lc $table) ]}, 'U'), @{[ $dbh->quote(lc $col) ]}, 'IsIdentity') = 1 -AND lower(table_name) = @{[ $dbh->quote(lc $table) ]} AND lower(column_name) = @{[ $dbh->quote(lc $col) ]} +WHERE columnproperty(object_id(@{[ $dbh->quote($table) ]}, 'U'), @{[ $dbh->quote($col) ]}, 'IsIdentity') = 1 +AND table_name = @{[ $dbh->quote($table) ]} AND column_name = @{[ $dbh->quote($col) ]} }); if (eval { $sth->execute; $sth->fetchrow_array }) { $info->{is_auto_increment} = 1; @@ -202,10 +202,6 @@ AND lower(table_name) = @{[ $dbh->quote(lc $table) ]} AND lower(column_name) = @ delete $info->{size}; } } - elsif ($info->{data_type} eq 'real') { - $info->{data_type} = 'float'; - $info->{size} = 24; - } elsif ($info->{data_type} eq 'float') { $info->{data_type} = 'double precision'; } @@ -266,7 +262,7 @@ AND lower(table_name) = @{[ $dbh->quote(lc $table) ]} AND lower(column_name) = @ $sth = $dbh->prepare(qq{ SELECT column_default FROM INFORMATION_SCHEMA.COLUMNS -wHERE lower(table_name) = @{[ $dbh->quote(lc $table) ]} AND lower(column_name) = @{[ $dbh->quote(lc $col) ]} +wHERE table_name = @{[ $dbh->quote($table) ]} AND column_name = @{[ $dbh->quote($col) ]} }); my ($default) = eval { $sth->execute; $sth->fetchrow_array }; diff --git a/t/16mssql_common.t b/t/16mssql_common.t index 79a9b06..93c6e00 100644 --- a/t/16mssql_common.t +++ b/t/16mssql_common.t @@ -49,9 +49,9 @@ my $tester = dbixcsl_common_tests->new( money => { data_type => 'money' }, smallmoney => { data_type => 'smallmoney' }, bit => { data_type => 'bit' }, - real => { data_type => 'float', size => 24 }, - 'float(14)' => { data_type => 'float', size => 24 }, - 'float(24)' => { data_type => 'float', size => 24 }, + real => { data_type => 'real' }, + 'float(14)' => { data_type => 'real' }, + 'float(24)' => { data_type => 'real' }, 'float(25)' => { data_type => 'double precision' }, 'float(53)' => { data_type => 'double precision' }, float => { data_type => 'double precision' }, @@ -108,8 +108,9 @@ my $tester = dbixcsl_common_tests->new( 'nvarchar(2)' => { data_type => 'nvarchar', size => 2 }, # binary types - 'binary(2)' => { data_type => 'binary', size => 2 }, - 'varbinary(2)' => { data_type => 'varbinary', size => 2 }, + 'binary' => { data_type => 'binary', size => 1 }, + 'binary(2)' => { data_type => 'binary', size => 2 }, + 'varbinary(2)' => { data_type => 'varbinary', size => 2 }, # blob types 'varchar(max)' => { data_type => 'text' },