X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2FSQLAnywhere.pm;h=46472dbfabc0bae89ea498e52b5c6778dbaa8cc2;hb=9f333983b7e706ffb7ea29839dbb3dc5d3012846;hp=63cacda8997f131aa3267cd574369f0a998e8cc5;hpb=bc1cb85e84e6a30c75763edd478378a68009c722;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI/SQLAnywhere.pm b/lib/DBIx/Class/Schema/Loader/DBI/SQLAnywhere.pm index 63cacda..46472db 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/SQLAnywhere.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/SQLAnywhere.pm @@ -9,7 +9,7 @@ use base qw/ /; use Carp::Clan qw/^DBIx::Class/; -our $VERSION = '0.07000'; +our $VERSION = '0.07001'; =head1 NAME @@ -18,7 +18,7 @@ SQL Anywhere Implementation. =head1 DESCRIPTION -See L. +See L and L. =cut @@ -29,10 +29,6 @@ sub _setup { $self->{db_schema} ||= ($self->schema->storage->dbh->selectrow_array('select user'))[0]; - - if (not defined $self->preserve_case) { - $self->preserve_case(0); - } } sub _tables_list { @@ -59,14 +55,14 @@ sub _columns_info_for { my $dbh = $self->schema->storage->dbh; - while (my ($column, $info) = each %$result) { + while (my ($col, $info) = each %$result) { my $def = $info->{default_value}; if (ref $def eq 'SCALAR' && $$def eq 'autoincrement') { delete $info->{default_value}; $info->{is_auto_increment} = 1; } - my ($user_type) = $dbh->selectrow_array(<<'EOF', {}, $table, lc $column); + my ($user_type) = $dbh->selectrow_array(<<'EOF', {}, $table, $col); SELECT ut.type_name FROM systabcol tc JOIN systab t ON tc.table_id = t.table_id @@ -90,9 +86,9 @@ EOF SELECT tc.width, tc.scale FROM systabcol tc JOIN systab t ON t.table_id = tc.table_id -WHERE t.table_name = ? AND lower(tc.column_name) = ? +WHERE t.table_name = ? AND tc.column_name = ? EOF - $sth->execute($table, lc $column); + $sth->execute($table, $col); my ($width, $scale) = $sth->fetchrow_array; $sth->finish; @@ -103,11 +99,17 @@ EOF elsif ($info->{data_type} =~ /^(?:n(?:varchar|char) | varbit)\z/x) { $info->{size} = $width; } + elsif ($info->{data_type} eq 'float') { + $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'; + if ((eval { lc ${ $info->{default_value} } }||'') eq 'current timestamp') { + ${ $info->{default_value} } = 'current_timestamp'; + + my $orig_deflt = 'current timestamp'; + $info->{original}{default_value} = \$orig_deflt; } } @@ -124,7 +126,7 @@ sub _table_pk_info { my @keydata; while (my $row = $sth->fetchrow_hashref) { - push @keydata, lc $row->{column_name}; + push @keydata, $self->_lc($row->{column_name}); } return \@keydata; @@ -150,9 +152,9 @@ EOF $sth->execute($table); while (my ($fk, $local_col, $remote_tab, $remote_col) = $sth->fetchrow_array) { - push @{$local_cols->{$fk}}, lc $local_col; - push @{$remote_cols->{$fk}}, lc $remote_col; - $remote_table->{$fk} = lc $remote_tab; + push @{$local_cols->{$fk}}, $self->_lc($local_col); + push @{$remote_cols->{$fk}}, $self->_lc($remote_col); + $remote_table->{$fk} = $remote_tab; } foreach my $fk (keys %$remote_table) { @@ -182,7 +184,7 @@ EOF my $constraints; while (my ($constraint_name, $column) = $sth->fetchrow_array) { - push @{$constraints->{$constraint_name}}, lc $column; + push @{$constraints->{$constraint_name}}, $self->_lc($column); } my @uniqs = map { [ $_ => $constraints->{$_} ] } keys %$constraints;