improvements for MSSQL driver via DBD::ADO
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / UniqueIdentifier.pm
index 92e7c15..8621da0 100644 (file)
@@ -38,7 +38,8 @@ In which case it is used as the name of database function to create a new GUID,
 =item coderef
 
 In which case the coderef should return a string GUID, using L<Data::GUID>, or
-whatever GUID generation method you prefer.
+whatever GUID generation method you prefer. It is passed the C<$self>
+L<DBIx::Class::Storage> reference as a parameter.
 
 =back
 
@@ -56,7 +57,7 @@ sub _is_guid_type {
   return $data_type =~ $GUID_TYPE;
 }
 
-sub insert {
+sub _prefetch_autovalues  {
   my $self = shift;
   my ($source, $to_insert) = @_;
 
@@ -64,8 +65,8 @@ sub insert {
 
   my %guid_cols;
   my @pk_cols = $source->primary_columns;
-  my %pk_cols;
-  @pk_cols{@pk_cols} = ();
+  my %pk_col_idx;
+  @pk_col_idx{@pk_cols} = ();
 
   my @pk_guids = grep {
     $col_info->{$_}{data_type}
@@ -79,13 +80,11 @@ sub insert {
     $col_info->{$_}{data_type} =~ $GUID_TYPE
     &&
     $col_info->{$_}{auto_nextval}
-  } grep { not exists $pk_cols{$_} } $source->columns;
+  } grep { not exists $pk_col_idx{$_} } $source->columns;
 
   my @get_guids_for =
     grep { not exists $to_insert->{$_} } (@pk_guids, @auto_guids);
 
-  my $updated_cols = {};
-
   for my $guid_col (@get_guids_for) {
     my $new_guid;
 
@@ -99,18 +98,14 @@ sub insert {
     }
 
     if (ref $guid_method eq 'CODE') {
-      $new_guid = $guid_method->();
+      $to_insert->{$guid_col} = $guid_method->($self);
     }
     else {
-      ($new_guid) = $self->_get_dbh->selectrow_array("SELECT $guid_method");
+      ($to_insert->{$guid_col}) = $self->_get_dbh->selectrow_array("SELECT $guid_method");
     }
-
-    $updated_cols->{$guid_col} = $to_insert->{$guid_col} = $new_guid;
   }
 
-  $updated_cols = { %$updated_cols, %{ $self->next::method(@_) } };
-
-  return $updated_cols;
+  return $self->next::method(@_);
 }
 
 =head1 AUTHOR