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 2011/09/22 19:25:42 UTC

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

Author: daijy
Date: Thu Sep 22 17:25:42 2011
New Revision: 1174272

URL: http://svn.apache.org/viewvc?rev=1174272&view=rev
Log:
PIG-2238: Pig 0.9 error message not useful as compared to 0.8

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

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1174272&r1=1174271&r2=1174272&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Thu Sep 22 17:25:42 2011
@@ -257,6 +257,8 @@ PIG-2221: Couldnt find documentation for
 
 BUG FIXES
 
+PIG-2238: Pig 0.9 error message not useful as compared to 0.8 (daijy)
+
 PIG-2286: Using COR function in Piggybank results in ERROR 2018: Internal error. Unable to introduce the combiner for optimization (daijy)
 
 PIG-2270: Put jython.jar in classpath (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=1174272&r1=1174271&r2=1174272&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java (original)
+++ pig/trunk/src/org/apache/pig/parser/LogicalPlanBuilder.java Thu Sep 22 17:25:42 2011
@@ -158,28 +158,28 @@ public class LogicalPlanBuilder {
         return new LOFilter( plan, true );
     }
     
-    String buildFilterOp(SourceLocation loc, LOFilter op, String alias, String inputAlias, LogicalExpressionPlan expr) {
+    String buildFilterOp(SourceLocation loc, LOFilter op, String alias, String inputAlias, LogicalExpressionPlan expr) throws ParserValidationException {
         op.setFilterPlan( expr );
         return buildOp( loc, op, alias, inputAlias, null );
     }
     
-    String buildDistinctOp(SourceLocation loc, String alias, String inputAlias, String partitioner) {
+    String buildDistinctOp(SourceLocation loc, String alias, String inputAlias, String partitioner) throws ParserValidationException {
         LODistinct op = new LODistinct( plan );
         return buildOp( loc, op, alias, inputAlias, partitioner );
     }
 
-    String buildLimitOp(SourceLocation loc, String alias, String inputAlias, long limit) {
+    String buildLimitOp(SourceLocation loc, String alias, String inputAlias, long limit) throws ParserValidationException {
         LOLimit op = new LOLimit( plan, limit );
         return buildOp( loc, op, alias, inputAlias, null );
     }
     
-    String buildLimitOp(SourceLocation loc, LOLimit op, String alias, String inputAlias, LogicalExpressionPlan expr) {
+    String buildLimitOp(SourceLocation loc, LOLimit op, String alias, String inputAlias, LogicalExpressionPlan expr) throws ParserValidationException {
         op.setLimitPlan(expr);
         return buildOp(loc, op, alias, inputAlias, null);
     }
     
     String buildSampleOp(SourceLocation loc, String alias, String inputAlias, double value,
-            SourceLocation valLoc) {
+            SourceLocation valLoc) throws ParserValidationException {
         LogicalExpressionPlan filterPlan = new LogicalExpressionPlan();
         //  Generate a filter condition.
         LogicalExpression konst = new ConstantExpression( filterPlan, value);
@@ -191,18 +191,18 @@ public class LogicalPlanBuilder {
     }
     
     String buildSampleOp(SourceLocation loc, LOFilter filter, String alias, String inputAlias,
-            LogicalExpressionPlan samplePlan, LogicalExpression expr) {
+            LogicalExpressionPlan samplePlan, LogicalExpression expr) throws ParserValidationException {
         UserFuncExpression udf = new UserFuncExpression( samplePlan, new FuncSpec( RANDOM.class.getName() ) );
         new LessThanExpression( samplePlan, udf, expr );
         return buildFilterOp( loc, filter, alias, inputAlias, samplePlan );
     }
     
-    String buildUnionOp(SourceLocation loc, String alias, List<String> inputAliases, boolean onSchema) {
+    String buildUnionOp(SourceLocation loc, String alias, List<String> inputAliases, boolean onSchema) throws ParserValidationException {
         LOUnion op = new LOUnion( plan, onSchema );
         return buildOp( loc, op, alias, inputAliases, null );
     }
 
-    String buildSplitOp(SourceLocation loc, String inputAlias) {
+    String buildSplitOp(SourceLocation loc, String inputAlias) throws ParserValidationException {
         LOSplit op = new LOSplit( plan );
         return buildOp( loc, op, null, inputAlias, null );
     }
@@ -212,7 +212,7 @@ public class LogicalPlanBuilder {
     }
     
     String buildSplitOutputOp(SourceLocation loc, LOSplitOutput op, String alias, String inputAlias,
-            LogicalExpressionPlan filterPlan) {
+            LogicalExpressionPlan filterPlan) throws ParserValidationException {
         op.setFilterPlan( filterPlan );
         return buildOp ( loc, op, alias, inputAlias, null );
     }
@@ -259,7 +259,7 @@ public class LogicalPlanBuilder {
         return buildOp(loc, op, alias, inputAlias, null);
     }
     
-    String buildCrossOp(SourceLocation loc, String alias, List<String> inputAliases, String partitioner) {
+    String buildCrossOp(SourceLocation loc, String alias, List<String> inputAliases, String partitioner) throws ParserValidationException {
         LOCross op = new LOCross( plan );
         return buildOp ( loc, op, alias, inputAliases, partitioner );
     }
@@ -422,7 +422,7 @@ public class LogicalPlanBuilder {
     }
     
     private String buildOp(SourceLocation loc, LogicalRelationalOperator op, String alias, 
-    		String inputAlias, String partitioner) {
+    		String inputAlias, String partitioner) throws ParserValidationException {
         List<String> inputAliases = new ArrayList<String>();
         if( inputAlias != null )
             inputAliases.add( inputAlias );
@@ -430,13 +430,16 @@ public class LogicalPlanBuilder {
     }
     
     private String buildOp(SourceLocation loc, LogicalRelationalOperator op, String alias, 
-    		List<String> inputAliases, String partitioner) {
+    		List<String> inputAliases, String partitioner) throws ParserValidationException {
         setAlias( op, alias );
         setPartitioner( op, partitioner );
         op.setLocation( loc );
         plan.add( op );
         for( String a : inputAliases ) {
             Operator pred = operators.get( a );
+            if (pred==null) {
+                throw new ParserValidationException( intStream, loc, "Unrecognized alias " + a );
+            }
             plan.connect( pred, op );
         }
         operators.put( op.getAlias(), op );

Modified: pig/trunk/test/org/apache/pig/parser/TestQueryParser.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/parser/TestQueryParser.java?rev=1174272&r1=1174271&r2=1174272&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/parser/TestQueryParser.java (original)
+++ pig/trunk/test/org/apache/pig/parser/TestQueryParser.java Thu Sep 22 17:25:42 2011
@@ -107,6 +107,19 @@ public class TestQueryParser {
         Assert.assertTrue(msg.startsWith(expected));
     }
     
+    // See PIG-2238
+    @Test
+    public void testDependentNullAlias() throws IOException, RecognitionException {
+        PigServer pigServer = new PigServer(ExecType.LOCAL);
+        try {
+            pigServer.registerQuery( "F = limit F 20;store F into 'out';" );
+        } catch(Exception ex) {
+            Assert.assertTrue(ex.getMessage().contains("Unrecognized alias F"));
+            return;
+        }
+        Assert.fail();
+    }
+    
     @Test
     public void test2() throws IOException, RecognitionException {
         shouldPass("A = load '/Users/gates/test/data/studenttab10'; B = foreach A generate ( $0 == 0 ? 1 : 0 );");