You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by rd...@apache.org on 2011/05/20 21:05:02 UTC

svn commit: r1125512 - in /pig/trunk: CHANGES.txt src/org/apache/pig/parser/DryRunGruntParser.java test/org/apache/pig/test/TestMacroExpansion.java

Author: rding
Date: Fri May 20 19:05:02 2011
New Revision: 1125512

URL: http://svn.apache.org/viewvc?rev=1125512&view=rev
Log:
PIG-2081: Dryrun gives wrong line numbers in error message for scripts containing macro

Modified:
    pig/trunk/CHANGES.txt
    pig/trunk/src/org/apache/pig/parser/DryRunGruntParser.java
    pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java

Modified: pig/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1125512&r1=1125511&r2=1125512&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Fri May 20 19:05:02 2011
@@ -227,6 +227,8 @@ PIG-1696: Performance: Use System.arrayc
 
 BUG FIXES
 
+PIG-2081: Dryrun gives wrong line numbers in error message for scripts containing macro (rding)
+
 PIG-2078: POProject.getNext(DataBag) does not handle null (daijy)
 
 PIG-2029: Inconsistency in Pig Stats reports (rding)

Modified: pig/trunk/src/org/apache/pig/parser/DryRunGruntParser.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/parser/DryRunGruntParser.java?rev=1125512&r1=1125511&r2=1125512&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/DryRunGruntParser.java (original)
+++ pig/trunk/src/org/apache/pig/parser/DryRunGruntParser.java Fri May 20 19:05:02 2011
@@ -228,10 +228,20 @@ public class DryRunGruntParser extends P
     @Override
     protected void processPig(String cmd) throws IOException {
         
+        int start = getLineNumber();
+       
+        StringBuilder blder = new StringBuilder();
+        for (int i = 1; i < start; i++) {
+            blder.append("\n");            
+        }
+        
         if (cmd.charAt(cmd.length() - 1) != ';') {
             cmd += ";";
         }
         
+        blder.append(cmd);
+        cmd = blder.toString();
+        
         CommonTokenStream tokenStream = QueryParserDriver.tokenize(cmd, source);
         Tree ast = null;
 

Modified: pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java
URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java?rev=1125512&r1=1125511&r2=1125512&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java Fri May 20 19:05:02 2011
@@ -31,7 +31,7 @@ import java.util.Properties;
 import org.apache.pig.ExecType;
 import org.apache.pig.PigRunner;
 import org.apache.pig.impl.PigContext;
-import org.apache.pig.impl.logicalLayer.FrontendException;
+import org.apache.pig.parser.DryRunGruntParser;
 import org.apache.pig.tools.grunt.Grunt;
 import org.apache.pig.tools.pigstats.PigStats;
 import org.apache.pig.tools.pigstats.ScriptState;
@@ -1190,6 +1190,29 @@ public class TestMacroExpansion {
         validateFailure(sb.toString(), expectedErr, "at");
     }
     
+    @Test // PIG-2081
+    public void lineNumberTest3() throws Throwable {
+        StringBuilder sb = new StringBuilder();
+        
+        sb.append("DEFINE my_macro (X,key) returns Y\n" +
+            "{\n" +   
+            "tmp1 = foreach  $X generate TOKENIZE((chararray)$key) as tokens;\n" +
+            "tmp2 = foreach tmp1 generate flatten(tokens);\n" +
+            "tmp3 = order tmp2 by $0;\n" + 
+            "$Y = distinct tmp3;\n" +
+            "};\n");
+        
+        sb.append("A3 = load 'sometext3' using TextLoader() as (row3);\n");
+        
+        sb.append("E3 = my_macro(A3,$0);\n");
+
+        
+        String expectedErr = 
+            "<file myscript.pig, line 9, column 17>  mismatched input '$0' expecting set null";
+        
+        validateDryrunFailure(sb.toString(), expectedErr, "<file");
+    }
+    
     @Test
     public void recursiveMacrosTest3() throws Exception {
         String macro1 = "define group_and_partition (A, group_key, reducers) returns B, D  {\n" +
@@ -2156,6 +2179,39 @@ public class TestMacroExpansion {
         }
     }
     
+    private void validateDryrunFailure(String piglatin, String expectedErr,
+            String keyword) throws Throwable {
+        String scriptFile = "myscript.pig";
+
+        try {
+            BufferedReader br = new BufferedReader(new StringReader(piglatin));
+            DryRunGruntParser parser = new DryRunGruntParser(br, scriptFile,
+                    new PigContext(ExecType.LOCAL, new Properties()));
+
+            PrintWriter w = new PrintWriter(new FileWriter(scriptFile));
+            w.print(piglatin);
+            w.close();
+
+            parser.parseStopOnError();
+
+            Assert.fail("Expected exception isn't thrown");
+        } catch (Exception e) {
+            String msg = e.getMessage();
+            int pos = msg.indexOf(keyword);
+            if (pos < 0) {
+                Throwable cause = e.getCause();
+                if (cause != null) {
+                    msg = cause.getMessage();
+                    pos = msg.indexOf(keyword);
+                }
+            }
+            Assert.assertEquals(expectedErr,
+                    msg.substring(pos, pos + expectedErr.length()));
+        } finally {
+            new File(scriptFile).delete();
+        }
+    }
+    
     private void validateFailure(String piglatin, String expectedErr) throws Throwable {
         validateFailure(piglatin, expectedErr, "Reason:");
     }