1 /* 2 * Copyright 2015-2018 HuntLabs.cn 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 module hunt.sql.ast.statement.SQLIfStatement; 17 18 19 import hunt.collection; 20 21 import hunt.sql.ast.SQLExpr; 22 import hunt.sql.ast.SQLObjectImpl; 23 import hunt.sql.ast.SQLStatement; 24 import hunt.sql.ast.SQLStatementImpl; 25 import hunt.sql.visitor.SQLASTVisitor; 26 import hunt.sql.ast.SQLObject; 27 28 public class SQLIfStatement : SQLStatementImpl { 29 30 private SQLExpr condition; 31 private List!SQLStatement statements; 32 private List!ElseIf elseIfList; 33 private Else elseItem; 34 35 this() 36 { 37 statements = new ArrayList!SQLStatement(); 38 elseIfList = new ArrayList!ElseIf(); 39 } 40 41 override public SQLIfStatement clone() { 42 SQLIfStatement x = new SQLIfStatement(); 43 44 foreach (SQLStatement stmt ; statements) { 45 SQLStatement stmt2 = stmt.clone(); 46 stmt2.setParent(x); 47 x.statements.add(stmt2); 48 } 49 foreach (ElseIf o ; elseIfList) { 50 ElseIf o2 = o.clone(); 51 o2.setParent(x); 52 x.elseIfList.add(o2); 53 } 54 if (elseItem !is null) { 55 x.setElseItem(elseItem.clone()); 56 } 57 58 return x; 59 } 60 61 override 62 public void accept0(SQLASTVisitor visitor) { 63 if (visitor.visit(this)) { 64 acceptChild(visitor, condition); 65 acceptChild!SQLStatement(visitor, statements); 66 acceptChild!(SQLIfStatement.ElseIf)(visitor, elseIfList); 67 acceptChild(visitor, elseItem); 68 } 69 visitor.endVisit(this); 70 } 71 72 public SQLExpr getCondition() { 73 return condition; 74 } 75 76 public void setCondition(SQLExpr condition) { 77 if (condition !is null) { 78 condition.setParent(this); 79 } 80 this.condition = condition; 81 } 82 83 public List!SQLStatement getStatements() { 84 return statements; 85 } 86 87 public void addStatement(SQLStatement statement) { 88 if (statement !is null) { 89 statement.setParent(this); 90 } 91 this.statements.add(statement); 92 } 93 94 public List!ElseIf getElseIfList() { 95 return elseIfList; 96 } 97 98 public Else getElseItem() { 99 return elseItem; 100 } 101 102 public void setElseItem(Else elseItem) { 103 if (elseItem !is null) { 104 elseItem.setParent(this); 105 } 106 this.elseItem = elseItem; 107 } 108 109 public static class ElseIf : SQLObjectImpl { 110 111 private SQLExpr condition; 112 private List!SQLStatement statements; 113 this() 114 { 115 statements = new ArrayList!SQLStatement(); 116 } 117 118 override 119 public void accept0(SQLASTVisitor visitor) { 120 if (visitor.visit(this)) { 121 acceptChild(visitor, condition); 122 acceptChild!SQLStatement(visitor, statements); 123 } 124 visitor.endVisit(this); 125 } 126 127 public List!SQLStatement getStatements() { 128 return statements; 129 } 130 131 public void setStatements(List!SQLStatement statements) { 132 this.statements = statements; 133 } 134 135 public SQLExpr getCondition() { 136 return condition; 137 } 138 139 public void setCondition(SQLExpr condition) { 140 if (condition !is null) { 141 condition.setParent(this); 142 } 143 this.condition = condition; 144 } 145 146 override public ElseIf clone() { 147 ElseIf x = new ElseIf(); 148 149 if (condition !is null) { 150 x.setCondition(condition.clone()); 151 } 152 foreach (SQLStatement stmt ; statements) { 153 SQLStatement stmt2 = stmt.clone(); 154 stmt2.setParent(x); 155 x.statements.add(stmt2); 156 } 157 158 return x; 159 } 160 } 161 162 public static class Else : SQLObjectImpl { 163 164 private List!SQLStatement statements; 165 166 this() 167 { 168 statements = new ArrayList!SQLStatement(); 169 } 170 171 override 172 public void accept0(SQLASTVisitor visitor) { 173 if (visitor.visit(this)) { 174 acceptChild!SQLStatement(visitor, statements); 175 } 176 visitor.endVisit(this); 177 } 178 179 public List!SQLStatement getStatements() { 180 return statements; 181 } 182 183 public void setStatements(List!SQLStatement statements) { 184 this.statements = statements; 185 } 186 187 override public Else clone() { 188 Else x = new Else(); 189 foreach (SQLStatement stmt ; statements) { 190 SQLStatement stmt2 = stmt.clone(); 191 stmt2.setParent(x); 192 x.statements.add(stmt2); 193 } 194 return x; 195 } 196 } 197 }