Author: hashutosh
Date: Wed Oct 30 07:58:00 2013
New Revision: 1536995

URL: http://svn.apache.org/r1536995
Log:
HIVE-5681 : Validation doesn't catch SMBMapJoin (Jitendra Nath Pandey via 
Ashutosh Chauhan)

Modified:
    
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
    
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java

Modified: 
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java?rev=1536995&r1=1536994&r2=1536995&view=diff
==============================================================================
--- 
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
 (original)
+++ 
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
 Wed Oct 30 07:58:00 2013
@@ -33,18 +33,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
-import org.apache.hadoop.hive.ql.exec.ColumnInfo;
-import org.apache.hadoop.hive.ql.exec.FileSinkOperator;
-import org.apache.hadoop.hive.ql.exec.FilterOperator;
-import org.apache.hadoop.hive.ql.exec.GroupByOperator;
-import org.apache.hadoop.hive.ql.exec.MapJoinOperator;
-import org.apache.hadoop.hive.ql.exec.Operator;
-import org.apache.hadoop.hive.ql.exec.OperatorFactory;
-import org.apache.hadoop.hive.ql.exec.ReduceSinkOperator;
-import org.apache.hadoop.hive.ql.exec.SelectOperator;
-import org.apache.hadoop.hive.ql.exec.TableScanOperator;
-import org.apache.hadoop.hive.ql.exec.Task;
-import org.apache.hadoop.hive.ql.exec.UDF;
+import org.apache.hadoop.hive.ql.exec.*;
 import org.apache.hadoop.hive.ql.exec.mr.MapRedTask;
 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
 import org.apache.hadoop.hive.ql.exec.vector.VectorizationContext;
@@ -438,7 +427,9 @@ public class Vectorizer implements Physi
     boolean ret = false;
     switch (op.getType()) {
       case MAPJOIN:
-        ret = validateMapJoinOperator((MapJoinOperator) op);
+        if (op instanceof MapJoinOperator) {
+          ret = validateMapJoinOperator((MapJoinOperator) op);
+        }
         break;
       case GROUPBY:
         ret = validateGroupByOperator((GroupByOperator) op);

Modified: 
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java?rev=1536995&r1=1536994&r2=1536995&view=diff
==============================================================================
--- 
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java
 (original)
+++ 
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java
 Wed Oct 30 07:58:00 2013
@@ -25,9 +25,7 @@ import java.util.Map;
 
 import junit.framework.Assert;
 
-import org.apache.hadoop.hive.ql.exec.Description;
-import org.apache.hadoop.hive.ql.exec.GroupByOperator;
-import org.apache.hadoop.hive.ql.exec.UDFArgumentException;
+import org.apache.hadoop.hive.ql.exec.*;
 import org.apache.hadoop.hive.ql.exec.vector.VectorExpressionDescriptor;
 import org.apache.hadoop.hive.ql.exec.vector.VectorGroupByOperator;
 import org.apache.hadoop.hive.ql.exec.vector.VectorizationContext;
@@ -148,4 +146,39 @@ public class TestVectorizer {
     Assert.assertFalse(v.validateExprNodeDesc(andExprDesc, 
VectorExpressionDescriptor.Mode.FILTER));
     Assert.assertFalse(v.validateExprNodeDesc(andExprDesc, 
VectorExpressionDescriptor.Mode.PROJECTION));
   }
+
+  @Test
+  public void testValidateMapJoinOperator() {
+    MapJoinOperator mop = new MapJoinOperator();
+    MapJoinDesc mjdesc = new MapJoinDesc();
+    mjdesc.setPosBigTable(0);
+    List<ExprNodeDesc> expr = new ArrayList<ExprNodeDesc>();
+    expr.add(new ExprNodeColumnDesc(Integer.class, "col1", "T", false));
+    Map<Byte, List<ExprNodeDesc>> keyMap = new HashMap<Byte, 
List<ExprNodeDesc>>();
+    keyMap.put((byte)0, expr);
+    mjdesc.setKeys(keyMap);
+    mjdesc.setExprs(keyMap);
+
+    //Set filter expression
+    GenericUDFOPEqual udf = new GenericUDFOPEqual();
+    ExprNodeGenericFuncDesc equalExprDesc = new ExprNodeGenericFuncDesc();
+    equalExprDesc.setTypeInfo(TypeInfoFactory.booleanTypeInfo);
+    equalExprDesc.setGenericUDF(udf);
+    List<ExprNodeDesc> children1 = new ArrayList<ExprNodeDesc>(2);
+    children1.add(new ExprNodeColumnDesc(Integer.class, "col2", "T1", false));
+    children1.add(new ExprNodeColumnDesc(Integer.class, "col3", "T2", false));
+    equalExprDesc.setChildren(children1);
+    List<ExprNodeDesc> filterExpr = new ArrayList<ExprNodeDesc>();
+    filterExpr.add(equalExprDesc);
+    Map<Byte, List<ExprNodeDesc>> filterMap = new HashMap<Byte, 
List<ExprNodeDesc>>();
+    filterMap.put((byte) 0, expr);
+    mjdesc.setFilters(filterMap);
+    mop.setConf(mjdesc);
+
+    Vectorizer vectorizer = new Vectorizer();
+
+    Assert.assertTrue(vectorizer.validateOperator(mop));
+    SMBMapJoinOperator smbmop = new SMBMapJoinOperator(mop);
+    Assert.assertFalse(vectorizer.validateOperator(smbmop));
+  }
 }


Reply via email to