Merge 'trunk' into 'sybase'
Rafael Kitover [Wed, 9 Sep 2009 10:27:02 +0000 (10:27 +0000)]
r20554@hlagh (orig r7595):  wreis | 2009-09-07 09:31:38 -0400
improved warn for Storable hooks in ResultSourceHandle
r20558@hlagh (orig r7597):  ribasushi | 2009-09-07 10:26:59 -0400
Whoops - last_insert_id allows for multiple autoinc columns - support it in pg
r20560@hlagh (orig r7598):  ribasushi | 2009-09-07 10:46:14 -0400
Prune duplicate constraints from the find() condition
r20578@hlagh (orig r7603):  frew | 2009-09-08 14:13:29 -0400
Turn IDENTITY_INSERT back off after inserts

1  2 
lib/DBIx/Class/ResultSet.pm

@@@ -570,12 -570,16 +570,16 @@@ sub _unique_queries 
    my $where = $self->_collapse_cond($self->{attrs}{where} || {});
    my $num_where = scalar keys %$where;
  
-   my @unique_queries;
+   my (@unique_queries, %seen_column_combinations);
    foreach my $name (@constraint_names) {
-     my @unique_cols = $self->result_source->unique_constraint_columns($name);
-     my $unique_query = $self->_build_unique_query($query, \@unique_cols);
+     my @constraint_cols = $self->result_source->unique_constraint_columns($name);
  
-     my $num_cols = scalar @unique_cols;
+     my $constraint_sig = join "\x00", sort @constraint_cols;
+     next if $seen_column_combinations{$constraint_sig}++;
+     my $unique_query = $self->_build_unique_query($query, \@constraint_cols);
+     my $num_cols = scalar @constraint_cols;
      my $num_query = scalar keys %$unique_query;
  
      my $total = $num_query + $num_where;
@@@ -2778,38 -2782,24 +2782,38 @@@ sub _resolved_attrs 
  
    # build columns (as long as select isn't set) into a set of as/select hashes
    unless ( $attrs->{select} ) {
 -      @colbits = map {
 -          ( ref($_) eq 'HASH' )
 -              ? $_
 -              : {
 -                  (
 -                    /^\Q${alias}.\E(.+)$/
 -                      ? "$1"
 -                      : "$_"
 -                  )
 -                =>
 -                  (
 -                    /\./
 -                      ? "$_"
 -                      : "${alias}.$_"
 -                  )
 -            }
 -      } ( ref($attrs->{columns}) eq 'ARRAY' ) ? @{ delete $attrs->{columns}} : (delete $attrs->{columns} || $source->columns );
 +
 +    my @cols = ( ref($attrs->{columns}) eq 'ARRAY' )
 +      ? @{ delete $attrs->{columns}}
 +      : (
 +          ( delete $attrs->{columns} )
 +            ||
 +          $source->storage->_order_select_columns(
 +              $source,
 +              [ $source->columns ],
 +          )
 +        )
 +    ;
 +
 +    @colbits = map {
 +      ( ref($_) eq 'HASH' )
 +      ? $_
 +      : {
 +          (
 +            /^\Q${alias}.\E(.+)$/
 +              ? "$1"
 +              : "$_"
 +          )
 +            =>
 +          (
 +            /\./
 +              ? "$_"
 +              : "${alias}.$_"
 +          )
 +        }
 +    } @cols;
    }
 +
    # add the additional columns on
    foreach ( 'include_columns', '+columns' ) {
        push @colbits, map {