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