diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java index 39ff591..36a4f62 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/RexNodeConverter.java @@ -336,6 +336,12 @@ private RexNode convert(ExprNodeGenericFuncDesc func) throws SemanticException { } else if (HiveFloorDate.ALL_FUNCTIONS.contains(calciteOp)) { // If it is a floor operator, we need to rewrite it childRexNodeLst = rewriteFloorDateChildren(calciteOp, childRexNodeLst); + } else if (calciteOp.getKind() == SqlKind.IN && childRexNodeLst.size() == 2) { + // if it is a single item in an IN clause, transform A IN (B) to A = B + // from IN [A,B] => EQUALS [A,B] + calciteOp = + SqlFunctionConverter.getCalciteOperator("=", FunctionRegistry.getFunctionInfo("=") + .getGenericUDF(), argTypeBldr.build(), retType); } expr = cluster.getRexBuilder().makeCall(retType, calciteOp, childRexNodeLst); } else {