Author: olga
Date: Thu Dec 17 00:50:05 2009
New Revision: 891499

URL: http://svn.apache.org/viewvc?rev=891499&view=rev
Log:
PIG-1075: Error in Cogroup when key fields types don't match (rding via olgan)

Modified:
    hadoop/pig/trunk/CHANGES.txt
    hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/LOCogroup.java
    hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalPlanBuilder.java

Modified: hadoop/pig/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/CHANGES.txt?rev=891499&r1=891498&r2=891499&view=diff
==============================================================================
--- hadoop/pig/trunk/CHANGES.txt (original)
+++ hadoop/pig/trunk/CHANGES.txt Thu Dec 17 00:50:05 2009
@@ -57,6 +57,8 @@
 
 BUG FIXES
 
+PIG-1075: Error in Cogroup when key fields types don't match (rding via olgan)
+
 PIG-973: type resolution inconsistency (rding via olgan)
 
 PIG-1135: skewed join partitioner returns negative partition index  (yinghe

Modified: hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/LOCogroup.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/LOCogroup.java?rev=891499&r1=891498&r2=891499&view=diff
==============================================================================
--- hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/LOCogroup.java 
(original)
+++ hadoop/pig/trunk/src/org/apache/pig/impl/logicalLayer/LOCogroup.java Thu 
Dec 17 00:50:05 2009
@@ -489,7 +489,15 @@
                 }
                         
                 Schema.FieldSchema groupFs = fsList.get(j);
+                byte dt = groupFs.type;
                 groupFs.type = DataType.mergeType(groupFs.type, innerType) ;
+                if (!DataType.isUsableType(groupFs.type)) {                    
+                    int errCode = 1110;
+                    String msg = "Cogroup column " + j + " has incompatible 
types: "
+                            + DataType.findTypeName(dt) + " versus "
+                            + DataType.findTypeName(innerType);
+                    throw new FrontendException(msg, errCode, 
PigException.INPUT, false, null);  
+                }
                 Schema.FieldSchema fs = eOp.getFieldSchema();
                 if(null != fs) {
                     groupFs.setParent(eOp.getFieldSchema().canonicalName, eOp);

Modified: hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalPlanBuilder.java
URL: 
http://svn.apache.org/viewvc/hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalPlanBuilder.java?rev=891499&r1=891498&r2=891499&view=diff
==============================================================================
--- hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalPlanBuilder.java 
(original)
+++ hadoop/pig/trunk/test/org/apache/pig/test/TestLogicalPlanBuilder.java Thu 
Dec 17 00:50:05 2009
@@ -2179,6 +2179,23 @@
         assertEquals("An exception was expected but did " +
                 "not occur", true, exceptionThrown);
     }
+    
+    @Test
+    public void testCogroupByIncompatibleSchemaFailure() {
+        boolean exceptionThrown = false;
+        try {
+            buildPlan(" a = load '1.txt' as (a0:int, a1:int);");
+            buildPlan(" b = load '2.txt' as (a0:int, a1:chararray); ");
+            buildPlan("c = cogroup a by (a0,a1), b by (a0,a1);");
+        } catch (AssertionFailedError e) {
+            assertTrue(e.getMessage().contains("Cogroup column"));
+            assertTrue(e.getMessage().contains("has incompatible types"));
+            exceptionThrown = true;
+        }
+        assertEquals("An exception was expected but did " +
+                "not occur", true, exceptionThrown);
+    }
+    
     private void printPlan(LogicalPlan lp) {
         LOPrinter graphPrinter = new LOPrinter(System.err, lp);
         System.err.println("Printing the logical plan");


Reply via email to