topProjExprs = RexUtil.fixUp(rexBuilder, topProjExprs, RelOptUtil.getFieldTypeList(fkInput.getRowType()));
/** * Creates a RexChecker with a given input row type. * * <p>If <code>fail</code> is true, the checker will throw an * {@link AssertionError} if an invalid node is found and assertions are * enabled. * * <p>Otherwise, each method returns whether its part of the tree is valid. * * @param inputRowType Input row type * @param context Context of the enclosing {@link RelNode}, or null * @param litmus What to do if an invalid node is detected */ public RexChecker(final RelDataType inputRowType, RelNode.Context context, Litmus litmus) { this(RelOptUtil.getFieldTypeList(inputRowType), context, litmus); }
/** * Creates a RexChecker with a given input row type. * * <p>If <code>fail</code> is true, the checker will throw an * {@link AssertionError} if an invalid node is found and assertions are * enabled. * * <p>Otherwise, each method returns whether its part of the tree is valid. * * @param inputRowType Input row type * @param context Context of the enclosing {@link RelNode}, or null * @param litmus What to do if an invalid node is detected */ public RexChecker(final RelDataType inputRowType, RelNode.Context context, Litmus litmus) { this(RelOptUtil.getFieldTypeList(inputRowType), context, litmus); }
@Deprecated // to be removed before 2.0 public static List<RexNode> fixUp(final RexBuilder rexBuilder, List<RexNode> nodes, final RelDataType rowType) { final List<RelDataType> typeList = RelOptUtil.getFieldTypeList(rowType); return fixUp(rexBuilder, nodes, typeList); }
@Deprecated // to be removed before 2.0 public static List<RexNode> fixUp(final RexBuilder rexBuilder, List<RexNode> nodes, final RelDataType rowType) { final List<RelDataType> typeList = RelOptUtil.getFieldTypeList(rowType); return fixUp(rexBuilder, nodes, typeList); }
/** Builds an equi-join condition from a set of left and right keys. */ public static @Nonnull RexNode createEquiJoinCondition( final RelNode left, final List<Integer> leftKeys, final RelNode right, final List<Integer> rightKeys, final RexBuilder rexBuilder) { final List<RelDataType> leftTypes = RelOptUtil.getFieldTypeList(left.getRowType()); final List<RelDataType> rightTypes = RelOptUtil.getFieldTypeList(right.getRowType()); return RexUtil.composeConjunction(rexBuilder, new AbstractList<RexNode>() { @Override public RexNode get(int index) { final int leftKey = leftKeys.get(index); final int rightKey = rightKeys.get(index); return rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, rexBuilder.makeInputRef(leftTypes.get(leftKey), leftKey), rexBuilder.makeInputRef(rightTypes.get(rightKey), leftTypes.size() + rightKey)); } @Override public int size() { return leftKeys.size(); } }); }
/** Builds an equi-join condition from a set of left and right keys. */ public static @Nonnull RexNode createEquiJoinCondition( final RelNode left, final List<Integer> leftKeys, final RelNode right, final List<Integer> rightKeys, final RexBuilder rexBuilder) { final List<RelDataType> leftTypes = RelOptUtil.getFieldTypeList(left.getRowType()); final List<RelDataType> rightTypes = RelOptUtil.getFieldTypeList(right.getRowType()); return RexUtil.composeConjunction(rexBuilder, new AbstractList<RexNode>() { @Override public RexNode get(int index) { final int leftKey = leftKeys.get(index); final int rightKey = rightKeys.get(index); return rexBuilder.makeCall(SqlStdOperatorTable.EQUALS, rexBuilder.makeInputRef(leftTypes.get(leftKey), leftKey), rexBuilder.makeInputRef(rightTypes.get(rightKey), leftTypes.size() + rightKey)); } @Override public int size() { return leftKeys.size(); } }); }
public RelDataType getRowType(RelDataTypeFactory typeFactory) { final List<RelDataType> typeList = new ArrayList<>(); final List<Integer> fieldCounts = new ArrayList<>(); for (Table table : tables) { final RelDataType rowType = table.getRowType(typeFactory); typeList.addAll(RelOptUtil.getFieldTypeList(rowType)); fieldCounts.add(rowType.getFieldCount()); } // Compute fieldCounts the first time this method is called. Safe to assume // that the field counts will be the same whichever type factory is used. if (this.fieldCounts == null) { this.fieldCounts = ImmutableIntList.copyOf(fieldCounts); } return typeFactory.createStructType(typeList, lattice.uniqueColumnNames); }
public RelDataType getRowType(RelDataTypeFactory typeFactory) { final List<RelDataType> typeList = new ArrayList<>(); final List<Integer> fieldCounts = new ArrayList<>(); for (Table table : tables) { final RelDataType rowType = table.getRowType(typeFactory); typeList.addAll(RelOptUtil.getFieldTypeList(rowType)); fieldCounts.add(rowType.getFieldCount()); } // Compute fieldCounts the first time this method is called. Safe to assume // that the field counts will be the same whichever type factory is used. if (this.fieldCounts == null) { this.fieldCounts = ImmutableIntList.copyOf(fieldCounts); } return typeFactory.createStructType(typeList, lattice.uniqueColumnNames()); }
/** Returns a rowType having all unique field name. * * @param rowType : input rowType * @param typeFactory : type factory used to create a new row type. * @return a rowType having all unique field name. */ public static RelDataType uniqifyFieldName(final RelDataType rowType, final RelDataTypeFactory typeFactory) { return typeFactory.createStructType(RelOptUtil.getFieldTypeList(rowType), SqlValidatorUtil.uniquify(rowType.getFieldNames(), SqlValidatorUtil.EXPR_SUGGESTER, true)); }
/** Returns a rowType having all unique field name. * * @param rowType : input rowType * @param typeFactory : type factory used to create a new row type. * @return */ public static RelDataType uniqifyFieldName(final RelDataType rowType, final RelDataTypeFactory typeFactory) { return typeFactory.createStructType(RelOptUtil.getFieldTypeList(rowType), SqlValidatorUtil.uniquify(rowType.getFieldNames())); }
.addAll(RelOptUtil.getFieldTypeList(leftRel.getRowType())) .addAll(RelOptUtil.getFieldTypeList(rightRel.getRowType())).build(); final RexNode joinFilter = RexUtil.composeConjunction(rexBuilder, RexUtil.fixUp(rexBuilder, joinFilters, fieldTypes), false); RexUtil.fixUp(rexBuilder, aboveFilters, RelOptUtil.getFieldTypeList(relBuilder.peek().getRowType())));
.addAll(RelOptUtil.getFieldTypeList(leftRel.getRowType())) .addAll(RelOptUtil.getFieldTypeList(rightRel.getRowType())).build(); final RexNode joinFilter = RexUtil.composeConjunction(rexBuilder, RelOptUtil.getFieldTypeList(relBuilder.peek().getRowType())));
.addAll(RelOptUtil.getFieldTypeList(leftRel.getRowType())) .addAll(RelOptUtil.getFieldTypeList(rightRel.getRowType())).build(); final RexNode joinFilter = RexUtil.composeConjunction(rexBuilder, RelOptUtil.getFieldTypeList(relBuilder.peek().getRowType())));
relBuilder.filter( RexUtil.fixUp(rexBuilder, aboveFilters, RelOptUtil.getFieldTypeList(relBuilder.peek().getRowType())));
relBuilder.filter( RexUtil.fixUp(rexBuilder, aboveFilters, RelOptUtil.getFieldTypeList(relBuilder.peek().getRowType())));
.addAll(RelOptUtil.getFieldTypeList(leftRel.getRowType())) .addAll(RelOptUtil.getFieldTypeList(rightRel.getRowType())).build(); final List<RexNode> leftJoinFilters = com.google.common.collect.ImmutableList.<RexNode>builder() .addAll(deterministicJoinFilters) RelOptUtil.getFieldTypeList(relBuilder.peek().getRowType())));