[Bast-commits] r6722 - DBIx-Class/0.08/branches/prefetch_limit/lib/DBIx/Class/Storage

ribasushi at dev.catalyst.perl.org ribasushi at dev.catalyst.perl.org
Fri Jun 19 14:36:54 GMT 2009


Author: ribasushi
Date: 2009-06-19 14:36:54 +0000 (Fri, 19 Jun 2009)
New Revision: 6722

Modified:
   DBIx-Class/0.08/branches/prefetch_limit/lib/DBIx/Class/Storage/DBI.pm
Log:
Fix the fix

Modified: DBIx-Class/0.08/branches/prefetch_limit/lib/DBIx/Class/Storage/DBI.pm
===================================================================
--- DBIx-Class/0.08/branches/prefetch_limit/lib/DBIx/Class/Storage/DBI.pm	2009-06-19 14:36:08 UTC (rev 6721)
+++ DBIx-Class/0.08/branches/prefetch_limit/lib/DBIx/Class/Storage/DBI.pm	2009-06-19 14:36:54 UTC (rev 6722)
@@ -1315,7 +1315,7 @@
   }
 
 
-  # mangle the from, separating it into an outer and inner part
+  # mangle the head of the {from}
   my $self_ident = shift @$from;
 
   # this map indicates which aliases need to be joined if we want
@@ -1323,14 +1323,11 @@
   # (e.g.  join => { cds => 'tracks' } - tracks will need cds too )
   my %join_map = map { $_->[0]{-alias} => $_->[0]{-join_path} } (@$from);
 
-  my (%inner_joins, %outer_joins);
+  my (%inner_joins);
 
-  # decide which parts of the join will remain
+  # decide which parts of the join will remain on the inside
+  # (we do not need the purely-prefetch ones)
   #
-  # resolve the prefetch-needed joins here as well, as the $attr->{prefetch}
-  # is 1) resolved away 2) unreliable as it may be a result of search_related
-  # and whatnot
-  #
   # since we do not have introspectable SQLA, we fall back to ugly
   # scanning of raw SQL for WHERE, and for pieces of ORDER BY
   # in order to determine what goes into %inner_joins
@@ -1360,15 +1357,6 @@
           $inner_joins{$_} = 1 for @{$join_map{$alias}};
         }
       }
-
-      # any alias found in the select becomes %outer_joins
-      # the join parents are included in the same manner
-      for my $sel (@$select) {
-        if ($sel =~ /^$alias\./) {
-          $outer_joins{$alias} = 1;
-          $outer_joins{$_} = 1 for @{$join_map{$alias}};
-        }
-      }
     }
   }
 
@@ -1400,17 +1388,14 @@
     $sub_attrs
   );
 
-  # generate the outer $from
-  my $outer_from = [ { $alias => $subq } ];
-  if (keys %outer_joins) {
-    for my $j (@$from) {
-      push @$outer_from, $j if $outer_joins{$j->[0]{-alias}};
-    }
-  }
+  # put it back in $from
+  unshift @$from, { $alias => $subq };
 
-  # now _select_args() will continue with the modified set of arguments
-  # where ended up in the subquery, thus {}
-  return ($outer_from, $select, {}, $attrs);
+  # This is totally horrific - the $where ends up in both the inner and outer query
+  # Unfortunately not much can be done until SQLA2 introspection arrives
+  #
+  # OTOH it can be seen as a plus: <ash> (notes that this query would make a DBA cry ;)
+  return ($from, $select, $where, $attrs);
 }
 
 sub _resolve_ident_sources {




More information about the Bast-commits mailing list