[Bast-commits] r7183 - DBIx-Class/0.08/branches/mssql_storage_minor_refactor/lib/DBIx/Class/Storage/DBI

ribasushi at dev.catalyst.perl.org ribasushi at dev.catalyst.perl.org
Mon Aug 3 13:16:12 GMT 2009


Author: ribasushi
Date: 2009-08-03 13:16:10 +0000 (Mon, 03 Aug 2009)
New Revision: 7183

Modified:
   DBIx-Class/0.08/branches/mssql_storage_minor_refactor/lib/DBIx/Class/Storage/DBI/MSSQL.pm
Log:
Simplify code and add some comments

Modified: DBIx-Class/0.08/branches/mssql_storage_minor_refactor/lib/DBIx/Class/Storage/DBI/MSSQL.pm
===================================================================
--- DBIx-Class/0.08/branches/mssql_storage_minor_refactor/lib/DBIx/Class/Storage/DBI/MSSQL.pm	2009-08-03 12:28:21 UTC (rev 7182)
+++ DBIx-Class/0.08/branches/mssql_storage_minor_refactor/lib/DBIx/Class/Storage/DBI/MSSQL.pm	2009-08-03 13:16:10 UTC (rev 7183)
@@ -84,10 +84,10 @@
 # cast MONEY values properly
   if ($op eq 'insert' || $op eq 'update') {
     my $fields = $args->[0];
-    my $col_info = $self->_resolve_column_info($ident, [keys %$fields]);
 
     for my $col (keys %$fields) {
-      if ($col_info->{$col}{data_type} =~ /^money\z/i) {
+      # $ident is a result source object with INSERT/UPDATE ops
+      if ($ident->column_info ($col)->{data_type} =~ /^money\z/i) {
         my $val = $fields->{$col};
         $fields->{$col} = \['CAST(? AS MONEY)', [ $col => $val ]];
       }
@@ -117,25 +117,25 @@
   my ($op) = @_;
 
   my ($rv, $sth, @bind) = $self->dbh_do($self->can('_dbh_execute'), @_);
+
   if ($op eq 'insert') {
-    $self->_identity($self->_fetch_identity($sth));
-  }
 
-  return wantarray ? ($rv, $sth, @bind) : $rv;
-}
+    # this should bring back the result of SELECT SCOPE_IDENTITY() we tacked
+    # on in _prep_for_execute above
+    my ($identity) = $sth->fetchrow_array;
 
-sub _fetch_identity {
-  my ($self, $sth) = @_;
-  my ($identity) = $sth->fetchrow_array;
-  $sth->finish;
+    # SCOPE_IDENTITY failed, but we can do something else
+    if ( (! $identity) && $self->_identity_method) {
+      ($identity) = $self->_dbh->selectrow_array(
+        'select ' . $self->_identity_method
+      );
+    }
 
-  if ((not defined $identity) && $self->_identity_method) {
-    ($identity) = $self->_dbh->selectrow_array(
-      'select ' . $self->_identity_method
-    );
+    $self->_identity($identity);
+    $sth->finish;
   }
 
-  return $identity;
+  return wantarray ? ($rv, $sth, @bind) : $rv;
 }
 
 sub last_insert_id { shift->_identity }




More information about the Bast-commits mailing list