protected String sql(SqlDialect dialect) { SqlNode sqlNode = new RelToSqlConverter(dialect).visitChild(0, relNode).asStatement(); return Util.toLinux(sqlNode.toSqlString(dialect).getSql()).replaceAll("\n", " "); }
@Override public void addSelect(List<SqlNode> selectList, SqlNode node, RelDataType rowType) { String name = rowType.getFieldNames().get(selectList.size()); String alias = SqlValidatorUtil.getAlias(node, -1); final String lowerName = name.toLowerCase(Locale.ROOT); if (lowerName.startsWith("expr$")) { // Put it in ordinalMap ordinalMap.put(lowerName, node); } else if (alias == null || !alias.equals(name)) { node = as(node, name); } selectList.add(node); }
public Result visitChild(int i, RelNode e) { try { stack.push(new Frame(i, e)); return dispatch(e); } finally { stack.pop(); } }
/** @see #dispatch */ public Result visit(Project e) { Result x = visitChild(0, e.getInput()); parseCorrelTable(e, x); if (isStar(e.getChildExps(), e.getInput().getRowType(), e.getRowType())) { return x; } final Builder builder = x.builder(e, Clause.SELECT); final List<SqlNode> selectList = new ArrayList<>(); for (RexNode ref : e.getChildExps()) { SqlNode sqlExpr = builder.context.toSql(null, ref); addSelect(selectList, sqlExpr, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); return builder.result(); }
final Context context = aliasContext(pairs, false); visitChild(0, modify.getInput()).asQueryOrValues(); identifierList(modify.getInput().getRowType().getFieldNames())); return result(sqlInsert, ImmutableList.of(), modify, null); final Result input = visitChild(0, modify.getInput()); identifierList(modify.getUpdateColumnList()), exprList(context, modify.getSourceExpressionList()), ((SqlSelect) input.node).getWhere(), input.asSelect(), null); return result(sqlUpdate, input.clauses, modify, null); final Result input = visitChild(0, modify.getInput()); input.asSelect().getWhere(), input.asSelect(), null); return result(sqlDelete, input.clauses, modify, null);
/** @see #dispatch */ public Result visit(Join e) { final Result leftResult = visitChild(0, e.getLeft()).resetAlias(); final Result rightResult = visitChild(1, e.getRight()).resetAlias(); final Context leftContext = leftResult.qualifiedContext(); final Context rightContext = rightResult.qualifiedContext(); SqlNode sqlCondition = null; SqlLiteral condType = JoinConditionType.ON.symbol(POS); JoinType joinType = joinType(e.getJoinType()); if (e.getJoinType() == JoinRelType.INNER && e.getCondition().isAlwaysTrue()) { joinType = JoinType.COMMA; condType = JoinConditionType.NONE.symbol(POS); } else { sqlCondition = convertConditionToSqlNode(e.getCondition(), leftContext, rightContext, e.getLeft().getRowType().getFieldCount()); } SqlNode join = new SqlJoin(POS, leftResult.asFrom(), SqlLiteral.createBoolean(false, POS), joinType.symbol(POS), rightResult.asFrom(), condType, sqlCondition); return result(join, leftResult, rightResult); }
final Result x = visitChild(0, input); final Context context = matchRecognizeContext(x.qualifiedContext()); final String alias = entry.getKey(); final SqlNode sqlNode = context.toSql(null, entry.getValue()); measureList.add(as(sqlNode, alias)); final String alias = entry.getKey(); final SqlNode sqlNode = context.toSql(null, entry.getValue()); patternDefList.add(as(sqlNode, alias)); pattern, strictStart, strictEnd, patternDefList, measureList, after, subsetList, rowsPerMatch, partitionList, orderByList, interval); return result(matchRecognize, Expressions.list(Clause.FROM), e, null);
/** @see #dispatch */ public Result visit(Filter e) { final RelNode input = e.getInput(); Result x = visitChild(0, input); parseCorrelTable(e, x); if (input instanceof Aggregate) { final Builder builder; if (((Aggregate) input).getInput() instanceof Project) { builder = x.builder(e); builder.clauses.add(Clause.HAVING); } else { builder = x.builder(e, Clause.HAVING); } builder.setHaving(builder.context.toSql(null, e.getCondition())); return builder.result(); } else { final Builder builder = x.builder(e, Clause.WHERE); builder.setWhere(builder.context.toSql(null, e.getCondition())); return builder.result(); } }
final Result x = visitChild(0, e.getInput()); final Builder builder; if (e.getInput() instanceof Project) { for (int group : e.getGroupSet()) { final SqlNode field = builder.context.field(group); addSelect(selectList, field, e.getRowType()); groupByList.add(field); rewriteSingleValueExpr(aggCallSqlNode); addSelect(selectList, aggCallSqlNode, e.getRowType());
/** * Converts a RelBuilder into a sql string. * * @param sqlWriter The writer to be used when translating the {@link org.apache.calcite.rel.RelNode} to sql. * @param relToSql The converter from {@link org.apache.calcite.rel.RelNode} to * {@link org.apache.calcite.sql.SqlNode}. * @param query The RelNode representing the query. * * @return the sql string built by the RelBuilder. */ protected String writeSql(SqlPrettyWriter sqlWriter, RelToSqlConverter relToSql, RelNode query) { sqlWriter.reset(); SqlSelect select = relToSql.visitChild(0, query).asSelect(); return sqlWriter.format(select); }
final List<Clause> clauses = ImmutableList.of(Clause.SELECT); final Map<String, RelDataType> pairs = ImmutableMap.of(); final Context context = aliasContext(pairs, false); SqlNode query; final boolean rename = stack.size() <= 1 for (List<RexLiteral> tuple : e.getTuples()) { final List<SqlNode> values2 = new ArrayList<>(); final SqlNodeList exprList = exprList(context, tuple); for (Pair<SqlNode, String> value : Pair.zip(exprList, fieldNames)) { values2.add( selects.add(ANONYMOUS_ROW.createCall(exprList(context, tuple))); return result(query, clauses, e, null);
/** * Creates a new {@link RelToSqlConverter} using the dialect from * the datasource this was constructed with. * * @return a new converter. */ public RelToSqlConverter getNewRelToSqlConverter() { return new RelToSqlConverter(dialect); }
/** @see #dispatch */ public Result visit(Project e) { Result x = visitChild(0, e.getInput()); parseCorrelTable(e, x); if (isStar(e.getChildExps(), e.getInput().getRowType(), e.getRowType())) { return x; } final Builder builder = x.builder(e, Clause.SELECT); final List<SqlNode> selectList = new ArrayList<>(); for (RexNode ref : e.getChildExps()) { SqlNode sqlExpr = builder.context.toSql(null, ref); addSelect(selectList, sqlExpr, e.getRowType()); } builder.setSelect(new SqlNodeList(selectList, POS)); return builder.result(); }
final Context context = aliasContext(pairs, false); visitChild(0, modify.getInput()).asQueryOrValues(); identifierList(modify.getInput().getRowType().getFieldNames())); return result(sqlInsert, ImmutableList.of(), modify, null); final Result input = visitChild(0, modify.getInput()); identifierList(modify.getUpdateColumnList()), exprList(context, modify.getSourceExpressionList()), ((SqlSelect) input.node).getWhere(), input.asSelect(), null); return result(sqlUpdate, input.clauses, modify, null); final Result input = visitChild(0, modify.getInput()); input.asSelect().getWhere(), input.asSelect(), null); return result(sqlDelete, input.clauses, modify, null);
/** @see #dispatch */ public Result visit(Join e) { final Result leftResult = visitChild(0, e.getLeft()).resetAlias(); final Result rightResult = visitChild(1, e.getRight()).resetAlias(); final Context leftContext = leftResult.qualifiedContext(); final Context rightContext = rightResult.qualifiedContext(); SqlNode sqlCondition = null; SqlLiteral condType = JoinConditionType.ON.symbol(POS); JoinType joinType = joinType(e.getJoinType()); if (e.getJoinType() == JoinRelType.INNER && e.getCondition().isAlwaysTrue()) { joinType = JoinType.COMMA; condType = JoinConditionType.NONE.symbol(POS); } else { sqlCondition = convertConditionToSqlNode(e.getCondition(), leftContext, rightContext, e.getLeft().getRowType().getFieldCount()); } SqlNode join = new SqlJoin(POS, leftResult.asFrom(), SqlLiteral.createBoolean(false, POS), joinType.symbol(POS), rightResult.asFrom(), condType, sqlCondition); return result(join, leftResult, rightResult); }
final Result x = visitChild(0, input); final Context context = matchRecognizeContext(x.qualifiedContext()); final String alias = entry.getKey(); final SqlNode sqlNode = context.toSql(null, entry.getValue()); measureList.add(as(sqlNode, alias)); final String alias = entry.getKey(); final SqlNode sqlNode = context.toSql(null, entry.getValue()); patternDefList.add(as(sqlNode, alias)); pattern, strictStart, strictEnd, patternDefList, measureList, after, subsetList, rowsPerMatch, partitionList, orderByList, interval); return result(matchRecognize, Expressions.list(Clause.FROM), e, null);
/** @see #dispatch */ public Result visit(Filter e) { final RelNode input = e.getInput(); Result x = visitChild(0, input); parseCorrelTable(e, x); if (input instanceof Aggregate) { final Builder builder; if (((Aggregate) input).getInput() instanceof Project) { builder = x.builder(e); builder.clauses.add(Clause.HAVING); } else { builder = x.builder(e, Clause.HAVING); } builder.setHaving(builder.context.toSql(null, e.getCondition())); return builder.result(); } else { final Builder builder = x.builder(e, Clause.WHERE); builder.setWhere(builder.context.toSql(null, e.getCondition())); return builder.result(); } }
final Result x = visitChild(0, e.getInput()); final Builder builder; if (e.getInput() instanceof Project) { for (int group : e.getGroupSet()) { final SqlNode field = builder.context.field(group); addSelect(selectList, field, e.getRowType()); groupByList.add(field); rewriteSingleValueExpr(aggCallSqlNode); addSelect(selectList, aggCallSqlNode, e.getRowType());
/** @see #dispatch */ public Result visit(Sort e) { Result x = visitChild(0, e.getInput()); Builder builder = x.builder(e, Clause.ORDER_BY); List<SqlNode> orderByList = Expressions.list(); for (RelFieldCollation field : e.getCollation().getFieldCollations()) { builder.addOrderItem(orderByList, field); } if (!orderByList.isEmpty()) { builder.setOrderBy(new SqlNodeList(orderByList, POS)); x = builder.result(); } if (e.fetch != null) { builder = x.builder(e, Clause.FETCH); builder.setFetch(builder.context.toSql(null, e.fetch)); x = builder.result(); } if (e.offset != null) { builder = x.builder(e, Clause.OFFSET); builder.setOffset(builder.context.toSql(null, e.offset)); x = builder.result(); } return x; }
final List<Clause> clauses = ImmutableList.of(Clause.SELECT); final Map<String, RelDataType> pairs = ImmutableMap.of(); final Context context = aliasContext(pairs, false); SqlNode query; final boolean rename = stack.size() <= 1 for (List<RexLiteral> tuple : e.getTuples()) { final List<SqlNode> values2 = new ArrayList<>(); final SqlNodeList exprList = exprList(context, tuple); for (Pair<SqlNode, String> value : Pair.zip(exprList, fieldNames)) { values2.add( selects.add(ANONYMOUS_ROW.createCall(exprList(context, tuple))); return result(query, clauses, e, null);