Author: pradeepkth
Date: Wed Sep 23 17:50:34 2009
New Revision: 818175
URL: http://svn.apache.org/viewvc?rev=818175&view=rev
Log:
PIG-513: PERFORMANCE: optimize some of the code in DefaultTuple - fixed
regression from earlier check in (pradeepkth)
Modified:
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POUserFunc.java
hadoop/pig/trunk/test/org/apache/pig/test/TestProject.java
Modified:
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java?rev=818175&r1=818174&r2=818175&view=diff
==============================================================================
---
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java
(original)
+++
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POProject.java
Wed Sep 23 17:50:34 2009
@@ -153,6 +153,13 @@
}
res.returnStatus = POStatus.STATUS_OK;
ret = null;
+ } catch (IndexOutOfBoundsException ie) {
+ if(pigLogger != null) {
+ pigLogger.warn(this,"Attempt to access field " +
+ "which was not found in the input",
PigWarning.ACCESSING_NON_EXISTENT_FIELD);
+ }
+ res.returnStatus = POStatus.STATUS_OK;
+ ret = null;
}
} else {
ArrayList<Object> objList = new
ArrayList<Object>(columns.size());
Modified:
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POUserFunc.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POUserFunc.java?rev=818175&r1=818174&r2=818175&view=diff
==============================================================================
---
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POUserFunc.java
(original)
+++
hadoop/pig/trunk/src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/POUserFunc.java
Wed Sep 23 17:50:34 2009
@@ -227,7 +227,12 @@
}
throw new ExecException(msg, errCode, PigException.BUG,
ioe);
- }
+ } catch (IndexOutOfBoundsException ie) {
+ int errCode = 2078;
+ String msg = "Caught error from UDF: " + funcSpec.getClassName() +
+ ", Out of bounds access [" + ie.getMessage() + "]";
+ throw new ExecException(msg, errCode, PigException.BUG, ie);
+ }
}
@Override
Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestProject.java
URL:
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestProject.java?rev=818175&r1=818174&r2=818175&view=diff
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/TestProject.java (original)
+++ hadoop/pig/trunk/test/org/apache/pig/test/TestProject.java Wed Sep 23
17:50:34 2009
@@ -24,6 +24,8 @@
import java.util.Random;
import java.util.ArrayList;
+import org.apache.pig.ExecType;
+import org.apache.pig.PigServer;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.data.DataBag;
import org.apache.pig.data.DataType;
@@ -277,5 +279,26 @@
assertEquals(POStatus.STATUS_OK, res.returnStatus);
assertEquals(t.get(9), res.result);
}
+
+ @Test
+ public void testMissingCols() throws Exception {
+ MiniCluster cluster = MiniCluster.buildCluster();
+ String input[] = { "hello\tworld", "good\tbye" };
+ Util.createInputFile(cluster, "input.txt", input);
+ String query = "a = load 'input.txt' as (s1:chararray, s2:chararray,
extra:chararray);" +
+ "b = foreach a generate s1, s2, extra;";
+
+ PigServer ps = new PigServer(ExecType.MAPREDUCE,
cluster.getProperties());
+ Util.registerMultiLineQuery(ps, query);
+ Iterator<Tuple> it = ps.openIterator("b");
+ Tuple[] expectedResults = new Tuple[] {
+ (Tuple) Util.getPigConstant("('hello', 'world', null)"),
+ (Tuple) Util.getPigConstant("('good', 'bye', null)")
+ };
+ int i = 0;
+ while(it.hasNext()) {
+ assertEquals(expectedResults[i++], it.next());
+ }
+ }
}