001package gudusoft.gsqlparser.stmt.mssql;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TIfSqlNode;
005import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
006import gudusoft.gsqlparser.nodes.TExpression;
007import gudusoft.gsqlparser.nodes.mssql.TMssqlCreateTriggerUpdateColumnList;
008
009/**
010 * This class represents if and while SQL statement of SQL Server.
011 */
012public class TMssqlIfElse extends TCustomSqlStatement {
013     public TMssqlIfElse (EDbVendor dbvendor){
014        super(dbvendor);
015        sqlstatementtype = ESqlStatementType.sstmssqlif ;
016        }
017
018    void buildsql() {
019    }
020
021    void clear() {
022    }
023
024    String getasprettytext() {
025        return "";
026    }
027
028    void iterate(TVisitorAbs pvisitor) {
029    }
030
031    private int stmtType = TBaseType.condition_statement_if;
032    private TExpression condition = null;
033    private TMssqlCreateTriggerUpdateColumnList updateColumnList = null;
034    private TCustomSqlStatement stmt = null;
035
036    public TCustomSqlStatement getElseStmt() {
037        return elseStmt;
038    }
039
040    public TCustomSqlStatement getStmt() {
041        return stmt;
042    }
043
044    private TCustomSqlStatement elseStmt = null;
045    
046
047    public TExpression getCondition() {
048        return condition;
049    }
050
051    public TMssqlCreateTriggerUpdateColumnList getUpdateColumnList() {
052        return updateColumnList;
053    }
054
055    /**
056     * if or while SQL statement this class represents for.
057     * @return
058     */
059    public int getStmtType() {
060        return stmtType;
061    }
062
063    public int doParseStatement(TCustomSqlStatement psql) {
064        if (rootNode == null) return -1;
065        TIfSqlNode ifSqlNode = (TIfSqlNode)rootNode;
066        super.doParseStatement(psql);
067        this.stmtType = ifSqlNode.getStmtType();
068        this.condition = ifSqlNode.getCondition();
069        if (this.condition != null){
070            this.condition.doParse(this,ESqlClause.unknown);
071        }
072        this.updateColumnList = ifSqlNode.getUpdateColumnList();
073        if (updateColumnList != null){
074            for(int i = 0 ;i<updateColumnList.size();i++){
075                if (psql.getAncestorStmt().sqlstatementtype == ESqlStatementType.sstcreatetrigger){
076                    psql.getAncestorStmt().tables.getTable(0).getLinkedColumns().addObjectName(updateColumnList.getCreateTriggerUpdateColumn(i).getColumnName());
077                    updateColumnList.getCreateTriggerUpdateColumn(i).getColumnName().setSourceTable(psql.getAncestorStmt().tables.getTable(0));
078                }
079                //psql.tables.getTable(0)
080            }
081        }
082
083        ifSqlNode.getStmtSqlNode().doParse(this,ESqlClause.unknown);
084        stmt = ifSqlNode.getStmtSqlNode().getStmt();
085        if (this.getEndToken() == null){
086            this.setEndToken(stmt.getEndToken());
087        }
088
089        if (ifSqlNode.getElseStmtSqlNode() != null){
090            ifSqlNode.getElseStmtSqlNode().doParse(this,ESqlClause.unknown);
091            elseStmt = ifSqlNode.getElseStmtSqlNode().getStmt();
092            if (this.getEndToken() == null){
093                this.setEndToken(elseStmt.getEndToken());
094            }
095        }
096        
097        return 0;
098    }
099
100    public void accept(TParseTreeVisitor v){
101        v.preVisit(this);
102        v.postVisit(this);
103    }
104
105    public void acceptChildren(TParseTreeVisitor v){
106        v.preVisit(this);
107        if (this.condition != null) condition.acceptChildren(v);
108        stmt.acceptChildren(v);
109        if (elseStmt != null) elseStmt.acceptChildren(v);
110        v.postVisit(this);
111    }
112
113    public void setStmtType(int stmtType) {
114        this.stmtType = stmtType;
115    }
116
117    public void setCondition(TExpression condition) {
118        this.condition = condition;
119    }
120
121    public void setUpdateColumnList(TMssqlCreateTriggerUpdateColumnList updateColumnList) {
122        this.updateColumnList = updateColumnList;
123    }
124
125    public void setStmt(TCustomSqlStatement stmt) {
126        this.stmt = stmt;
127    }
128
129    public void setElseStmt(TCustomSqlStatement elseStmt) {
130        this.elseStmt = elseStmt;
131    }
132}