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.SQLAlterTableStatement; 17 18 19 import hunt.collection; 20 21 import hunt.sql.ast.SQLExpr; 22 import hunt.sql.ast.SQLName; 23 import hunt.sql.ast.SQLObject; 24 import hunt.sql.ast.SQLStatementImpl; 25 import hunt.sql.ast.expr.SQLIdentifierExpr; 26 import hunt.sql.ast.expr.SQLPropertyExpr; 27 import hunt.sql.visitor.SQLASTVisitor; 28 import hunt.sql.ast.statement.SQLAlterTableItem; 29 import hunt.sql.ast.statement.SQLExprTableSource; 30 import hunt.sql.ast.statement.SQLDDLStatement; 31 import hunt.sql.ast.statement.SQLAlterStatement; 32 33 public class SQLAlterTableStatement : SQLStatementImpl , SQLDDLStatement, SQLAlterStatement { 34 35 private SQLExprTableSource tableSource; 36 private List!SQLAlterTableItem items; 37 38 // for mysql 39 private bool ignore = false; 40 41 private bool updateGlobalIndexes = false; 42 private bool invalidateGlobalIndexes = false; 43 44 private bool removePatiting = false; 45 private bool upgradePatiting = false; 46 private Map!(string, SQLObject) tableOptions; 47 48 // odps 49 private bool mergeSmallFiles = false; 50 51 public this(){ 52 items = new ArrayList!SQLAlterTableItem(); 53 tableOptions = new LinkedHashMap!(string, SQLObject)(); 54 } 55 56 public this(string dbType){ 57 items = new ArrayList!SQLAlterTableItem(); 58 tableOptions = new LinkedHashMap!(string, SQLObject)(); 59 super(dbType); 60 } 61 62 public bool isIgnore() { 63 return ignore; 64 } 65 66 public void setIgnore(bool ignore) { 67 this.ignore = ignore; 68 } 69 70 public bool isRemovePatiting() { 71 return removePatiting; 72 } 73 74 public void setRemovePatiting(bool removePatiting) { 75 this.removePatiting = removePatiting; 76 } 77 78 public bool isUpgradePatiting() { 79 return upgradePatiting; 80 } 81 82 public void setUpgradePatiting(bool upgradePatiting) { 83 this.upgradePatiting = upgradePatiting; 84 } 85 86 public bool isUpdateGlobalIndexes() { 87 return updateGlobalIndexes; 88 } 89 90 public void setUpdateGlobalIndexes(bool updateGlobalIndexes) { 91 this.updateGlobalIndexes = updateGlobalIndexes; 92 } 93 94 public bool isInvalidateGlobalIndexes() { 95 return invalidateGlobalIndexes; 96 } 97 98 public void setInvalidateGlobalIndexes(bool invalidateGlobalIndexes) { 99 this.invalidateGlobalIndexes = invalidateGlobalIndexes; 100 } 101 102 public bool isMergeSmallFiles() { 103 return mergeSmallFiles; 104 } 105 106 public void setMergeSmallFiles(bool mergeSmallFiles) { 107 this.mergeSmallFiles = mergeSmallFiles; 108 } 109 110 public List!SQLAlterTableItem getItems() { 111 return items; 112 } 113 114 public void addItem(SQLAlterTableItem item) { 115 if (item !is null) { 116 item.setParent(this); 117 } 118 this.items.add(item); 119 } 120 121 public SQLExprTableSource getTableSource() { 122 return tableSource; 123 } 124 125 public void setTableSource(SQLExprTableSource tableSource) { 126 this.tableSource = tableSource; 127 } 128 129 public void setTableSource(SQLExpr table) { 130 this.setTableSource(new SQLExprTableSource(table)); 131 } 132 133 public SQLName getName() { 134 if (getTableSource() is null) { 135 return null; 136 } 137 return cast(SQLName) getTableSource().getExpr(); 138 } 139 140 public long nameHashCode64() { 141 if (getTableSource() is null) { 142 return 0L; 143 } 144 return (cast(SQLName) getTableSource().getExpr()).nameHashCode64(); 145 } 146 147 public void setName(SQLName name) { 148 this.setTableSource(new SQLExprTableSource(name)); 149 } 150 151 public Map!(string, SQLObject) getTableOptions() { 152 return tableOptions; 153 } 154 155 override protected void accept0(SQLASTVisitor visitor) { 156 if (visitor.visit(this)) { 157 acceptChild(visitor, getTableSource()); 158 acceptChild!SQLAlterTableItem(visitor, getItems()); 159 } 160 visitor.endVisit(this); 161 } 162 163 override 164 public List!SQLObject getChildren() { 165 List!SQLObject children = new ArrayList!SQLObject(); 166 if (tableSource !is null) { 167 children.add(tableSource); 168 } 169 children.addAll(cast(List!SQLObject)(this.items)); 170 return children; 171 } 172 173 public string getTableName() { 174 if (tableSource is null) { 175 return null; 176 } 177 SQLExpr expr = (cast(SQLExprTableSource) tableSource).getExpr(); 178 if ( cast(SQLIdentifierExpr)expr !is null) { 179 return (cast(SQLIdentifierExpr) expr).getName(); 180 } else if ( cast(SQLPropertyExpr)expr !is null) { 181 return (cast(SQLPropertyExpr) expr).getName(); 182 } 183 184 return null; 185 } 186 187 public string getSchema() { 188 SQLName name = getName(); 189 if (name is null) { 190 return null; 191 } 192 193 if ( cast(SQLPropertyExpr)name !is null) { 194 return (cast(SQLPropertyExpr) name).getOwnernName(); 195 } 196 197 return null; 198 } 199 }