private RexNode visit(final RexNode call) { RexNode replacement = replacements.get(call.toString()); if (replacement == null) { return null; } if (replacement.getType().equals(call.getType())) { return replacement; } return rexBuilder.makeCast(call.getType(), replacement, true); } }
/** * Adds explicit casts if Calcite's type system could not resolve the CASE branches to a common type. * * Calcite is more stricter than hive w.r.t type conversions. * If a CASE has branches with string/int/boolean branch types; there is no common type. */ private List<RexNode> adjustCaseBranchTypes(List<RexNode> nodes, RelDataType retType) { List<RelDataType> branchTypes = new ArrayList<>(); for (int i = 0; i < nodes.size(); i++) { if (i % 2 == 1 || i == nodes.size() - 1) { branchTypes.add(nodes.get(i).getType()); } } RelDataType commonType = cluster.getTypeFactory().leastRestrictive(branchTypes); if (commonType != null) { // conversion is possible; not changes are neccessary return nodes; } List<RexNode> newNodes = new ArrayList<>(); for (int i = 0; i < nodes.size(); i++) { RexNode node = nodes.get(i); if (i % 2 == 1 || i == nodes.size() - 1) { newNodes.add(cluster.getRexBuilder().makeCast(retType, node)); } else { newNodes.add(node); } } return newNodes; }
private RexNode visit(final RexNode call) { RexNode replacement = replacements.get(call.toString()); if (replacement == null) { return null; } if (replacement.getType().equals(call.getType())) { return replacement; } return rexBuilder.makeCast(call.getType(), replacement, true); } }
/** Creates an expression that casts an expression to a given type. */ public RexNode cast(RexNode expr, SqlTypeName typeName) { final RelDataType type = cluster.getTypeFactory().createSqlType(typeName); return cluster.getRexBuilder().makeCast(type, expr); }
/** Creates an expression that casts an expression to a type with a given name * and precision or length. */ public RexNode cast(RexNode expr, SqlTypeName typeName, int precision) { final RelDataType type = cluster.getTypeFactory().createSqlType(typeName, precision); return cluster.getRexBuilder().makeCast(type, expr); }
/** Creates an expression that casts an expression to a type with a given * name, precision and scale. */ public RexNode cast(RexNode expr, SqlTypeName typeName, int precision, int scale) { final RelDataType type = cluster.getTypeFactory().createSqlType(typeName, precision, scale); return cluster.getRexBuilder().makeCast(type, expr); }
/** Creates an expression that casts an expression to a given type. */ public RexNode cast(RexNode expr, SqlTypeName typeName) { final RelDataType type = cluster.getTypeFactory().createSqlType(typeName); return cluster.getRexBuilder().makeCast(type, expr); }
/** Creates an expression that casts an expression to a type with a given name * and precision or length. */ public RexNode cast(RexNode expr, SqlTypeName typeName, int precision) { final RelDataType type = cluster.getTypeFactory().createSqlType(typeName, precision); return cluster.getRexBuilder().makeCast(type, expr); }
/** Creates an expression that casts an expression to a type with a given * name, precision and scale. */ public RexNode cast(RexNode expr, SqlTypeName typeName, int precision, int scale) { final RelDataType type = cluster.getTypeFactory().createSqlType(typeName, precision, scale); return cluster.getRexBuilder().makeCast(type, expr); }
private RexNode makeCast(SqlTypeName typeName, final RexNode child) { RelDataType sqlType = cluster.getTypeFactory().createSqlType(typeName); RelDataType nullableType = cluster.getTypeFactory().createTypeWithNullability(sqlType, true); return cluster.getRexBuilder().makeCast(nullableType, child); }
ImmutableList.of(rexBuilder.makeCast( cluster.getTypeFactory().createTypeWithNullability(projExprs.get(0).getType(), true), projExprs.get(0))),
newCasts.add(rexBuilder.makeInputRef(oldType, i)); } else { newCasts.add(rexBuilder.makeCast(oldType, rexBuilder.makeInputRef(newCall.getType(), i)));
RelOptUtil.createProject(aggregate, ImmutableList.of( rexBuilder.makeCast( cluster.getTypeFactory().createTypeWithNullability( projExprs.get(0).getType(),
/** * Create a cast for partition column. Partition column is output as "VARCHAR" in native parquet reader. Cast it * appropriate type according the partition type in HiveScan. */ private RexNode createPartitionColumnCast(final DrillScanRel hiveScanRel, final DrillScanRel nativeScanRel, final String outputColName, final String dirColName, final RexBuilder rb) { final RelDataType outputType = hiveScanRel.getRowType().getField(outputColName, false, false).getType(); final RelDataTypeField inputField = nativeScanRel.getRowType().getField(dirColName, false, false); final RexInputRef inputRef = rb.makeInputRef(rb.getTypeFactory().createSqlType(SqlTypeName.VARCHAR), inputField.getIndex()); if (outputType.getSqlTypeName() == SqlTypeName.CHAR) { return rb.makeCall(RTRIM, inputRef); } return rb.makeCast(outputType, inputRef); } }
return rexBuilder.makeCast(oldCall.getType(), coalesce);
final RexNode divideRef = rexBuilder.makeCall(SqlStdOperatorTable.DIVIDE, numeratorRef, denominatorRef); return rexBuilder.makeCast(oldCall.getType(), divideRef);