001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005
006/**
007 * The IF statement executes or skips a sequence of statements, depending on the value
008 * of a Boolean expression
009 */
010
011public class TIfStmt extends TCustomSqlStatement {
012    public TIfStmt(){
013        this(EDbVendor.dbvoracle);
014    }
015
016     public TIfStmt(EDbVendor dbvendor){
017        super(dbvendor);
018        sqlstatementtype = ESqlStatementType.sst_ifstmt;
019        }
020
021    void buildsql() {
022    }
023
024    void clear() {
025    }
026
027    String getasprettytext() {
028        return "";
029    }
030
031    void iterate(TVisitorAbs pvisitor) {
032    }
033
034    /**
035     * @return If and only if the value of this expression is TRUE,
036     * the statements following THEN execute
037     */
038    public TExpression getCondition() {
039        return condition;
040    }
041
042    private TExpression condition = null;
043    private TStatementListSqlNode thenStmts = null;
044    private TStatementListSqlNode elseStmts = null;
045    private TStatementListSqlNode elsifStmts = null;
046
047    /**
048     *
049     * @return elseif statement list, type of {@link TElsifStmt}.
050     */
051    public TStatementList getElseifStatements() {
052        if (elseifStatements == null){
053          elseifStatements = new  TStatementList();
054        }
055        return elseifStatements;
056    }
057
058    private TStatementList elseifStatements = null;
059
060    private TStatementList thenStatements = null;
061
062    /**
063     * 
064     * @return the statements after the THEN keyword
065     */
066    public TStatementList getThenStatements() {
067        if (thenStatements == null){
068          thenStatements = new  TStatementList();  
069        }
070        return thenStatements;
071    }
072
073    /**
074     * 
075     * @return   the statements after the ELSE keyword
076     */
077    public TStatementList getElseStatements() {
078        if (elseStatements == null){
079          elseStatements = new  TStatementList();  
080        }
081
082        return elseStatements;
083    }
084
085    private TStatementList elseStatements = null;
086
087
088    public void setElsifStmts(TStatementListSqlNode elsifStmts) {
089        this.elsifStmts = elsifStmts;
090    }
091
092
093    public void init(Object arg1,Object arg2,Object arg3)
094    {
095        condition = (TExpression)arg1;
096        thenStmts = (TStatementListSqlNode)arg2;
097        elseStmts = (TStatementListSqlNode)arg3;
098    }
099
100    private TElseIfSqlNodeList elseIfList = null;
101
102    public int doParseStatement(TCustomSqlStatement psql) {
103        super.doParseStatement(psql);
104
105        switch (dbvendor){
106            case dbvbigquery:
107            case dbvdb2:
108            case dbvhana:
109                TIfSqlNode ifSqlNode = (TIfSqlNode)rootNode;
110                this.condition = ifSqlNode.getCondition();
111                this.condition.doParse(this,ESqlClause.unknown);
112                if (ifSqlNode.getThenStmts() != null){
113                    ifSqlNode.getThenStmts().doParse(this,ESqlClause.unknown);
114                    for(int i=0;i<ifSqlNode.getThenStmts().size();i++){
115                        this.getThenStatements().add(ifSqlNode.getThenStmts().getStatementSqlNode(i).getStmt());
116                    }
117                }
118
119                if (ifSqlNode.getElseIfList() != null){
120                    ifSqlNode.getElseIfList().doParse(this,ESqlClause.unknown);
121                    this.elseIfList = ifSqlNode.getElseIfList();
122                }
123
124                if (ifSqlNode.getElsifStmts() != null){
125                    ifSqlNode.getElsifStmts().doParse(this,ESqlClause.unknown);
126                    for(int i=0;i<ifSqlNode.getElsifStmts().size();i++){
127                        this.getElseifStatements().add(ifSqlNode.getElsifStmts().getStatementSqlNode(i).getStmt());
128                    }
129                }
130
131                if (ifSqlNode.getElseStmts() != null){
132                    ifSqlNode.getElseStmts().doParse(this,ESqlClause.unknown);
133                    for(int i=0;i<ifSqlNode.getElseStmts().size();i++){
134                        this.getElseStatements().add(ifSqlNode.getElseStmts().getStatementSqlNode(i).getStmt());
135                    }
136                }
137                break;
138            default:
139                condition.doParse(this,ESqlClause.unknown);
140                if (thenStmts != null){
141                    thenStmts.doParse(this,ESqlClause.unknown);
142                    for(int i=0;i<thenStmts.size();i++){
143                        this.getThenStatements().add(thenStmts.getStatementSqlNode(i).getStmt());
144                    }
145                }
146
147                if (elsifStmts != null){
148                    elsifStmts.doParse(this,ESqlClause.unknown);
149                    for(int i=0;i<elsifStmts.size();i++){
150                        this.getElseifStatements().add(elsifStmts.getStatementSqlNode(i).getStmt());
151                    }
152                }
153
154                if (elseStmts != null){
155                    elseStmts.doParse(this,ESqlClause.unknown);
156                    for(int i=0;i<elseStmts.size();i++){
157                        this.getElseStatements().add(elseStmts.getStatementSqlNode(i).getStmt());
158                    }
159                }
160                break;
161        }
162
163
164
165        return 0;
166    }
167
168    public void accept(TParseTreeVisitor v){
169        v.preVisit(this);
170        v.postVisit(this);
171    }
172
173    public void acceptChildren(TParseTreeVisitor v){
174        v.preVisit(this);
175        condition.acceptChildren(v);
176        //if (thenStmts != null) thenStmts.acceptChildren(v);
177        getThenStatements().acceptChildren(v);
178        if (elseifStatements != null) elseifStatements.acceptChildren(v);
179        if (elseStatements != null) elseStatements.acceptChildren(v);
180        v.postVisit(this);
181    }
182
183    public void setCondition(TExpression condition) {
184        this.condition = condition;
185    }
186
187    public void setElseifStatements(TStatementList elseifStatements) {
188        this.elseifStatements = elseifStatements;
189    }
190
191    public void setThenStatements(TStatementList thenStatements) {
192        this.thenStatements = thenStatements;
193    }
194
195    public void setElseStatements(TStatementList elseStatements) {
196        this.elseStatements = elseStatements;
197    }
198}