return new Schema(select, tblAlias);
}
private QueryBlockInfo convertSource(RelNode r) {
Schema s;
ASTNode ast;
if (r instanceof TableAccessRelBase) {
TableAccessRelBase f = (TableAccessRelBase) r;
s = new Schema(f);
ast = ASTBuilder.table(f);
} else if (r instanceof JoinRelBase) {
JoinRelBase join = (JoinRelBase) r;
QueryBlockInfo left = convertSource(join.getLeft());
QueryBlockInfo right = convertSource(join.getRight());
s = new Schema(left.schema, right.schema);
ASTNode cond = join.getCondition().accept(new RexVisitor(s));
boolean semiJoin = join instanceof SemiJoinRel;
ast = ASTBuilder.join(left.ast, right.ast, join.getJoinType(), cond, semiJoin);
if (semiJoin)
s = left.schema;
} else if (r instanceof UnionRelBase) {
RelNode leftInput = ((UnionRelBase) r).getInput(0);
RelNode rightInput = ((UnionRelBase) r).getInput(1);
ASTConverter leftConv = new ASTConverter(leftInput, this.derivedTableCount);
ASTConverter rightConv = new ASTConverter(rightInput, this.derivedTableCount);
ASTNode leftAST = leftConv.convert();
ASTNode rightAST = rightConv.convert();
ASTNode unionAST = getUnionAllAST(leftAST, rightAST);
String sqAlias = nextAlias();
ast = ASTBuilder.subQuery(unionAST, sqAlias);
s = new Schema((UnionRelBase) r, sqAlias);
} else {
ASTConverter src = new ASTConverter(r, this.derivedTableCount);
ASTNode srcAST = src.convert();
String sqAlias = nextAlias();
s = src.getRowSchema(sqAlias);
ast = ASTBuilder.subQuery(srcAST, sqAlias);
}
return new QueryBlockInfo(s, ast);