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:");
}