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/04/04 00:43:03 UTC
svn commit: r1464226 - in /pig/trunk: CHANGES.txt
src/org/apache/pig/parser/PigMacro.java
test/org/apache/pig/test/TestMacroExpansion.java
Author: daijy
Date: Wed Apr 3 22:43:02 2013
New Revision: 1464226
URL: http://svn.apache.org/r1464226
Log:
PIG-2247: Pig parser does not detect multiple arguments with the same name passed to macro
Modified:
pig/trunk/CHANGES.txt
pig/trunk/src/org/apache/pig/parser/PigMacro.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=1464226&r1=1464225&r2=1464226&view=diff
==============================================================================
--- pig/trunk/CHANGES.txt (original)
+++ pig/trunk/CHANGES.txt Wed Apr 3 22:43:02 2013
@@ -151,6 +151,8 @@ PIG-3013: BinInterSedes improve chararra
BUG FIXES
+PIG-2247: Pig parser does not detect multiple arguments with the same name passed to macro (dreambird via daijy)
+
PIG-3264: mvn signanddeploy target broken for pigunit, pigsmoke and piggybank (billgraham)
PIG-3262: Pig contrib 0.11 doesn't compile on certain rpm systems (mgrover via cheolsoo)
Modified: pig/trunk/src/org/apache/pig/parser/PigMacro.java
URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/parser/PigMacro.java?rev=1464226&r1=1464225&r2=1464226&view=diff
==============================================================================
--- pig/trunk/src/org/apache/pig/parser/PigMacro.java (original)
+++ pig/trunk/src/org/apache/pig/parser/PigMacro.java Wed Apr 3 22:43:02 2013
@@ -39,6 +39,8 @@ import org.apache.commons.logging.LogFac
import org.apache.pig.parser.PigParserNode.InvocationPoint;
import org.apache.pig.tools.parameters.ParameterSubstitutionPreprocessor;
+import com.google.common.collect.ImmutableSet;
+
class PigMacro {
private static final Log LOG = LogFactory.getLog(PigMacro.class);
@@ -135,7 +137,18 @@ class PigMacro {
+ ((outputs == null) ? 0 : outputs.length));
throw new ParserException(msg);
}
-
+
+ int distinct = ImmutableSet.copyOf(inputs).asList().size();
+ if (distinct != inputs.length) {
+ String msg = getErrorMessage(file, line, "Cannot expand macro '"
+ + name + "'",
+ " Duplicated arguments names are passed in macro:"
+ + " number of arguments: " + inputs.length
+ + " number of distinct arguments: "
+ + distinct);
+ throw new ParserException(msg);
+ }
+
String[] args = new String[params.size()];
for (int i=0; i<params.size(); i++) {
if (inputs[i].startsWith("$"))
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=1464226&r1=1464225&r2=1464226&view=diff
==============================================================================
--- pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java (original)
+++ pig/trunk/test/org/apache/pig/test/TestMacroExpansion.java Wed Apr 3 22:43:02 2013
@@ -969,6 +969,25 @@ public class TestMacroExpansion {
validateFailure(macro + script, expectedErr);
}
+ //duplicate arguments passed in macro
+ @Test
+ public void negativeTest10() throws Throwable {
+ String macro = "define simple_macro(in_relation, min_gpa, min_gpa) returns c {\n" +
+ "b = filter $in_relation by age >= $min_gpa;\n" +
+ "$c = foreach b generate user, zip;\n" +
+ "};\n";
+
+ String script =
+ "alpha = load 'users' as (user, age, zip);\n" +
+ "gamma = simple_macro (alpha, age, age);\n" +
+ "store gamma into 'byuser';\n";
+
+ String expectedErr = "Reason: Duplicated arguments names are passed in macro:" +
+ " number of arguments: 3 number of distinct arguments: 2";
+
+ validateFailure(macro + script, expectedErr);
+ }
+
@Test // macro doesn't contain return alias
public void checkReturnAliasTest1() throws Throwable {
String macro = "define group_and_count_1 (A,C) returns B {\n" +