1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation; 2 3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 4 import com.daffodilwoods.daffodildb.server.serversystem.*; 5 import com.daffodilwoods.daffodildb.server.sql99.*; 6 import com.daffodilwoods.daffodildb.server.sql99.common.*; 7 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 8 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 10 import com.daffodilwoods.daffodildb.server.sql99.dql.tableexpression.fromclause.*; 11 import com.daffodilwoods.daffodildb.server.sql99.token.*; 12 import com.daffodilwoods.daffodildb.utils.parser.*; 13 import com.daffodilwoods.database.general.*; 14 import com.daffodilwoods.database.resource.*; 15 16 public class droptablestatement implements SQLschemamanipulationstatement { 17 public dropbehavior _Optdropbehavior0; 18 public tablename _tablename1; 19 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 20 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223; 21 22 47 public Object run(Object object) throws DException { 48 _ServerSession currentSession = (_ServerSession) object; 49 TableDescriptor tableDescriptor = new TableDescriptor(); 50 setTableName(tableDescriptor, currentSession); 51 ensureIsNotView(tableDescriptor); 52 String schemaOwner = GeneralUtility.getSchemaOwner(tableDescriptor. 53 table_catalog, tableDescriptor.table_schema, currentSession); 54 GeneralUtility.validateUserRights(schemaOwner, currentSession); 55 String dropBehavior = _Optdropbehavior0 == null ? SqlKeywords.RESTRICT : 56 (String ) _Optdropbehavior0.run(null); 57 dropTable(tableDescriptor, currentSession, dropBehavior, schemaOwner); 58 59 61 refreshServerSystem(currentSession, tableDescriptor.getQualifiedTableName()); 62 return null; 63 } 64 65 public void refreshServerSystem(_ServerSession currentSession, 66 QualifiedIdentifier tableName) throws 67 DException { 68 _ServerSession systemSession = currentSession.getSystemServerSession(); 69 systemSession.refreshTriggers(tableName); 70 systemSession.deleteTable(tableName, true); 71 dropIndexes(tableName, currentSession); 72 if (currentSession.getDbVersion() >= 3.0) 73 dropFullTextIndexes(tableName, currentSession); 74 systemSession.dropTable(tableName); 75 } 76 77 private void setTableName(TableDescriptor tableDescriptor, 78 _ServerSession currentSession) throws DException { 79 tableDescriptor.table_catalog = _tablename1.getCatalogName(); 80 tableDescriptor.table_schema = _tablename1.getSchemaName(); 81 tableDescriptor.table_name = _tablename1.getTableName(); 82 if (tableDescriptor.table_schema == null) { 83 tableDescriptor.table_schema = currentSession.getCurrentSchema(); 84 } 85 if (tableDescriptor.table_catalog == null) { 86 tableDescriptor.table_catalog = currentSession.getCurrentCatalog(); 87 } 88 try { 89 tableDescriptor.load(currentSession); 90 } catch (DException ex) { 91 throw new DException("DSE7009", 92 new Object [] {tableDescriptor.getQualifiedTableName(). 93 getIdentifier()}); 94 } 95 96 } 97 98 private void ensureIsNotView(TableDescriptor tableDescriptor) throws 99 DException { 100 if (tableDescriptor.table_type.equalsIgnoreCase(SqlKeywords.VIEW)) { 101 throw new DException("DSE930", new Object [] {tableDescriptor.getTableName()}); 102 } 103 } 104 105 113 114 public void dropTable(TableDescriptor tableDescriptor, 115 _ServerSession currentSession, 116 String dropBehavior, String schemaOwner 117 ) throws DException { 118 if (dropBehavior.equalsIgnoreCase(SqlKeywords.RESTRICT)) { 119 checkDependencies(tableDescriptor, currentSession); 120 } 121 revokePrivileges(tableDescriptor, currentSession, schemaOwner); 122 tableDescriptor.delete(currentSession); 123 } 124 125 private void checkDependencies(TableDescriptor tableDescriptor, 126 _ServerSession currentSession) throws DException { 127 checkTableDependency(tableDescriptor, currentSession); 128 checkViewsDependency(tableDescriptor, currentSession); 129 checkTriggerDependency(tableDescriptor, currentSession); 130 checkCheckConstraintDependency(tableDescriptor, currentSession); 131 if(currentSession.getDbVersion() >= 4.0){ 132 checkRoutineDependency(tableDescriptor, currentSession); 133 } 134 } 135 136 private void checkTriggerDependency(TableDescriptor tableDescriptor, 137 _ServerSession currentSession) throws 138 DException { 139 QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromTriggers( 140 currentSession); 141 if (ob != null) { 142 throw new DException("DSE8011", 143 new Object [] {ob.getIdentifier(), 144 tableDescriptor.getQualifiedTableName(). 145 getIdentifier()}); } 147 } 148 149 private void checkRoutineDependency(TableDescriptor tableDescriptor, 150 _ServerSession currentSession) throws 151 DException { 152 QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromRoutines( 153 currentSession); 154 if (ob != null) { 155 throw new DException("DSE8201", 156 new Object [] {ob.getIdentifier(), 157 tableDescriptor.getQualifiedTableName(). 158 getIdentifier()}); 159 } 160 } 161 162 private void checkCheckConstraintDependency(TableDescriptor tableDescriptor, 163 _ServerSession currentSession) throws 164 DException { 165 QualifiedIdentifier ob = tableDescriptor. 166 isTableReferencedFromCheckConstraints(currentSession); 167 if (ob != null) { 168 throw new DException("DSE8012", 169 new Object [] {ob.getIdentifier(), 170 tableDescriptor.getQualifiedTableName(). 171 getIdentifier()}); } 173 } 174 175 private void checkTableDependency(TableDescriptor tableDescriptor, 176 _ServerSession currentSession) throws 177 DException { 178 QualifiedIdentifier ob = tableDescriptor. 179 isTableReferencedFromReferentialConstraints(currentSession); 180 if (ob != null) { 181 throw new DException("DSE8013", 182 new Object [] {ob.getIdentifier(), 183 tableDescriptor.getQualifiedTableName(). 184 getIdentifier()}); } 186 } 187 188 private void checkViewsDependency(TableDescriptor tableDescriptor, 189 _ServerSession currentSession) throws 190 DException { 191 QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromViews( 192 currentSession); 193 if (ob != null) { 194 throw new DException("DSE8010", 195 new Object [] {ob.getIdentifier(), 196 tableDescriptor.getQualifiedTableName(). 197 getIdentifier()}); } 199 } 200 201 private void revokePrivileges(TableDescriptor tableDes, 202 _ServerSession currentSession, 203 String schemaOwner) throws DException { 204 String query = QueryMaker.getDropTableRevokeQuery(tableDes. 205 getQualifiedTableName(), schemaOwner); 206 revokeprivilegestatement _revokePrivilegesStatement = ( 207 revokeprivilegestatement) Parser.parseQuery(query); 208 _revokePrivilegesStatement.setIsSelfInitiated(false); 209 _revokePrivilegesStatement.run(currentSession.getSystemServerSession()); 210 } 211 212 private void dropIndexes(QualifiedIdentifier tableName, 213 _ServerSession currentSession) throws 214 DException { 215 DataDictionary dd = (DataDictionary) currentSession.getDataDictionary(); 216 _Executer executer = dd.getPreparedStatementGetter().getIndexInfoExecuter(); 217 _SelectQueryIterator iter = (_SelectQueryIterator) executer.executeForFresh(new Object [] { 218 tableName.catalog, tableName.schema, 219 tableName.name}); 220 if (!iter.first()) { 221 return; 222 } 223 do { 224 IndexDescriptor indexDescriptor = new IndexDescriptor(); 225 indexDescriptor.loadDataFromRecord(iter); 226 indexDescriptor.loadColumnDescriptors(currentSession); 227 dropindexstatement dropIndex = new dropindexstatement(); 228 dropIndex.dropIndex(indexDescriptor, currentSession); 229 } while (iter.next()); 230 } 231 232 private void dropFullTextIndexes(QualifiedIdentifier tableName, 233 _ServerSession currentSession) throws 234 DException { 235 DataDictionary dd = (DataDictionary) currentSession.getDataDictionary(); 236 _Executer executer = dd.getPreparedStatementGetter().getFullTextIndexExecuter(); 237 _SelectQueryIterator iter = (_SelectQueryIterator) executer.executeForFresh(new Object [] { 238 tableName.catalog, tableName.schema, 239 tableName.name}); 240 if (!iter.first()) 241 return; 242 do { 243 FullTextIndexDescriptor indexDescriptor = new FullTextIndexDescriptor(); 244 indexDescriptor.loadDataFromRecord(iter); 245 indexDescriptor.loadColumnDescriptors(currentSession); 246 dropfulltextindexstatement dropIndex = new dropfulltextindexstatement(); 247 dropIndex.dropIndex(indexDescriptor, currentSession); 248 } while (iter.next()); 249 } 250 251 public String toString() { 252 StringBuffer sb = new StringBuffer (); 253 sb.append(" "); 254 sb.append(_SRESERVEDWORD12065439223); 255 sb.append(" "); 256 sb.append(_SRESERVEDWORD12065439222); 257 sb.append(" "); 258 sb.append(_tablename1); 259 sb.append(" "); 260 if (_Optdropbehavior0 != null) { 261 sb.append(_Optdropbehavior0); 262 } 263 return sb.toString(); 264 } 265 266 public Object clone() throws CloneNotSupportedException { 267 return this; 268 } 269 } 270 | Popular Tags |