From: Rafael Kitover Date: Wed, 22 Jul 2009 05:09:21 +0000 (+0000) Subject: minor cleanups X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=61cfaef73cd5f9f8fee97a0f2105d65f8c32deeb;p=dbsrgits%2FDBIx-Class-Historic.git minor cleanups --- diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index 724b33f..73b0920 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -2783,7 +2783,11 @@ sub _resolved_attrs { } ( ref($attrs->{columns}) eq 'ARRAY' ) ? @{ delete $attrs->{columns}} : (delete $attrs->{columns} || - $source->storage->order_columns_for_select($source) ); + $source->storage->order_columns_for_select( + $source, + [ $source->columns ] + ) + ); } # add the additional columns on foreach ( 'include_columns', '+columns' ) { diff --git a/lib/DBIx/Class/Storage/DBI.pm b/lib/DBIx/Class/Storage/DBI.pm index 6eefbfa..1a42609 100644 --- a/lib/DBIx/Class/Storage/DBI.pm +++ b/lib/DBIx/Class/Storage/DBI.pm @@ -2289,9 +2289,9 @@ as moving C columns to the end of the list. =cut sub order_columns_for_select { - my ($self, $source) = @_; + my ($self, $source, $columns) = @_; - return $source->columns; + return @$columns; } sub DESTROY { diff --git a/lib/DBIx/Class/Storage/DBI/Sybase.pm b/lib/DBIx/Class/Storage/DBI/Sybase.pm index c12c124..06f64b3 100644 --- a/lib/DBIx/Class/Storage/DBI/Sybase.pm +++ b/lib/DBIx/Class/Storage/DBI/Sybase.pm @@ -35,9 +35,9 @@ You need a version of L compiled with the Sybase OpenClient libraries, B FreeTDS, for placeholder support. Otherwise your storage will be automatically reblessed into C<::NoBindVars>. -A recommended L settings: +A recommended L setting: - on_connect_call => [['datetime_setup'], [blob_setup => log_on_update => 0]] + on_connect_call => [['datetime_setup'], ['blob_setup', log_on_update => 0]] =head1 METHODS @@ -65,12 +65,6 @@ sub _rebless { } else { # real Sybase my $no_bind_vars = 'DBIx::Class::Storage::DBI::Sybase::NoBindVars'; - if (not $self->dbh->{syb_dynamic_supported}) { - $self->ensure_class_loaded($no_bind_vars); - bless $self, $no_bind_vars; - $self->_rebless; - } - if ($self->_using_freetds) { carp <<'EOF'; @@ -88,27 +82,22 @@ EOF bless $self, $no_bind_vars; $self->_rebless; } + + if (not $self->dbh->{syb_dynamic_supported}) { + $self->ensure_class_loaded($no_bind_vars); + bless $self, $no_bind_vars; + $self->_rebless; + } + $self->_set_maxConnect; } } } -{ - my $using_freetds = undef; - - sub _using_freetds { - my $self = shift; - my $dbh = $self->_dbh; - - return $using_freetds if defined $using_freetds; - -# local $dbh->{syb_rowcount} = 1; # this is broken in freetds -# $using_freetds = @{ $dbh->selectall_arrayref('sp_help') } != 1; - - $using_freetds = $dbh->{syb_oc_version} =~ /freetds/i; +sub _using_freetds { + my $self = shift; - return $using_freetds; - } + return $self->_dbh->{syb_oc_version} =~ /freetds/i; } sub _set_maxConnect { @@ -130,7 +119,7 @@ sub _set_maxConnect { Used as: - on_connect_call => [ [ blob_setup => log_on_update => 0 ] ] + on_connect_call => [ [ 'blob_setup', log_on_update => 0 ] ] Does C<< $dbh->{syb_binary_images} = 1; >> to return C data as raw binary instead of as a hex string. @@ -165,11 +154,11 @@ sub _is_lob_type { ## need to use the API, but for now it isn't. # #sub order_columns_for_select { -# my ($self, $source) = @_; +# my ($self, $source, $columns) = @_; # # my (@non_blobs, @blobs); # -# for my $col ($source->columns) { +# for my $col (@$columns) { # if ($self->_is_lob_type($source->column_info($col)->{data_type})) { # push @blobs, $col; # } else { diff --git a/t/746sybase.t b/t/746sybase.t index 91bfb24..34eb475 100644 --- a/t/746sybase.t +++ b/t/746sybase.t @@ -29,11 +29,13 @@ my $storage_idx = -1; for my $storage_type (@storage_types) { $storage_idx++; - $schema = DBICTest::Schema->clone; +# this is so we can set ->storage_type before connecting + my $schema = DBICTest::Schema->clone; unless ($storage_type eq 'DBI::Sybase') { # autodetect $schema->storage_type("::$storage_type"); } + $schema->connection($dsn, $user, $pass, { AutoCommit => 1, on_connect_call => [ @@ -42,7 +44,6 @@ for my $storage_type (@storage_types) { }); $schema->storage->ensure_connected; - $schema->storage->_dbh->disconnect; if ($storage_idx == 0 && $schema->storage->isa('DBIx::Class::Storage::DBI::Sybase::NoBindVars')) { @@ -54,6 +55,7 @@ for my $storage_type (@storage_types) { isa_ok( $schema->storage, "DBIx::Class::Storage::$storage_type" ); + $schema->storage->_dbh->disconnect; lives_ok (sub { $schema->storage->dbh }, 'reconnect works'); $schema->storage->dbh_do (sub {