PIG-2077: Project UDF output inside a non-foreach statement fail on 0.8
git-svn-id: https://svn.apache.org/repos/asf/pig/branches/branch-0.8@1148107 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index 9b1d570..a8e1d5b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -36,6 +36,8 @@
BUG FIXES
+PIG-2077: Project UDF output inside a non-foreach statement fail on 0.8 (daijy)
+
PIG-2067: FilterLogicExpressionSimplifier removed some branches in some cases (daijy)
PIG-2033: Pig returns sucess for the failed Pig script (rding)
diff --git a/src/org/apache/pig/newplan/logical/LogicalExpPlanMigrationVistor.java b/src/org/apache/pig/newplan/logical/LogicalExpPlanMigrationVistor.java
index 5efed7c..bd7d552 100644
--- a/src/org/apache/pig/newplan/logical/LogicalExpPlanMigrationVistor.java
+++ b/src/org/apache/pig/newplan/logical/LogicalExpPlanMigrationVistor.java
@@ -134,7 +134,7 @@
LogicalExpression pe;
if (project.getPlan().getPredecessors(project)!=null && project.getPlan().getPredecessors(project).get(0)
- instanceof LOProject) {
+ instanceof ExpressionOperator) {
List<Integer> columnNums = new ArrayList<Integer>();
columnNums.add(col);
pe = new DereferenceExpression(exprPlan, columnNums);
diff --git a/test/org/apache/pig/test/TestEvalPipeline2.java b/test/org/apache/pig/test/TestEvalPipeline2.java
index b9366bf..2b6721f 100644
--- a/test/org/apache/pig/test/TestEvalPipeline2.java
+++ b/test/org/apache/pig/test/TestEvalPipeline2.java
@@ -1287,4 +1287,26 @@
assertTrue(t.toString().equals("({(1)})"));
assertFalse(iter.hasNext());
}
+
+ @Test
+ public void testDereferenceUDFNonForEach() throws Exception {
+ String[] input1 = {
+ "1\t2011/3/2"
+ };
+ String[] input2 = {
+ "1\t2011/3/2 12:32"
+ };
+
+ Util.createInputFile(cluster, "table_testDereferenceUDFNonForEach1", input1);
+ Util.createInputFile(cluster, "table_testDereferenceUDFNonForEach2", input2);
+ pigServer.registerQuery("A = load 'table_testDereferenceUDFNonForEach1' as (tracking_id, day:chararray);");
+ pigServer.registerQuery("B = load 'table_testDereferenceUDFNonForEach2' as (tracking_id, timestamp:chararray);");
+ pigServer.registerQuery("C = JOIN A by (tracking_id, day) LEFT OUTER, B by (tracking_id, STRSPLIT(timestamp, ' ').$0);");
+
+ Iterator<Tuple> iter = pigServer.openIterator("C");
+
+ Tuple t = iter.next();
+ assertTrue(t.toString().equals("(1,2011/3/2,1,2011/3/2 12:32)"));
+ assertFalse(iter.hasNext());
+ }
}