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.*; 8 import com.daffodilwoods.daffodildb.server.sql99.common.*; 9 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 10 import com.daffodilwoods.daffodildb.server.sql99.ddl.revoke.*; 11 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*; 12 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*; 13 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 14 import com.daffodilwoods.daffodildb.server.sql99.token.*; 15 import com.daffodilwoods.database.general.*; 16 import com.daffodilwoods.database.resource.*; 17 18 public class revokeprivilegestatement implements revokestatement { 19 public dropbehavior _dropbehavior0; 20 public SNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor 21 _OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1; 22 public grantee[] _OptRepScomma94843605grantee2; 23 public grantee _grantee3; 24 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439224; 25 public privileges _privileges5; 26 public revokeoptionextension _Optrevokeoptionextension6; 27 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439227; 28 29 30 private boolean isSelfInitiated = true; 31 32 33 private ArrayList alreadyAbandenedObjects; 34 public void setIsSelfInitiated(boolean temp) { 35 isSelfInitiated = temp; 36 } 37 38 private String nestedSttGrantor; 39 40 41 public void setGrantor(String temp) { 42 nestedSttGrantor = temp; 43 } 44 45 private String objectSchemaName; 46 47 62 public Object run(Object object) throws DException { 63 _ServerSession currentSession = (_ServerSession) object; 64 checkUnsupportedGrammer(); 65 if (isSelfInitiated) { 66 objectSchemaName = getSchemaNameForObject(_privileges5, currentSession); 67 } 68 ArrayList granteeList = getGrantees(); 69 checkGranteeExistance(granteeList, currentSession); 70 String grantor = nestedSttGrantor != null 71 ? nestedSttGrantor : getGrantor(currentSession); 72 ArrayList identifiedList = null; 73 try { 74 identifiedList = getIdentifiedPrivilegeList(currentSession, 75 grantor, granteeList); 76 } catch (DException ex) { 77 if (ex.getDseCode().equalsIgnoreCase("DSE8167")) 78 throw new DException("DSE8068", new Object [] {_privileges5.getQualifiedObjectName()}); 79 throw ex; 80 } 81 82 if (identifiedList == null || identifiedList.size() == 0) { 83 throw new DException("DSE8068", new Object [] {_privileges5.getQualifiedObjectName()}); 84 } 85 deletePrivileges(currentSession, grantor, identifiedList); 86 87 refreshDataDictionary(currentSession, _privileges5.getObjectType(), 88 _privileges5.getQualifiedObjectName()); 89 return null; 90 } 91 92 94 private String getSchemaNameForObject(privileges _privileges5, _ServerSession currentSession) throws DException { 95 String sch_name = _privileges5._objectname0.getSchemaName(); 96 String cat_name = _privileges5._objectname0.getCatalogName(); 97 sch_name = (sch_name != null) ? sch_name : currentSession.getCurrentSchema(); 98 cat_name = (cat_name != null) ? cat_name : currentSession.getCurrentCatalog(); 99 QualifiedIdentifier objectName = new QualifiedIdentifier(cat_name, sch_name, 100 _privileges5._objectname0.getObjectName()); 101 String qualifiedObjectName = objectName.toString(); 102 103 int index0 = qualifiedObjectName.lastIndexOf("."); 104 if (index0 == -1) { 105 return currentSession.getCurrentSchema(); 106 } else { 107 String Sc = qualifiedObjectName.substring(0, index0); 108 int index1 = Sc.lastIndexOf("."); 109 if (index1 == -1) 110 return Sc.trim(); 111 else 112 return Sc.substring(index1 + 1, index0).trim(); 113 } 114 } 115 116 private void refreshDataDictionary(_ServerSession currentSession, 117 String objectType, 118 QualifiedIdentifier objectName) throws 119 DException { 120 if (isSelfInitiated == true) { 121 currentSession.getDataDictionary().refreshPrivilegeCharacteristics( 122 objectName, objectType); 123 } 124 } 125 126 private void checkUnsupportedGrammer() throws DException { 127 if ( (_Optrevokeoptionextension6 != null) && 128 (_Optrevokeoptionextension6 instanceof 129 SNONRESERVEDWORD136444255SNONRESERVEDWORD136444255SRESERVEDWORD1206543922)) { 130 throw new DException("DSE22", new Object [] {"Revoke option extension"}); 131 } 132 } 133 134 135 private ArrayList getGrantees() throws DException { 136 ArrayList granteeList = new ArrayList(); 137 granteeList.add(_grantee3.run(null)); 138 if (_OptRepScomma94843605grantee2 != null) { 139 for (int i = 0, size = _OptRepScomma94843605grantee2.length; i < size; i++) { 140 granteeList.add(_OptRepScomma94843605grantee2[i].run(null)); 141 } 142 } 143 return granteeList; 144 } 145 146 149 private void checkGranteeExistance(ArrayList granteeList, 150 _ServerSession serverSession) throws 151 DException { 152 _Executer userExecuter = SqlSchemaConstants.getExecuter(serverSession, QueryMaker.getUsersQuery()); 153 _Executer rolesExecuter = SqlSchemaConstants.getExecuter(serverSession, QueryMaker.getRolesQuery()); 154 for (int i = 0, size = granteeList.size(); i < size; i++) { 155 String str = (String ) granteeList.get(i); 156 if (str.equalsIgnoreCase(ServerSystem.browserUser) || str.equalsIgnoreCase(SystemTables.SYSTEM)) { 157 continue; 158 } 159 _Iterator iterator = (_Iterator) userExecuter.executeForFresh(new Object [] {str}); 160 if (!iterator.first()) { 161 iterator = (_Iterator) rolesExecuter.executeForFresh(new Object [] {str}); 162 if (!iterator.first()) { 163 throw new DException("DSE8094", new Object [] {str}); 164 } 165 } 166 } 167 } 168 169 172 private void deletePrivileges(_ServerSession currentSession, String grantor, 173 ArrayList identifiedPD) throws DException { 174 175 PrivilegeDependencyGraph graph = new PrivilegeDependencyGraph( 176 currentSession); 177 graph.initializeGraph(currentSession, identifiedPD, 178 _Optrevokeoptionextension6 == null ? false : 179 _Optrevokeoptionextension6.toString(). 180 equalsIgnoreCase("WITH HIERARCHY OPTION")); 181 AbandonedObjectHandler temphandler = new AbandonedObjectHandler( 182 currentSession); 183 temphandler.calculate(identifiedPD, null, graph.getAllAbandonedPrivilegeDescriptors(), currentSession ); 184 checkRevokeDestructionAction(currentSession, graph, identifiedPD); 185 temphandler.process(); 186 revokeDestructionAction(currentSession, graph, graph.getAllIdentifiedPrivilegeDescriptors()); 187 alreadyAbandenedObjects = temphandler.getAreadyAbandenedObjects(); 188 } 189 190 public ArrayList getAlreadyAbondenedObject() { 191 return alreadyAbandenedObjects; 192 } 193 194 private ArrayList getIdentifiedPrivilegeList(_ServerSession currentSession, 195 String grantor, 196 ArrayList granteeList) throws 197 DException { 198 CalculateIdentified tt = new CalculateIdentified(); 199 ArrayList identifiedPD = tt.getIdentifiedPrivilegeDescriptor(currentSession, 200 _privileges5, granteeList, grantor); 201 return identifiedPD; 202 } 203 204 private String getGrantor(_ServerSession serverSession) throws DException { 205 String grantor = null; 206 if (_OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1 == null) { 207 209 String currentUser = (String ) serverSession.getCurrentUser(); 210 if (currentUser != null) { 211 if (currentUser.equalsIgnoreCase(ServerSystem.browserUser)) { 212 StringBuffer sb = new StringBuffer (); 213 sb.append("select schema_owner from ").append(SystemTables.schema_TableName). 214 append(" where schema_name = ").append("?"); 215 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, sb.toString(), new Object [] {isSelfInitiated ? objectSchemaName : serverSession.getCurrentSchema()}); 216 if (iter.first()) { 217 Object [] ob = (Object []) iter.getColumnValues(); 218 grantor = ob[0].toString(); 219 } 220 } else 221 grantor = currentUser; 222 } else { 223 grantor = serverSession.getCurrentRole(); 224 } 225 } else { 226 grantor = _OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1. 227 getGrantor(serverSession); 228 } 229 return grantor; 230 } 231 232 233 private void revokeDestructionAction(_ServerSession serverSession, 234 PrivilegeDependencyGraph graph, 235 ArrayList identifiedPD) throws DException { 236 ArrayList abandonedPrivilegeDescriptors = graph.getAllAbandonedPrivilegeDescriptors(); 237 if (_dropbehavior0.toString().equalsIgnoreCase(SqlKeywords.RESTRICT)) { 238 if (abandonedPrivilegeDescriptors != null) { 239 throw new DException("DSE1173", null); 240 } 241 } 242 if (_Optrevokeoptionextension6 == null) { 243 destroyAllAbandonedPrivilege(serverSession, 244 graph.getAllAbandonedPrivilegeDescriptors()); 245 destroyAllIdentifiedPrivilege(serverSession, identifiedPD); 246 } else if (_Optrevokeoptionextension6.toString().trim().compareToIgnoreCase( 247 "WITH HIERARCHY OPTION") == 0) { 248 throw new DException("DSE1184", null); 249 } else if (_Optrevokeoptionextension6.toString().trim().compareToIgnoreCase( 250 "GRANT OPTION FOR") == 0) { 251 if (_dropbehavior0.toString().equalsIgnoreCase(SqlKeywords.CASCADE)) { 252 destroyAllAbandonedPrivilege(serverSession, 253 graph.getAllAbandonedPrivilegeDescriptors()); 254 } else 255 256 { 257 checkExceptionCondition(serverSession, graph, identifiedPD); 258 } 259 if (checkExceptionCondition(serverSession, graph, identifiedPD)) { 260 throw new DException("DSE1134", null); 261 } 262 setAllIdentifiedAsNonGrantable(serverSession, identifiedPD); 263 } 264 } 265 266 private void setAllIdentifiedAsNonGrantable(_ServerSession serverSession, ArrayList identified) throws DException { 267 for (int i = 0, size = identified.size(); i < size; i++) { 268 PrivilegeDescriptor pd = (PrivilegeDescriptor) identified.get(i); 269 270 pd.updateIsGrantableValue(serverSession, SqlSchemaConstants.NO); 271 } 272 } 273 274 275 private void checkRevokeDestructionAction(_ServerSession serverSession, 276 PrivilegeDependencyGraph graph, 277 ArrayList identifiedPD) throws 278 DException { 279 ArrayList abandonedPrivilegeDescriptors = graph. 280 getAllAbandonedPrivilegeDescriptors(); 281 if (_dropbehavior0.toString().compareToIgnoreCase("RESTRICT") == 0) { 282 if (abandonedPrivilegeDescriptors != null) { 283 throw new DException("DSE1173", null); 284 } 285 } 286 if (_Optrevokeoptionextension6 == null) { 287 } else if (_Optrevokeoptionextension6.toString().compareToIgnoreCase( 288 "WITH HIERARCHY OPTION") == 0) { 289 throw new DException("DSE1184", null); 290 } else if (_Optrevokeoptionextension6.toString().compareToIgnoreCase( 291 "GRANT OPTION FOR") == 0) { 292 if (checkExceptionCondition(serverSession, graph, identifiedPD)) { 293 throw new DException("DSE1134", null); 294 } 295 } 296 } 297 298 299 private boolean checkExceptionCondition(_ServerSession serverSession, 300 PrivilegeDependencyGraph graph, 301 ArrayList identified) throws 302 DException { 303 for (int i = 0, size_identified = identified.size(); i < size_identified; i++) { 304 PrivilegeDescriptor pd = (PrivilegeDescriptor) identified.get(i); 305 HashMap tempList = graph.getDependents(pd); 306 if (tempList != null) { 307 Iterator iter = tempList.keySet().iterator(); 308 while (iter.hasNext()) { 309 PrivilegeDescriptor secondPD = (PrivilegeDescriptor) iter.next(); 310 if (graph.getStatus(secondPD) == _PDCharacterstics.modified) { 311 return true; 312 } 313 } 314 } 315 } 316 return false; 317 } 318 319 320 private void removeHierarchyOptionFromIdentifiedAndAbandoned() throws 321 DException { 322 } 323 324 325 private void destroyAllAbandonedPrivilege(_ServerSession serverSession, 326 ArrayList abandoned) throws 327 DException { 328 if (abandoned != null) { 329 for (int i = 0, size = abandoned.size(); i < size; i++) { 330 PrivilegeDescriptor pd = (PrivilegeDescriptor) abandoned.get(i); 331 pd.delete(serverSession); 332 } 333 } 334 } 335 336 337 private void destroyAllIdentifiedPrivilege(_ServerSession serverSession, 338 ArrayList identified) throws 339 DException { 340 for (int i = 0, size = identified.size(); i < size; i++) { 341 PrivilegeDescriptor pd = (PrivilegeDescriptor) identified.get(i); 342 pd.delete(serverSession); 343 } 344 } 345 346 public void print_ArrayList(ArrayList temp, String name) { 347 if (temp == null) { 348 ; return; 350 } 351 for (int i = 0, size = temp.size(); i < size; i++) { 352 PrintUtility.print_privilege_descriptor( (PrivilegeDescriptor) temp.get(i)); 353 } 354 } 355 356 public String toString() { 357 StringBuffer sb = new StringBuffer (); 358 sb.append(" "); 359 sb.append(_SRESERVEDWORD12065439227); 360 sb.append(" "); 361 if (_Optrevokeoptionextension6 != null) { 362 sb.append(_Optrevokeoptionextension6); 363 } 364 sb.append(" "); 365 sb.append(_privileges5); 366 sb.append(" "); 367 sb.append(_SRESERVEDWORD12065439224); 368 sb.append(" "); 369 sb.append(_grantee3); 370 sb.append(" "); 371 if (_OptRepScomma94843605grantee2 != null) { 372 for (int i = 0; i < _OptRepScomma94843605grantee2.length; i++) { 373 sb.append(",").append(_OptRepScomma94843605grantee2[i]); 374 } 375 } 376 sb.append(" "); 377 if (_OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1 != null) { 378 sb.append(_OptSNONRESERVEDWORD136444255SRESERVEDWORD1206543922grantor1); 379 } 380 sb.append(" "); 381 sb.append(_dropbehavior0); 382 return sb.toString(); 383 } 384 385 public Object clone() throws CloneNotSupportedException { 386 return this; 387 } 388 } 389 | Popular Tags |