You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by xu...@apache.org on 2011/04/05 18:10:14 UTC

svn commit: r1089102 - in /pig/trunk: ./ src/org/apache/pig/ src/org/apache/pig/parser/ test/org/apache/pig/parser/ test/org/apache/pig/test/

Author: xuefu
Date: Tue Apr  5 16:10:13 2011
New Revision: 1089102

URL: http://svn.apache.org/viewvc?rev=1089102&view=rev
Log:
PIG-1956: Pig parser shouldn't log error code 0 PIG-1957: Pig parser gives misleading error message when the next foreach block has syntactic errors PIG-1958: Regression: Pig doesn't log type cast warning messages

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/PigServer.java
    pig/trunk/src/org/apache/pig/parser/ParserException.java
    pig/trunk/src/org/apache/pig/parser/QueryParser.g
    pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java
    pig/trunk/test/org/apache/pig/test/TestGrunt.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1089102&r1=1089101&r2=1089102&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Tue Apr  5 16:10:13 2011
@@ -26,6 +26,12 @@ PIG-1680: HBaseStorage should work with 
 
 IMPROVEMENTS
 
+PIG-1956: Pig parser shouldn't log error code 0 (xuefu)
+
+PIG-1957: Pig parser gives misleading error message when the next foreach block has syntactic errors (xuefu)
+
+PIG-1958: Regression: Pig doesn't log type cast warning messages (xuefu)
+
 PIG-1918: Line number should be give for logical plan failures (xuefu)
 
 PIG-1899: Add end to end test harness for Pig (gates)

Modified: pig/trunk/src/org/apache/pig/PigServer.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/PigServer.java?rev=1089102&r1=1089101&r2=1089102&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/PigServer.java (original)
+++ pig/trunk/src/org/apache/pig/PigServer.java Tue Apr  5 16:10:13 2011
@@ -70,6 +70,7 @@ import org.apache.pig.impl.io.FileLocali
 import org.apache.pig.impl.logicalLayer.FrontendException;
 import org.apache.pig.impl.logicalLayer.schema.Schema;
 import org.apache.pig.impl.plan.CompilationMessageCollector;
+import org.apache.pig.impl.plan.CompilationMessageCollector.MessageType;
 import org.apache.pig.impl.streaming.StreamingCommand;
 import org.apache.pig.impl.util.LogUtils;
 import org.apache.pig.impl.util.ObjectSerializer;
@@ -179,6 +180,7 @@ public class PigServer {
 
 
     private boolean isMultiQuery = true;
+    private boolean aggregateWarning = true;
 
     private String constructScope() {
         // scope servers for now as a session id
@@ -227,7 +229,7 @@ public class PigServer {
         this.pigContext = context;
         currDAG = new Graph(false);
 
-        //aggregateWarning = "true".equalsIgnoreCase(pigContext.getProperties().getProperty("aggregate.warning"));
+        aggregateWarning = "true".equalsIgnoreCase(pigContext.getProperties().getProperty("aggregate.warning"));
         isMultiQuery = "true".equalsIgnoreCase(pigContext.getProperties().getProperty("opt.multiquery","true"));
         
         jobName = pigContext.getProperties().getProperty(
@@ -1591,7 +1593,16 @@ public class PigServer {
             // TODO: input/output validation visitor
 
             CompilationMessageCollector collector = new CompilationMessageCollector() ;
+            
             new TypeCheckingRelVisitor( lp, collector).visit();
+            if(aggregateWarning) {
+                CompilationMessageCollector.logMessages(collector, MessageType.Warning, aggregateWarning, log);
+            } else {
+                for(Enum type: MessageType.values()) {
+                    CompilationMessageCollector.logAllMessages(collector, log);
+                }
+            }
+            
             new UnionOnSchemaSetter( lp ).visit();
             new CastLineageSetter(lp, collector).visit();
         }

Modified: pig/trunk/src/org/apache/pig/parser/ParserException.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/parser/ParserException.java?rev=1089102&r1=1089101&r2=1089102&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/ParserException.java (original)
+++ pig/trunk/src/org/apache/pig/parser/ParserException.java Tue Apr  5 16:10:13 2011
@@ -24,17 +24,18 @@ import org.apache.pig.impl.logicalLayer.
 
 public class ParserException extends FrontendException {
 	private static final long serialVersionUID = 1L;
+	private static final int errorCode = 1200;
 	
 	public ParserException(RecognitionException recoException) {
-		super( recoException );
+		super( "Pig script failed to parse: " + recoException, errorCode, recoException );
 	}
 	
 	public ParserException(String msg) {
-		super( msg );
+		super( msg, errorCode );
 	}
 
 	public ParserException(String msg, Throwable cause) {
-	    super( msg, cause );
+	    super( msg, errorCode, cause );
 	}
 	
 	@Override

Modified: pig/trunk/src/org/apache/pig/parser/QueryParser.g
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/parser/QueryParser.g?rev=1089102&r1=1089101&r2=1089102&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/QueryParser.g (original)
+++ pig/trunk/src/org/apache/pig/parser/QueryParser.g Tue Apr  5 16:10:13 2011
@@ -166,10 +166,16 @@ parallel_clause : PARALLEL^ INTEGER
 // is covered by general_statement.
 // We need to handle foreach specifically because of the ending ';', which is not required 
 // if there is a nested block. This is ugly, but it gets the job done.
-foreach_statement : ( alias EQUAL )? foreach_clause_complex SEMI_COLON?
-                 -> ^( STATEMENT alias? foreach_clause_complex )
-                  | ( alias EQUAL )? foreach_clause_simple parallel_clause? SEMI_COLON
-                 -> ^( STATEMENT alias? foreach_clause_simple parallel_clause? )
+foreach_statement : ( ( alias EQUAL )?  FOREACH rel LEFT_CURLY ) => foreach_complex_statement
+                  | foreach_simple_statement
+;
+
+foreach_complex_statement : ( alias EQUAL )? foreach_clause_complex SEMI_COLON?
+                         -> ^( STATEMENT alias? foreach_clause_complex )
+;
+
+foreach_simple_statement : ( alias EQUAL )? foreach_clause_simple parallel_clause? SEMI_COLON
+                        -> ^( STATEMENT alias? foreach_clause_simple parallel_clause? )
 ;
 
 alias : IDENTIFIER

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=1089102&r1=1089101&r2=1089102&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java (original)
+++ pig/trunk/test/org/apache/pig/parser/TestErrorHandling.java Tue Apr  5 16:10:13 2011
@@ -155,4 +155,22 @@ public class TestErrorHandling {
         Assert.fail( "Testcase should fail" );
     }
 
+    @Test // PIG-1956, 1957
+    public void tesNegative9() throws IOException {
+        String query = "A = load 'x' as (name, age, gpa);\n" +
+                       "B = group A by name;\n" +
+                       "C = foreach B { ba = filter A by age < '25'; bb = foreach ba generate gpa; generate group, flatten(bb);}";
+        try {
+            pig.registerQuery( query );
+        } catch(FrontendException ex) {
+        	String msg = ex.getMessage();
+            System.out.println( msg );
+            Assert.assertEquals( 1200, ex.getErrorCode() );
+            Assert.assertTrue( msg.contains( "line 3, column 58" ) );
+            Assert.assertTrue( msg.contains( "mismatched input 'ba' expecting LEFT_PAREN" ) );
+            return;
+        }
+        Assert.fail( "Testcase should fail" );
+    }
+
 }

Modified: pig/trunk/test/org/apache/pig/test/TestGrunt.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestGrunt.java?rev=1089102&r1=1089101&r2=1089102&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestGrunt.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestGrunt.java Tue Apr  5 16:10:13 2011
@@ -125,9 +125,7 @@ public class TestGrunt extends TestCase 
         try {
             grunt.exec();
         } catch (Exception e) {
-            PigException pe = LogUtils.getPigException(e);
-            String msg = (pe == null? e.getMessage(): pe.getMessage());
-            assertTrue(msg.contains("Error during parsing"));
+            assertTrue(e.getMessage().contains("Error during parsing"));
         }
     }