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}