You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pig.apache.org by pr...@apache.org on 2009/09/23 19:50:35 UTC

svn commit: r818175 - in /hadoop/pig/trunk: src/org/apache/pig/backend/hadoop/executionengine/physicalLayer/expressionOperators/ test/org/apache/pig/test/

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());
+        }
+    }
 
 }