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 2013/08/29 23:16:48 UTC

svn commit: r1518825 - in /pig/trunk: CHANGES.txt src/org/apache/pig/parser/LogicalPlanBuilder.java test/org/apache/pig/parser/TestErrorHandling.java

Author: daijy
Date: Thu Aug 29 21:16:47 2013
New Revision: 1518825

URL: http://svn.apache.org/r1518825
Log:
PIG-2606: union/ join operations are not accepting same alias as multiple inputs

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java
    pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1518825&r1=1518824&r2=1518825&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu Aug 29 21:16:47 2013
@@ -218,6 +218,8 @@ PIG-3013: BinInterSedes improve chararra
 
 BUG FIXES
 
+PIG-2606: union/ join operations are not accepting same alias as multiple inputs (hsubramaniyan via daijy)
+
 PIG-3435: Custom Partitioner not working with MultiQueryOptimizer (knoguchi via daijy)
 
 PIG-3385: DISTINCT no longer uses custom partitioner (knoguchi via daijy)

Modified: pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java?rev=1518825&r1=1518824&r2=1518825&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java (original)
+++ pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java Thu Aug 29 21:16:47 2013
@@ -236,6 +236,7 @@ public class LogicalPlanBuilder {
     }
 
     String buildUnionOp(SourceLocation loc, String alias, List<String> inputAliases, boolean onSchema) throws ParserValidationException {
+        checkDuplicateAliases(inputAliases, loc, "UNION");
         LOUnion op = new LOUnion( plan, onSchema );
         return buildOp( loc, op, alias, inputAliases, null );
     }
@@ -349,6 +350,7 @@ public class LogicalPlanBuilder {
             MultiMap<Integer, LogicalExpressionPlan> joinPlans,
             JOINTYPE jt, List<Boolean> innerFlags, String partitioner)
     throws ParserValidationException {
+        checkDuplicateAliases(inputAliases, loc, "JOIN");
         if (jt==null)
             jt = JOINTYPE.HASH;
         else {
@@ -863,7 +865,27 @@ public class LogicalPlanBuilder {
             inputAliases.add( inputAlias );
         return buildOp( loc, op, alias, inputAliases, partitioner );
     }
-
+    
+    private void checkDuplicateAliases(List<String> inputAliases, SourceLocation loc, 
+    		String opName) throws ParserValidationException {
+        //Keep the count of the number of times the same Alias is used          
+        Map<Operator, Integer> inputAliasesMap = new HashMap<Operator, Integer>(); 
+        for(String a : inputAliases) {
+            Operator pred = operators.get( a );                
+    	    if (pred == null) {                                                
+    	    	throw new ParserValidationException( intStream, loc, "Unrecognized alias " + a );
+    	    }
+    	    if (inputAliasesMap.containsKey(pred)) {
+    	        throw new ParserValidationException( intStream, loc, 
+    	                "Pig does not accept same alias as input for " + opName + 
+    	                " operation : " + a );
+    	    }
+    	    else {
+                inputAliasesMap.put(pred, 1);
+            }
+        }
+    }
+    
     private String buildOp(SourceLocation loc, LogicalRelationalOperator op, String alias,
     		List<String> inputAliases, String partitioner) throws ParserValidationException {
         setAlias( op, alias );

Modified: pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java?rev=1518825&r1=1518824&r2=1518825&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java (original)
+++ pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java Thu Aug 29 21:16:47 2013
@@ -241,6 +241,39 @@ public class TestErrorHandling {
         }
         Assert.fail( "Testcase should fail" );
     }
+    
+    
+    @Test //pig-2606
+    public void testNegative14() throws IOException {
+        String query = "A = load 'x'; \n" +
+                       "B = union A, A;";
+        try {
+            pig.registerQuery( query );
+        } catch(FrontendException ex) {
+            String msg = ex.getMessage();
+            System.out.println( msg );
+            Assert.assertTrue( msg.contains( "Pig does not accept same alias as input for") );
+            Assert.assertTrue( msg.contains( "UNION") );
+            return;
+        }
+        Assert.fail( "Testcase should fail" );
+    }
+    
+    @Test //pig-2606
+    public void testNegative15() throws IOException {
+        String query = "A = load 'x' as (a0, a1); \n" +
+                       "B = join A by a0, A by a1;";
+        try {
+            pig.registerQuery( query );
+        } catch(FrontendException ex) {
+            String msg = ex.getMessage();
+            System.out.println( msg );
+            Assert.assertTrue( msg.contains( "Pig does not accept same alias as input for") );
+            Assert.assertTrue( msg.contains( "JOIN") );
+            return;
+        }
+        Assert.fail( "Testcase should fail" );
+    }    
 
     @Test //pig-2267
     public void testAutomaticallyGivenSchemaName1() throws IOException{