/** Returns a context that always qualifies identifiers. Useful if the * Context deals with just one arm of a join, yet we wish to generate * a join condition that qualifies column names to disambiguate them. */ public Context qualifiedContext() { return aliasContext(aliases, true); }
private void collectAliases(ImmutableMap.Builder<String, RelDataType> builder, SqlNode node, Iterator<RelDataType> aliases) { if (node instanceof SqlJoin) { final SqlJoin join = (SqlJoin) node; collectAliases(builder, join.getLeft(), aliases); collectAliases(builder, join.getRight(), aliases); } else { final String alias = SqlValidatorUtil.getAlias(node, -1); assert alias != null; builder.put(alias, aliases.next()); } }
public Result result() { return SqlImplementor.this.result(select, clauses, rel, aliases); } }
Context joinContext = leftContext.implementor().joinContext(leftContext, rightContext); return joinContext.toSql(null, node); SqlNode sqlCondition = null; for (RexNode operand : operands) { SqlNode x = convertConditionToSqlNode(operand, leftContext, rightContext, leftFieldCount); if (sqlCondition == null) { case LESS_THAN: case LESS_THAN_OR_EQUAL: node = stripCastFromString(node); operands = ((RexCall) node).getOperands(); op = ((RexCall) node).getOperator(); && op0.getIndex() >= leftFieldCount) { return reverseOperatorDirection(op).createCall(POS, leftContext.field(op1.getIndex()), rightContext.field(op0.getIndex() - leftFieldCount)); leftContext.implementor().joinContext(leftContext, rightContext); return joinContext.toSql(null, node); case IS_NULL: leftContext.implementor().joinContext(leftContext, rightContext); return joinContext.toSql(null, node); default:
public Result setOpToSql(SqlSetOperator operator, RelNode rel) { SqlNode node = null; for (Ord<RelNode> input : Ord.zip(rel.getInputs())) { final Result result = visitChild(input.i, input.e); if (node == null) { node = result.asSelect(); } else { node = operator.createCall(POS, node, result.asSelect()); } } final List<Clause> clauses = Expressions.list(Clause.SET_OP); return result(node, clauses, rel, null); }
/** Converts a non-query node into a SELECT node. Set operators (UNION, * INTERSECT, EXCEPT) remain as is. */ public SqlSelect asSelect() { if (node instanceof SqlSelect) { return (SqlSelect) node; } if (!dialect.hasImplicitTableAlias()) { return wrapSelect(asFrom()); } return wrapSelect(node); }
subQuery = (RexSubQuery) rex; sqlSubQuery = visitChild(0, subQuery.rel).asQueryOrValues(); final List<RexNode> operands = subQuery.operands; SqlNode op0; case SCALAR_QUERY: subQuery = (RexSubQuery) rex; sqlSubQuery = visitChild(0, subQuery.rel).asQueryOrValues(); return subQuery.getOperator().createCall(POS, sqlSubQuery);
SqlNode sqlCondition = null; for (RexNode operand : operands) { SqlNode x = convertConditionToSqlNode(operand, leftContext, rightContext, leftFieldCount); if (sqlCondition == null) { case LESS_THAN: case LESS_THAN_OR_EQUAL: node = stripCastFromString(node); operands = ((RexCall) node).getOperands(); op = ((RexCall) node).getOperator(); && op0.getIndex() >= leftFieldCount) { return reverseOperatorDirection(op).createCall(POS, leftContext.field(op1.getIndex()), rightContext.field(op0.getIndex() - leftFieldCount)); leftContext.implementor().joinContext(leftContext, rightContext); return joinContext.toSql(null, node); case IS_NULL: leftContext.implementor().joinContext(leftContext, rightContext); return joinContext.toSql(null, node); default:
public Result setOpToSql(SqlSetOperator operator, RelNode rel) { SqlNode node = null; for (Ord<RelNode> input : Ord.zip(rel.getInputs())) { final Result result = visitChild(input.i, input.e); if (node == null) { node = result.asSelect(); } else { node = operator.createCall(POS, node, result.asSelect()); } } final List<Clause> clauses = Expressions.list(Clause.SET_OP); return result(node, clauses, rel, null); }
public SqlSelect subSelect() { return wrapSelect(asFrom()); }
subQuery = (RexSubQuery) rex; sqlSubQuery = implementor().visitChild(0, subQuery.rel).asQueryOrValues(); final List<RexNode> operands = subQuery.operands; SqlNode op0; subQuery = (RexSubQuery) rex; sqlSubQuery = implementor().visitChild(0, subQuery.rel).asQueryOrValues(); return subQuery.getOperator().createCall(POS, sqlSubQuery);
/** Creates a result based on a join. (Each join could contain one or more * relational expressions.) */ public Result result(SqlNode join, Result leftResult, Result rightResult) { final ImmutableMap.Builder<String, RelDataType> builder = ImmutableMap.builder(); collectAliases(builder, join, Iterables.concat(leftResult.aliases.values(), rightResult.aliases.values()).iterator()); return new Result(join, Expressions.list(Clause.FROM), null, null, builder.build()); }
/** Returns a context that always qualifies identifiers. Useful if the * Context deals with just one arm of a join, yet we wish to generate * a join condition that qualifies column names to disambiguate them. */ public Context qualifiedContext() { return aliasContext(aliases, true); }
/** Converts a non-query node into a SELECT node. Set operators (UNION, * INTERSECT, EXCEPT) remain as is. */ public SqlSelect asSelect() { if (node instanceof SqlSelect) { return (SqlSelect) node; } if (!dialect.hasImplicitTableAlias()) { return wrapSelect(asFrom()); } return wrapSelect(node); }
public Result result() { return SqlImplementor.this.result(select, clauses, rel, aliases); } }
/** Creates a result based on a join. (Each join could contain one or more * relational expressions.) */ public Result result(SqlNode join, Result leftResult, Result rightResult) { final ImmutableMap.Builder<String, RelDataType> builder = ImmutableMap.builder(); collectAliases(builder, join, Iterables.concat(leftResult.aliases.values(), rightResult.aliases.values()).iterator()); return new Result(join, Expressions.list(Clause.FROM), null, null, builder.build()); }
final Map<String, RelDataType> newAliases = ImmutableMap.of(neededAlias, rel.getInput(0).getRowType()); newContext = aliasContext(newAliases, qualified); } else { newContext = aliasContext(aliases, qualified);
public SqlSelect subSelect() { return wrapSelect(asFrom()); }
private void collectAliases(ImmutableMap.Builder<String, RelDataType> builder, SqlNode node, Iterator<RelDataType> aliases) { if (node instanceof SqlJoin) { final SqlJoin join = (SqlJoin) node; collectAliases(builder, join.getLeft(), aliases); collectAliases(builder, join.getRight(), aliases); } else { final String alias = SqlValidatorUtil.getAlias(node, -1); assert alias != null; builder.put(alias, aliases.next()); } }
final Map<String, RelDataType> newAliases = ImmutableMap.of(neededAlias, rel.getInput(0).getRowType()); newContext = aliasContext(newAliases, qualified); } else { newContext = aliasContext(aliases, qualified);