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


Reply via email to