You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by da...@apache.org on 2010/08/30 09:44:20 UTC
svn commit: r990715 - in /hadoop/pig/trunk: CHANGES.txt
src/org/apache/pig/newplan/logical/rules/PushUpFilter.java
Author: daijy
Date: Mon Aug 30 07:44:20 2010
New Revision: 990715
URL: http://svn.apache.org/viewvc?rev=990715&view=rev
Log:
PIG-1574: Optimization rule PushUpFilter causes filter to be pushed up out joins
Modified:
hadoop/pig/trunk/CHANGES.txt
hadoop/pig/trunk/src/org/apache/pig/newplan/logical/rules/PushUpFilter.java
Modified: hadoop/pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=990715&r1=990714&r2=990715&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Mon Aug 30 07:44:20 2010
@@ -26,6 +26,8 @@ PIG-1249: Safe-guards against misconfigu
IMPROVEMENTS
+PIG-1574: Optimization rule PushUpFilter causes filter to be pushed up out joins (xuefuz via daijy)
+
PIG-1515: Migrate logical optimization rule: PushDownForeachFlatten (xuefuz via daijy)
PIG-1321: Logical Optimizer: Merge cascading foreach (xuefuz via daijy)
Modified: hadoop/pig/trunk/src/org/apache/pig/newplan/logical/rules/PushUpFilter.java
URL: http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/newplan/logical/rules/PushUpFilter.java?rev=990715&r1=990714&r2=990715&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/newplan/logical/rules/PushUpFilter.java (original)
+++ hadoop/pig/trunk/src/org/apache/pig/newplan/logical/rules/PushUpFilter.java Mon Aug 30 07:44:20 2010
@@ -125,26 +125,19 @@ public class PushUpFilter extends Rule {
}
}
- // find the farthest predecessor that has all the fields
- LogicalRelationalOperator input = join;
- List<Operator> preds = currentPlan.getPredecessors(input);
- while(!(input instanceof LOForEach) && preds != null) {
- boolean found = false;
- for(int j=0; j<preds.size(); j++) {
- if (hasAll((LogicalRelationalOperator)preds.get(j), uids)) {
- input = (LogicalRelationalOperator)preds.get(j);
- subPlan.add(input);
- found = true;
- break;
- }
- }
- if (!found) {
+ // Find the predecessor of join that contains all required uids.
+ Operator input = null;
+ List<Operator> preds = currentPlan.getPredecessors(join);
+ for(int j=0; j<preds.size(); j++) {
+ if( hasAll((LogicalRelationalOperator)preds.get(j), uids) ) {
+ input = preds.get(j);
+ subPlan.add(input);
break;
}
- preds = currentPlan.getPredecessors(input);
}
- if (input != join) {
+ if( input != null ) {
+ // Found one of the join's predeccessors of the join which has all the uids.
Operator pred = currentPlan.getPredecessors(filter).get(0);
Operator succed = currentPlan.getSuccessors(filter).get(0);
subPlan.add(succed);
@@ -156,17 +149,17 @@ public class PushUpFilter extends Rule {
succed = currentPlan.getSuccessors(input).get(0);
Pair<Integer, Integer> p3 = currentPlan.disconnect(input, succed);
currentPlan.connect(input, p3.first, filter, 0);
- currentPlan.connect(filter, 0, succed, p3.second);
-
+ currentPlan.connect(filter, 0, succed, p3.second);
return;
- }
-
- List<Operator> l = currentPlan.getSuccessors(filter);
- if (l != null) {
- next = l.get(0);
- } else {
- next = null;
- }
+ } else {
+ // Didn't find the opeartor, so looking at the next one after the filter.
+ List<Operator> l = currentPlan.getSuccessors(filter );
+ if( l != null ) {
+ next = l.get( 0 );
+ } else {
+ next = null;
+ }
+ }
}
}