Author: daijy
Date: Mon Sep 6 21:16:18 2010
New Revision: 993156
URL: http://svn.apache.org/viewvc?rev=993156view=rev
Log:
PIG-1178: LogicalPlan and Optimizer are too complex and hard to work with
(PIG-1178-10.patch)
Modified:
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/LogicalPlanMigrationVistor.java
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LOGenerate.java
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LOUnion.java
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LogicalSchema.java
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/rules/ColumnPruneHelper.java
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/rules/ColumnPruneVisitor.java
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/optimizer/PlanOptimizer.java
hadoop/pig/branches/branch-0.8/test/org/apache/pig/test/TestNewPlanLogToPhyTranslationVisitor.java
Modified:
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/LogicalPlanMigrationVistor.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/LogicalPlanMigrationVistor.java?rev=993156r1=993155r2=993156view=diff
==
---
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/LogicalPlanMigrationVistor.java
(original)
+++
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/LogicalPlanMigrationVistor.java
Mon Sep 6 21:16:18 2010
@@ -45,6 +45,7 @@ import org.apache.pig.impl.logicalLayer.
import org.apache.pig.impl.logicalLayer.LogicalPlan;
import org.apache.pig.impl.logicalLayer.LOCogroup.GROUPTYPE;
import org.apache.pig.impl.logicalLayer.LOJoin.JOINTYPE;
+import org.apache.pig.impl.logicalLayer.schema.Schema;
import org.apache.pig.impl.plan.DependencyOrderWalker;
import org.apache.pig.impl.plan.PlanWalker;
import org.apache.pig.impl.plan.VisitorException;
@@ -209,6 +210,13 @@ public class LogicalPlanMigrationVistor
org.apache.pig.newplan.logical.relational.LOGenerate gen =
new
org.apache.pig.newplan.logical.relational.LOGenerate(innerPlan, expPlans, flat);
+if (forEach.getUserDefinedSchema()!=null) {
+ListLogicalSchema userDefinedSchema = new
ArrayListLogicalSchema();
+for (Schema schema : forEach.getUserDefinedSchema()) {
+userDefinedSchema.add(Util.translateSchema(schema));
+}
+gen.setUserDefinedSchema(userDefinedSchema);
+}
innerPlan.add(gen);
ListLogicalPlan ll = forEach.getForEachPlans();
Modified:
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LOGenerate.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LOGenerate.java?rev=993156r1=993155r2=993156view=diff
==
---
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LOGenerate.java
(original)
+++
hadoop/pig/branches/branch-0.8/src/org/apache/pig/newplan/logical/relational/LOGenerate.java
Mon Sep 6 21:16:18 2010
@@ -33,6 +33,12 @@ import org.apache.pig.newplan.logical.re
public class LOGenerate extends LogicalRelationalOperator {
private ListLogicalExpressionPlan outputPlans;
private boolean[] flattenFlags;
+ private ListLogicalSchema mUserDefinedSchema = null;
+ private ListLogicalSchema outputPlanSchemas = null;
+ // If LOGenerate generate new uid, cache it here.
+ // This happens when expression plan does not have complete schema,
however,
+ // user give complete schema in ForEach statement in script
+ private ListLogicalSchema uidOnlySchemas = null;
public LOGenerate(OperatorPlan plan, ListLogicalExpressionPlan ps,
boolean[] flatten) {
super(LOGenerate, plan);
@@ -46,60 +52,130 @@ public class LOGenerate extends LogicalR
return schema;
}
+if (uidOnlySchemas == null) {
+uidOnlySchemas = new ArrayListLogicalSchema();
+for (int i=0;ioutputPlans.size();i++)
+uidOnlySchemas.add(null);
+}
+
schema = new LogicalSchema();
+outputPlanSchemas = new ArrayListLogicalSchema();
for(int i=0; ioutputPlans.size(); i++) {
LogicalExpression exp =
(LogicalExpression)outputPlans.get(i).getSources().get(0);
-LogicalFieldSchema fieldSchema = null;
-if (exp.getFieldSchema()==null) {
-schema = null;
-break;
+LogicalSchema mUserDefinedSchemaCopy = null;
+if (mUserDefinedSchema!=null mUserDefinedSchema.get(i)!=null) {
+