minor cleanups
Rafael Kitover [Wed, 22 Jul 2009 05:09:21 +0000 (05:09 +0000)]
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/Storage/DBI.pm
lib/DBIx/Class/Storage/DBI/Sybase.pm
t/746sybase.t

index 724b33f..73b0920 100644 (file)
@@ -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' ) {
index 6eefbfa..1a42609 100644 (file)
@@ -2289,9 +2289,9 @@ as moving C<BLOB> 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 {
index c12c124..06f64b3 100644 (file)
@@ -35,9 +35,9 @@ You need a version of L<DBD::Sybase> compiled with the Sybase OpenClient
 libraries, B<NOT> FreeTDS, for placeholder support. Otherwise your storage will
 be automatically reblessed into C<::NoBindVars>.
 
-A recommended L<DBIx::Class::Storage::DBI/connect_info> settings:
+A recommended L<DBIx::Class::Storage::DBI/connect_info> 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<IMAGE> 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 {
index 91bfb24..34eb475 100644 (file)
@@ -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 {