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{