Java Code Examples for org.apache.calcite.rex.RexBuilder#deriveReturnType()
The following examples show how to use
org.apache.calcite.rex.RexBuilder#deriveReturnType() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: StandardConvertletTable.java From Bats with Apache License 2.0 | 6 votes |
/** Converts a {@link SqlCall} to a {@link RexCall} with a perhaps different * operator. */ private RexNode convertCall( SqlRexContext cx, SqlCall call, SqlOperator op) { final List<SqlNode> operands = call.getOperandList(); final RexBuilder rexBuilder = cx.getRexBuilder(); final SqlOperandTypeChecker.Consistency consistency = op.getOperandTypeChecker() == null ? SqlOperandTypeChecker.Consistency.NONE : op.getOperandTypeChecker().getConsistency(); final List<RexNode> exprs = convertExpressionList(cx, operands, consistency); RelDataType type = rexBuilder.deriveReturnType(op, exprs); return rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op)); }
Example 2
Source File: StandardConvertletTable.java From Bats with Apache License 2.0 | 6 votes |
/** * Converts a ROW. * * <p>Called automatically via reflection. */ public RexNode convertRow( SqlRexContext cx, SqlRowOperator op, SqlCall call) { if (cx.getValidator().getValidatedNodeType(call).getSqlTypeName() != SqlTypeName.COLUMN_LIST) { return convertCall(cx, call); } final RexBuilder rexBuilder = cx.getRexBuilder(); final List<RexNode> columns = new ArrayList<>(); for (SqlNode operand : call.getOperandList()) { columns.add( rexBuilder.makeLiteral( ((SqlIdentifier) operand).getSimple())); } final RelDataType type = rexBuilder.deriveReturnType(SqlStdOperatorTable.COLUMN_LIST, columns); return rexBuilder.makeCall(type, SqlStdOperatorTable.COLUMN_LIST, columns); }
Example 3
Source File: ConvertletTable.java From dremio-oss with Apache License 2.0 | 6 votes |
/** Converts a {@link SqlCall} to a {@link RexCall} with a perhaps different * operator. */ private RexNode convertCall( SqlRexContext cx, SqlCall call, SqlOperator op) { final List<SqlNode> operands = call.getOperandList(); final RexBuilder rexBuilder = cx.getRexBuilder(); final SqlOperandTypeChecker.Consistency consistency = op.getOperandTypeChecker() == null ? SqlOperandTypeChecker.Consistency.NONE : op.getOperandTypeChecker().getConsistency(); final List<RexNode> exprs = convertExpressionList(cx, operands, consistency); RelDataType type = rexBuilder.deriveReturnType(op, exprs); return rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op)); }
Example 4
Source File: StandardConvertletTable.java From calcite with Apache License 2.0 | 6 votes |
/** * Converts a ROW. * * <p>Called automatically via reflection. */ public RexNode convertRow( SqlRexContext cx, SqlRowOperator op, SqlCall call) { if (cx.getValidator().getValidatedNodeType(call).getSqlTypeName() != SqlTypeName.COLUMN_LIST) { return convertCall(cx, call); } final RexBuilder rexBuilder = cx.getRexBuilder(); final List<RexNode> columns = new ArrayList<>(); for (SqlNode operand : call.getOperandList()) { columns.add( rexBuilder.makeLiteral( ((SqlIdentifier) operand).getSimple())); } final RelDataType type = rexBuilder.deriveReturnType(SqlStdOperatorTable.COLUMN_LIST, columns); return rexBuilder.makeCall(type, SqlStdOperatorTable.COLUMN_LIST, columns); }
Example 5
Source File: StandardConvertletTable.java From Bats with Apache License 2.0 | 5 votes |
private static RexNode makeConstructorCall( SqlRexContext cx, SqlFunction constructor, List<RexNode> exprs) { final RexBuilder rexBuilder = cx.getRexBuilder(); RelDataType type = rexBuilder.deriveReturnType(constructor, exprs); int n = type.getFieldCount(); ImmutableList.Builder<RexNode> initializationExprs = ImmutableList.builder(); final InitializerContext initializerContext = new InitializerContext() { public RexBuilder getRexBuilder() { return rexBuilder; } public RexNode convertExpression(SqlNode e) { throw new UnsupportedOperationException(); } }; for (int i = 0; i < n; ++i) { initializationExprs.add( cx.getInitializerExpressionFactory().newAttributeInitializer( type, constructor, i, exprs, initializerContext)); } List<RexNode> defaultCasts = RexUtil.generateCastExpressions( rexBuilder, type, initializationExprs.build()); return rexBuilder.makeNewInvocation(type, defaultCasts); }
Example 6
Source File: StandardConvertletTable.java From calcite with Apache License 2.0 | 5 votes |
private static RexNode makeConstructorCall( SqlRexContext cx, SqlFunction constructor, List<RexNode> exprs) { final RexBuilder rexBuilder = cx.getRexBuilder(); RelDataType type = rexBuilder.deriveReturnType(constructor, exprs); int n = type.getFieldCount(); ImmutableList.Builder<RexNode> initializationExprs = ImmutableList.builder(); final InitializerContext initializerContext = new InitializerContext() { public RexBuilder getRexBuilder() { return rexBuilder; } public SqlNode validateExpression(RelDataType rowType, SqlNode expr) { throw new UnsupportedOperationException(); } public RexNode convertExpression(SqlNode e) { throw new UnsupportedOperationException(); } }; for (int i = 0; i < n; ++i) { initializationExprs.add( cx.getInitializerExpressionFactory().newAttributeInitializer( type, constructor, i, exprs, initializerContext)); } List<RexNode> defaultCasts = RexUtil.generateCastExpressions( rexBuilder, type, initializationExprs.build()); return rexBuilder.makeNewInvocation(type, defaultCasts); }
Example 7
Source File: StandardConvertletTable.java From calcite with Apache License 2.0 | 5 votes |
/** Converts a {@link SqlCall} to a {@link RexCall} with a perhaps different * operator. */ private RexNode convertCall( SqlRexContext cx, SqlOperator op, List<SqlNode> operands) { final RexBuilder rexBuilder = cx.getRexBuilder(); final SqlOperandTypeChecker.Consistency consistency = op.getOperandTypeChecker() == null ? SqlOperandTypeChecker.Consistency.NONE : op.getOperandTypeChecker().getConsistency(); final List<RexNode> exprs = convertExpressionList(cx, operands, consistency); RelDataType type = rexBuilder.deriveReturnType(op, exprs); return rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op)); }
Example 8
Source File: RelBuilder.java From Bats with Apache License 2.0 | 4 votes |
/** Creates a call to a scalar operator. */ private RexNode call(SqlOperator operator, List<RexNode> operandList) { final RexBuilder builder = cluster.getRexBuilder(); final RelDataType type = builder.deriveReturnType(operator, operandList); return builder.makeCall(type, operator, operandList); }
Example 9
Source File: EqualityConvertlet.java From dremio-oss with Apache License 2.0 | 4 votes |
private static RexNode convertEquality(SqlRexContext cx, SqlCall call) { final List<SqlNode> operands = call.getOperandList(); final RexBuilder rexBuilder = cx.getRexBuilder(); final List<RexNode> exprs = convertExpressionList(cx, operands); SqlOperator op = call.getOperator(); RelDataType type = rexBuilder.deriveReturnType(op, exprs); RexCall convertedCall = (RexCall) rexBuilder.makeCall(type, op, RexUtil.flatten(exprs, op)); // The following is copied from Calcite's StdConvertletTable.convertEqualsOrNotEquals() final RexNode op0 = convertedCall.getOperands().get(0); final RexNode op1 = convertedCall.getOperands().get(1); final RexNode booleanOp; final RexNode integerOp; if (op0.getType().getSqlTypeName() == SqlTypeName.BOOLEAN && SqlTypeName.INT_TYPES.contains(op1.getType().getSqlTypeName())) { booleanOp = op0; integerOp = op1; } else if (SqlTypeName.INT_TYPES.contains(op0.getType().getSqlTypeName()) && op1.getType().getSqlTypeName() == SqlTypeName.BOOLEAN) { booleanOp = op1; integerOp = op0; } else { return convertedCall; } SqlOperator newOp = (op.getKind() == SqlKind.EQUALS || op.getKind() == SqlKind.NOT_EQUALS) ? SqlStdOperatorTable.EQUALS : SqlStdOperatorTable.IS_NOT_DISTINCT_FROM; return rexBuilder.makeCall(call.getOperator(), booleanOp, rexBuilder.makeCall( SqlStdOperatorTable.CASE, rexBuilder.makeCall( newOp, integerOp, rexBuilder.makeZeroLiteral(integerOp.getType())), rexBuilder.makeLiteral(false), rexBuilder.makeLiteral(true))); }
Example 10
Source File: RelBuilder.java From calcite with Apache License 2.0 | 4 votes |
/** Creates a call to a scalar operator. */ private @Nonnull RexNode call(SqlOperator operator, List<RexNode> operandList) { final RexBuilder builder = cluster.getRexBuilder(); final RelDataType type = builder.deriveReturnType(operator, operandList); return builder.makeCall(type, operator, operandList); }