/** * Alipay.com Inc. * Copyright (c) 2004-2012 All Rights Reserved. */ package com.alipay.zdal.parser.sql.dialect.oracle.ast.stmt; import java.util.ArrayList; import java.util.List; import com.alipay.zdal.parser.sql.ast.SQLCommentHint; import com.alipay.zdal.parser.sql.ast.SQLSetQuantifier; import com.alipay.zdal.parser.sql.ast.statement.SQLSelectItem; import com.alipay.zdal.parser.sql.ast.statement.SQLSelectQueryBlock; import com.alipay.zdal.parser.sql.dialect.oracle.ast.clause.ModelClause; import com.alipay.zdal.parser.sql.dialect.oracle.visitor.OracleASTVisitor; import com.alipay.zdal.parser.sql.visitor.SQLASTVisitor; /** * * @author ���� * @version $Id: OracleSelectQueryBlock.java, v 0.1 2012-11-17 ����3:49:58 Exp $ */ public class OracleSelectQueryBlock extends SQLSelectQueryBlock { private static final long serialVersionUID = 1L; private final List<SQLCommentHint> hints = new ArrayList<SQLCommentHint>(1); private OracleSelectHierachicalQueryClause hierachicalQueryClause; private ModelClause modelClause; public OracleSelectQueryBlock() { } public ModelClause getModelClause() { return modelClause; } public void setModelClause(ModelClause modelClause) { this.modelClause = modelClause; } public OracleSelectHierachicalQueryClause getHierachicalQueryClause() { return this.hierachicalQueryClause; } public void setHierachicalQueryClause(OracleSelectHierachicalQueryClause hierachicalQueryClause) { this.hierachicalQueryClause = hierachicalQueryClause; } public List<SQLCommentHint> getHints() { return this.hints; } @Override protected void accept0(SQLASTVisitor visitor) { if (visitor instanceof OracleASTVisitor) { accept0((OracleASTVisitor) visitor); return; } if (visitor.visit(this)) { acceptChild(visitor, this.selectList); acceptChild(visitor, this.into); acceptChild(visitor, this.from); acceptChild(visitor, this.where); acceptChild(visitor, this.groupBy); } visitor.endVisit(this); } protected void accept0(OracleASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, this.hints); acceptChild(visitor, this.selectList); acceptChild(visitor, this.into); acceptChild(visitor, this.from); acceptChild(visitor, this.where); acceptChild(visitor, this.hierachicalQueryClause); acceptChild(visitor, this.groupBy); acceptChild(visitor, this.modelClause); } visitor.endVisit(this); } public void output(StringBuffer buf) { buf.append("SELECT "); if (SQLSetQuantifier.ALL == this.distionOption) buf.append("ALL "); else if (SQLSetQuantifier.DISTINCT == this.distionOption) buf.append("DISTINCT "); else if (SQLSetQuantifier.UNIQUE == this.distionOption) { buf.append("UNIQUE "); } int i = 0; for (int size = this.selectList.size(); i < size; ++i) { if (i != 0) { buf.append(", "); } ((SQLSelectItem) this.selectList.get(i)).output(buf); } buf.append(" FROM "); if (this.from != null) { buf.append("DUAL"); } else { this.from.output(buf); } if (this.where != null) { buf.append(" WHERE "); this.where.output(buf); } if (this.hierachicalQueryClause != null) { buf.append(" "); this.hierachicalQueryClause.output(buf); } if (this.groupBy != null) { buf.append(" "); this.groupBy.output(buf); } } }