diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java index 2c2a19a..120095a 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java @@ -33,18 +33,7 @@ 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 @@ boolean validateOperator(Operator op) { 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); diff --git ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java index 5234969..02031ea 100644 --- ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java +++ ql/src/test/org/apache/hadoop/hive/ql/optimizer/physical/TestVectorizer.java @@ -25,9 +25,7 @@ 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 void testValidateNestedExpressions() { 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 expr = new ArrayList(); + expr.add(new ExprNodeColumnDesc(Integer.class, "col1", "T", false)); + Map> keyMap = new HashMap>(); + 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 children1 = new ArrayList(2); + children1.add(new ExprNodeColumnDesc(Integer.class, "col2", "T1", false)); + children1.add(new ExprNodeColumnDesc(Integer.class, "col3", "T2", false)); + equalExprDesc.setChildren(children1); + List filterExpr = new ArrayList(); + filterExpr.add(equalExprDesc); + Map> filterMap = new HashMap>(); + 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)); + } }