/** * Generates a cast from one row type to another * * @param rexBuilder RexBuilder to use for constructing casts * @param lhsRowType target row type * @param rhsRowType source row type; fields must be 1-to-1 with lhsRowType, * in same order * @return cast expressions */ public static List<RexNode> generateCastExpressions( RexBuilder rexBuilder, RelDataType lhsRowType, RelDataType rhsRowType) { final List<RelDataTypeField> fieldList = rhsRowType.getFieldList(); int n = fieldList.size(); assert n == lhsRowType.getFieldCount() : "field count: lhs [" + lhsRowType + "] rhs [" + rhsRowType + "]"; List<RexNode> rhsExps = new ArrayList<RexNode>(); for (RelDataTypeField field : fieldList) { rhsExps.add( rexBuilder.makeInputRef(field.getType(), field.getIndex())); } return generateCastExpressions(rexBuilder, lhsRowType, rhsExps); }
/** * Generates a cast from one row type to another * * @param rexBuilder RexBuilder to use for constructing casts * @param lhsRowType target row type * @param rhsRowType source row type; fields must be 1-to-1 with lhsRowType, * in same order * * @return cast expressions */ public static List<RexNode> generateCastExpressions( RexBuilder rexBuilder, RelDataType lhsRowType, RelDataType rhsRowType) { final List<RelDataTypeField> fieldList = rhsRowType.getFieldList(); int n = fieldList.size(); assert n == lhsRowType.getFieldCount() : "field count: lhs [" + lhsRowType + "] rhs [" + rhsRowType + "]"; List<RexNode> rhsExps = new ArrayList<RexNode>(); for (RelDataTypeField field : fieldList) { rhsExps.add( rexBuilder.makeInputRef(field.getType(), field.getIndex())); } return generateCastExpressions(rexBuilder, lhsRowType, rhsExps); }
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(); for (int i = 0; i < n; ++i) { initializationExprs.add( cx.getDefaultValueFactory().newAttributeInitializer( type, constructor, i, exprs)); } List<RexNode> defaultCasts = RexUtil.generateCastExpressions( rexBuilder, type, initializationExprs.build()); return rexBuilder.makeNewInvocation(type, defaultCasts); }
private static RexNode makeConstructorCall( SqlRexContext cx, SqlFunction constructor, List<RexNode> exprs) { final RexBuilder rexBuilder = cx.getRexBuilder(); final RelDataTypeFactory typeFactory = cx.getTypeFactory(); RelDataType type = rexBuilder.deriveReturnType( constructor, typeFactory, exprs); int n = type.getFieldCount(); ImmutableList.Builder<RexNode> initializationExprs = ImmutableList.builder(); for (int i = 0; i < n; ++i) { initializationExprs.add( cx.getDefaultValueFactory().newAttributeInitializer( type, constructor, i, exprs)); } List<RexNode> defaultCasts = RexUtil.generateCastExpressions( rexBuilder, type, initializationExprs.build()); return rexBuilder.makeNewInvocation(type, defaultCasts); }
/** Equivalence to {@link org.eigenbase.relopt.RelOptUtil#createCastRel} * for {@link MutableRel}. */ public static MutableRel createCastRel(MutableRel rel, RelDataType castRowType, boolean rename) { RelDataType rowType = rel.getRowType(); if (RelOptUtil.areRowTypesEqual(rowType, castRowType, rename)) { // nothing to do return rel; } List<RexNode> castExps = RexUtil.generateCastExpressions(rel.cluster.getRexBuilder(), castRowType, rowType); final List<String> fieldNames = rename ? castRowType.getFieldNames() : rowType.getFieldNames(); return MutableProject.of(rel, castExps, fieldNames); } }
RexUtil.generateCastExpressions( rel.getCluster().getRexBuilder(), castRowType, rowType); if (rename) {
RexUtil.generateCastExpressions( rel.getCluster().getRexBuilder(), castRowType, rowType); if (rename) {