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());
+    }
 }