1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 6 import com.daffodilwoods.daffodildb.server.serversystem.*; 7 import com.daffodilwoods.daffodildb.server.sql99.common.*; 8 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 9 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*; 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 dropviewstatement implements SQLschemamanipulationstatement { 17 public dropbehavior _dropbehavior0; 18 public tablename _tablename1; 19 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 20 public SNONRESERVEDWORD136444255 _OptSNONRESERVEDWORD1364442553; 21 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439224; 22 23 47 public Object run(Object object) throws DException { 48 _ServerSession currentSession = ( (_ServerSession) object); 49 ViewDescriptor viewDescriptor = new ViewDescriptor(); 50 setViewName(currentSession, viewDescriptor); 51 if (viewDescriptor.table_name.equalsIgnoreCase("dual")) { 52 if (viewDescriptor.table_schema.equalsIgnoreCase("users")) { 53 if (viewDescriptor.table_catalog.equalsIgnoreCase("users")) { 54 throw new DException("DSE12", null); 55 } 56 } 57 } 58 checkForMaterialized(viewDescriptor); 59 String schemaOwner = GeneralUtility.getSchemaOwner(viewDescriptor. 60 table_catalog, viewDescriptor.table_schema, currentSession); 61 GeneralUtility.validateUserRights(schemaOwner, currentSession); 62 String dropBehavior = (String ) _dropbehavior0.run(null); 63 dropView(viewDescriptor, currentSession, dropBehavior, schemaOwner); 64 refreshServerSystem(currentSession, viewDescriptor); 65 return null; 66 } 67 68 public void refreshServerSystem(_ServerSession currentSession, 69 ViewDescriptor viewDescriptor) throws 70 DException { 71 currentSession.deleteTable(viewDescriptor.tableDescriptor. 72 getQualifiedTableName(), false); 73 refreshDataDictionary(currentSession, viewDescriptor); 74 } 75 76 private void refreshDataDictionary(_ServerSession currentSession, 77 ViewDescriptor viewDescriptor) throws 78 DException { 79 if (viewDescriptor.materialized_table_name != null) { 80 DataDictionary dd = (DataDictionary) currentSession.getDataDictionary(); 81 ArrayList tablesUsed = viewDescriptor.tablesUsed; 82 if (tablesUsed != null) { 83 QualifiedIdentifier materializedTable = new QualifiedIdentifier( 84 viewDescriptor.table_catalog, viewDescriptor.table_schema, 85 viewDescriptor.materialized_table_name); 86 for (int i = 0; i < tablesUsed.size(); i++) { 87 String [] tableName = (String []) tablesUsed.get(i); 88 dd.removeMaterializedTable(new QualifiedIdentifier(tableName[0], 89 tableName[1], tableName[2]), materializedTable); 90 } 91 } 92 } 93 } 94 95 private void checkForMaterialized(ViewDescriptor viewDescriptor) throws 96 DException { 97 if (_OptSNONRESERVEDWORD1364442553 == null && 98 viewDescriptor.materialized_table_name != null) { 99 throw new DException("DSE5101", 100 new Object [] {viewDescriptor.tableDescriptor. 101 getQualifiedTableName()}); 102 } 103 if (_OptSNONRESERVEDWORD1364442553 != null && 104 viewDescriptor.materialized_table_name == null) { 105 throw new DException("DSE5102", 106 new Object [] {viewDescriptor.tableDescriptor. 107 getQualifiedTableName()}); 108 } 109 } 110 111 private void setViewName(_ServerSession currentSession, 112 ViewDescriptor viewDescriptor) throws DException { 113 TableDescriptor tableDescriptor = new TableDescriptor(); 114 tableDescriptor.table_catalog = _tablename1.getCatalogName(); 115 tableDescriptor.table_schema = _tablename1.getSchemaName(); 116 tableDescriptor.table_name = _tablename1.getTableName(); 117 if (tableDescriptor.table_schema == null) { 118 tableDescriptor.table_schema = currentSession.getCurrentSchema(); 119 } 120 if (tableDescriptor.table_catalog == null) { 121 tableDescriptor.table_catalog = currentSession.getCurrentCatalog(); 122 } 123 try { 124 tableDescriptor.load(currentSession); 125 } catch (DException ex) { 126 throw new DException("DSE7010", new Object [] {_tablename1.getTableName()}); 127 } 128 if (tableDescriptor.table_catalog.equalsIgnoreCase(SystemTables.systemCatalog)) { 129 throw new DException("DSE12", null); 130 } 131 tableDescriptor.loadSchemaDescriptor(currentSession); 132 viewDescriptor.tableDescriptor = tableDescriptor; 133 viewDescriptor.setViewName(); 134 viewDescriptor.load(currentSession); 135 } 136 137 public ArrayList dropView(ViewDescriptor viewDescriptor, 138 _ServerSession currentSession, 139 String dropBehavior, String schemaOwner) throws 140 DException { 141 if (dropBehavior.equalsIgnoreCase(SqlKeywords.RESTRICT)) { 142 checkDependencies(viewDescriptor.tableDescriptor, currentSession); 143 } 144 ArrayList revokedObjects = revokePrivileges(viewDescriptor, currentSession, schemaOwner); 145 if (viewDescriptor.materialized_table_name != null) { 146 dropMaterailizedTable(viewDescriptor, currentSession, dropBehavior, 147 schemaOwner); 148 } 149 viewDescriptor.delete(currentSession); 150 return revokedObjects; 151 } 152 153 private void checkDependencies(TableDescriptor tableDescriptor, 154 _ServerSession currentSession) throws 155 DException { 156 checkViewsDependency(tableDescriptor, currentSession); 157 checkTriggerDependency(tableDescriptor, currentSession); 158 checkCheckConstraintDependency(tableDescriptor, currentSession); 159 if(currentSession.getDbVersion() >= 4.0){ 160 checkRoutineDependency(tableDescriptor, currentSession); 161 } 162 } 163 164 private void checkTriggerDependency(TableDescriptor tableDescriptor, 165 _ServerSession currentSession) throws 166 DException { 167 QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromTriggers( 168 currentSession); 169 if (ob != null) { 170 throw new DException("DSE8015", new Object [] {ob.getIdentifier(), 171 tableDescriptor.getQualifiedTableName(). 172 getIdentifier()}); 173 } 174 } 175 176 private void checkRoutineDependency(TableDescriptor tableDescriptor, 177 _ServerSession currentSession) throws 178 DException { 179 QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromRoutines( 180 currentSession); 181 if (ob != null) { 182 throw new DException("DSE8202", new Object [] {ob.getIdentifier(), 183 tableDescriptor.getQualifiedTableName(). 184 getIdentifier()}); 185 } 186 } 187 188 private void checkCheckConstraintDependency(TableDescriptor tableDescriptor, 189 _ServerSession currentSession) throws 190 DException { 191 QualifiedIdentifier ob = tableDescriptor. 192 isTableReferencedFromCheckConstraints( 193 currentSession); 194 if (ob != null) { 195 throw new DException("DSE8012", new Object [] {ob.getIdentifier(), 196 tableDescriptor.getQualifiedTableName(). 197 getIdentifier()} 198 ); 199 } 200 } 201 202 private void checkViewsDependency(TableDescriptor tableDescriptor, 203 _ServerSession serverSession) throws 204 DException { 205 QualifiedIdentifier ob = tableDescriptor.isTableReferencedFromViews( 206 serverSession); 207 if (ob != null) { 208 throw new DException("DSE8014", new Object [] {ob.getIdentifier(), 209 tableDescriptor.getQualifiedTableName(). 210 getIdentifier()}); 211 } 212 } 213 214 private ArrayList revokePrivileges(ViewDescriptor viewDes, 215 _ServerSession serverSession, 216 String schemaOwner) throws DException { 217 String query = QueryMaker.getDropTableRevokeQuery(viewDes.tableDescriptor. 218 getQualifiedTableName(), 219 schemaOwner); 220 revokeprivilegestatement _revokePrivilegesStatement = ( 221 revokeprivilegestatement) Parser.parseQuery(query); 222 _revokePrivilegesStatement.setIsSelfInitiated(false); 223 _revokePrivilegesStatement.run(serverSession.getSystemServerSession()); 224 return _revokePrivilegesStatement.getAlreadyAbondenedObject(); 225 } 226 227 private void dropMaterailizedTable(ViewDescriptor viewDescriptor, 228 _ServerSession serverSession, 229 String dropBehaviour, String schemaOwner) throws 230 DException { 231 TableDescriptor materializedTableDescriptor = new TableDescriptor(); 232 materializedTableDescriptor.table_catalog = viewDescriptor.table_catalog; 233 materializedTableDescriptor.table_schema = viewDescriptor.table_schema; 234 materializedTableDescriptor.table_name = viewDescriptor. 235 materialized_table_name; 236 materializedTableDescriptor.load(serverSession); 237 materializedTableDescriptor.schemaDescriptor = viewDescriptor. 238 tableDescriptor.schemaDescriptor; 239 QualifiedIdentifier matTableName = materializedTableDescriptor. 240 getQualifiedTableName(); 241 String query = QueryMaker.makeDropTableQuery(matTableName, dropBehaviour); 242 droptablestatement _droptableStatement = (droptablestatement) Parser. 243 parseQuery(query); 244 _droptableStatement.dropTable(materializedTableDescriptor, serverSession, 245 dropBehaviour, schemaOwner); 246 _droptableStatement.refreshServerSystem(serverSession, matTableName); 247 } 248 249 252 253 public void load(_ServerSession serverSession, ViewDescriptor viewDes) throws 254 DException { 255 TableDescriptor tableDes = new TableDescriptor(viewDes.table_catalog, 256 viewDes.table_schema, viewDes.table_name); 257 tableDes.load(serverSession); 258 viewDes.tableDescriptor = tableDes; 259 viewDes.tableDescriptor.loadSchemaDescriptor(serverSession); 260 } 261 262 public String toString() { 263 StringBuffer sb = new StringBuffer (); 264 sb.append(" "); 265 sb.append(_SRESERVEDWORD12065439224); 266 sb.append(" "); 267 if (_OptSNONRESERVEDWORD1364442553 != null) { 268 sb.append(_OptSNONRESERVEDWORD1364442553); 269 } 270 sb.append(" "); 271 sb.append(_SRESERVEDWORD12065439222); 272 sb.append(" "); 273 sb.append(_tablename1); 274 sb.append(" "); 275 sb.append(_dropbehavior0); 276 return sb.toString(); 277 } 278 279 public Object clone() throws CloneNotSupportedException { 280 return this; 281 } 282 283 } 284 | Popular Tags |