001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TCaseExpression;
005import gudusoft.gsqlparser.nodes.TExpression;
006import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
007import gudusoft.gsqlparser.nodes.TWhenClauseItemList;
008
009/**
010 * The CASE statement chooses from a sequence of conditions, and execute a corresponding statement.
011 * @see TCaseExpression
012 */
013
014public class TCaseStmt extends TCustomSqlStatement {
015
016    public TCaseStmt(){
017        this(EDbVendor.dbvoracle);
018    }
019
020     public TCaseStmt(EDbVendor dbvendor){
021        super(dbvendor);
022        sqlstatementtype = ESqlStatementType.sst_casestmt;
023        }
024
025    void buildsql() {
026    }
027
028    void clear() {
029    }
030
031    String getasprettytext() {
032        return "";
033    }
034
035    void iterate(TVisitorAbs pvisitor) {
036    }
037
038
039    private TCaseExpression caseExpr = null;
040
041    public void init(Object arg1){
042      caseExpr = (TCaseExpression)arg1;  
043    }
044
045    /**
046     *
047     * @return check {@link TCaseExpression} for detailed. 
048     */
049    public TCaseExpression getCaseExpr() {
050        return caseExpr;
051    }
052    private TExpression expr = null;
053
054    public TExpression getExpr() {
055        return expr;
056    }
057
058    private TWhenClauseItemList whenClauseItemList = null;
059
060    public TWhenClauseItemList getWhenClauseItemList() {
061        return whenClauseItemList;
062    }
063
064    public TStatementList getDefaultStatementList() {
065        if (defaultStatementList == null){
066            defaultStatementList = new TStatementList();
067        }
068        return defaultStatementList;
069    }
070
071    private TStatementList defaultStatementList = null;
072
073    public int doParseStatement(TCustomSqlStatement psql) {
074        super.doParseStatement(psql);
075        switch (dbvendor){
076            case dbvteradata:
077                caseExpr = (TCaseExpression)rootNode;
078                caseExpr.doParse(this,ESqlClause.unknown);
079                break;
080            case dbvbigquery:
081                TCaseExpression caseNode = (TCaseExpression)rootNode;
082                this.expr = caseNode.getInput_expr();
083                if (this.expr != null){
084                    this.expr.doParse(this,ESqlClause.unknown);
085                }
086                this.whenClauseItemList = caseNode.getWhenClauseItemList();
087                this.whenClauseItemList.doParse(this,ESqlClause.unknown);
088
089                if (caseNode.getElse_statement_node_list() != null){
090                    caseNode.getElse_statement_node_list().doParse(this,ESqlClause.unknown);
091                    for (int i=0;i<caseNode.getElse_statement_node_list().size();i++){
092                        this.getDefaultStatementList().add(caseNode.getElse_statement_node_list().getStatementSqlNode(i).getStmt());
093                    }
094                }
095                break;
096            default:
097                caseExpr.doParse(this,ESqlClause.unknown);
098                break;
099        }
100        return 0;
101    }
102
103    public void accept(TParseTreeVisitor v){
104        v.preVisit(this);
105        v.postVisit(this);
106    }
107
108    public void acceptChildren(TParseTreeVisitor v){
109        v.preVisit(this);
110        v.postVisit(this);
111    }
112
113    public void setCaseExpr(TCaseExpression caseExpr) {
114        this.caseExpr = caseExpr;
115    }
116}