diff --git ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java index 86025ef..5e3722c 100644 --- ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java +++ ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java @@ -1529,6 +1529,13 @@ private VectorExpression getInExpression(List childExpr, Mode mode VectorExpression expr = null; + // Validate the IN items are only constants. + for (ExprNodeDesc inListChild : childrenForInList) { + if (!(inListChild instanceof ExprNodeConstantDesc)) { + throw new HiveException("Vectorizing IN expression only supported for constant values"); + } + } + // determine class Class cl = null; if (isIntFamily(colType)) { diff --git ql/src/test/queries/clientpositive/vector_non_constant_in_expr.q ql/src/test/queries/clientpositive/vector_non_constant_in_expr.q new file mode 100644 index 0000000..69142bf --- /dev/null +++ ql/src/test/queries/clientpositive/vector_non_constant_in_expr.q @@ -0,0 +1,4 @@ +SET hive.vectorized.execution.enabled=true; +set hive.fetch.task.conversion=none; + +explain SELECT * FROM alltypesorc WHERE cint in (ctinyint, cbigint); \ No newline at end of file diff --git ql/src/test/results/clientpositive/vector_non_constant_in_expr.q.out ql/src/test/results/clientpositive/vector_non_constant_in_expr.q.out new file mode 100644 index 0000000..8845cb2 --- /dev/null +++ ql/src/test/results/clientpositive/vector_non_constant_in_expr.q.out @@ -0,0 +1,36 @@ +PREHOOK: query: explain SELECT * FROM alltypesorc WHERE cint in (ctinyint, cbigint) +PREHOOK: type: QUERY +POSTHOOK: query: explain SELECT * FROM alltypesorc WHERE cint in (ctinyint, cbigint) +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: alltypesorc + Statistics: Num rows: 12288 Data size: 2641964 Basic stats: COMPLETE Column stats: NONE + Filter Operator + predicate: (cint) IN (ctinyint, cbigint) (type: boolean) + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + Select Operator + expressions: ctinyint (type: tinyint), csmallint (type: smallint), cint (type: int), cbigint (type: bigint), cfloat (type: float), cdouble (type: double), cstring1 (type: string), cstring2 (type: string), ctimestamp1 (type: timestamp), ctimestamp2 (type: timestamp), cboolean1 (type: boolean), cboolean2 (type: boolean) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11 + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + File Output Operator + compressed: false + Statistics: Num rows: 6144 Data size: 1320982 Basic stats: COMPLETE Column stats: NONE + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink +