Changeset 35164 for lang/perl

Show
Ignore:
Timestamp:
09/02/09 17:08:23 (5 years ago)
Author:
kazuho
Message:

optimization

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/DBIx-ShardManager-Pacific/trunk/lib/DBIx/ShardManager/Pacific.pm

    r35163 r35164  
    5858                && defined $get_match_col->($row); 
    5959        my $dbh = $self->rw_handle($get_shard_col->($row)); 
     60        my $match_val = $get_match_col->($row); 
    6061        if (my $t = first { $_->[0] == $dbh } @dbh_cols) { 
    61             push @{$t->[1]}, $get_match_col->($row); 
     62            if (my $u = $t->[1]->{$match_val}) { 
     63                push @$u, $row; 
     64            } else { 
     65                $t->[1]->{$match_val} = [ $row ]; 
     66            } 
    6267        } else { 
    63             push @dbh_cols, [ $dbh, [ $get_match_col->($row) ] ]; 
     68            push @dbh_cols, [ $dbh, { $match_val => [ $row ] } ]; 
    6469        } 
    6570    } 
     
    7075            $join_tbl, 
    7176            $join_col, 
    72             join(',', map { $dc->[0]->quote($_) } @{$dc->[1]}), 
     77            join(',', map { $dc->[0]->quote($_) } sort keys %{$dc->[1]}), 
    7378        ); 
    74         print STDERR "SQL:$query\n"; 
    75         my %join_rows = map { 
    76             +($_->{$join_col} => $_), 
    77         } @{$dc->[0]->selectall_arrayref($query, { Slice => {} })}; 
    78         for my $row (@$rows) { 
    79             if (defined $get_shard_col->($row) 
    80                     && defined $get_match_col->($row) 
    81                         && defined $join_rows{$get_match_col->($row)}) { 
    82                 $set_match_col->($row, $join_rows{$get_match_col->($row)}); 
     79        # print STDERR "SQL:$query\n"; 
     80        for my $join_row ( 
     81            @{$dc->[0]->selectall_arrayref($query, { Slice => {} })} 
     82        ) { 
     83            for my $row (@{$dc->[1]->{$join_row->{$join_col}}}) { 
     84                $set_match_col->($row, $join_row); 
    8385            } 
    8486        }