protected RelDataType uniquifyFields(RelDataType rowType) { return validator.getTypeFactory().createStructType( RelOptUtil.getFieldTypeList(rowType), SqlValidatorUtil.uniquify(rowType.getFieldNames())); }
/** * 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 fail Whether to throw an {@link AssertionError} if an invalid node * is detected */ public RexChecker(final RelDataType inputRowType, boolean fail) { this(RelOptUtil.getFieldTypeList(inputRowType), fail); }
/** * 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 fail Whether to throw an {@link AssertionError} if an invalid node * is detected */ public RexChecker(final RelDataType inputRowType, boolean fail) { this(RelOptUtil.getFieldTypeList(inputRowType), fail); }
public RexNode getEquiCondition(final RelNode left, final RelNode right, 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(); } }, false); }
private RexNode createCondition( RexBuilder builder, RelNode left, List<Integer> leftKeys, RelNode right, List<Integer> rightKeys ) { final List<RelDataType> leftTypes = RelOptUtil.getFieldTypeList( left.getRowType() ); final List<RelDataType> rightTypes = RelOptUtil.getFieldTypeList( right.getRowType() ); final List<RexNode> exprs = new ArrayList<RexNode>(); for( Pair<Integer, Integer> pair : Pair.zip( leftKeys, rightKeys ) ) exprs.add( builder.makeCall( SqlStdOperatorTable.equalsOperator, builder.makeInputRef( leftTypes.get( pair.left ), pair.left ), builder.makeInputRef( rightTypes.get( pair.right ), pair.right + leftTypes.size() ) ) ); return RexUtil.andRexNodeList( builder, exprs ); } }
protected RelDataType uniquifyFields(RelDataType rowType) { final List<String> fieldNameList = new ArrayList<String>(rowType.getFieldNames()); SqlValidatorUtil.uniquify(fieldNameList); return validator.getTypeFactory().createStructType( RelOptUtil.getFieldTypeList(rowType), fieldNameList); }
public RelDataType getRowType(RelDataTypeFactory typeFactory) { final List<RelDataType> typeList = new ArrayList<RelDataType>(); final List<String> nameList = new ArrayList<String>(); final List<Integer> fieldCounts = new ArrayList<Integer>(); for (Table table : tables) { final RelDataType rowType = table.getRowType(typeFactory); typeList.addAll(RelOptUtil.getFieldTypeList(rowType)); nameList.addAll(rowType.getFieldNames()); 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, SqlValidatorUtil.uniquify(nameList)); }
protected RelDataType uniquifyFields(RelDataType rowType) { return validator.getTypeFactory().createStructType( RelOptUtil.getFieldTypeList(rowType), SqlValidatorUtil.uniquify(rowType.getFieldNames())); }
private static RexProgram renameInputs( RexProgram program, RexBuilder rexBuilder, List<String> names ) { final RelDataType inputRowType = program.getInputRowType(); if( inputRowType.getFieldNames().equals( names ) ) return program; final RexProgramBuilder builder = RexProgramBuilder.create( rexBuilder, rexBuilder.getTypeFactory().createStructType( Pair.zip( names, RelOptUtil.getFieldTypeList( inputRowType ) ) ), program.getExprList(), program.getProjectList(), program.getCondition(), program.getOutputRowType(), false ); return builder.getProgram(); }