1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition; 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.dql.iterator.*; 10 import com.daffodilwoods.daffodildb.server.sql99.dql.tableexpression.fromclause.*; 11 import com.daffodilwoods.daffodildb.server.sql99.token.*; 12 import com.daffodilwoods.database.general.*; 13 import com.daffodilwoods.database.resource.*; 14 15 public class privileges { 16 public objectname _objectname0; 17 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439221; 18 public objectprivileges _objectprivileges2; 19 20 private QualifiedIdentifier objectName; 21 private String grantee; 22 private _Descriptor objectDescriptor; 23 private SchemaDescriptor schemaDescriptor; 24 private Object [] applicableRoles; 25 private Object [] allGrantees; 26 27 public Object run(Object object) throws DException { 28 _ServerSession currentSession = (_ServerSession) object; 29 int len = applicableRoles == null ? 0 : applicableRoles.length; 30 allGrantees = new Object [1 + len]; 31 allGrantees[0] = grantee; 32 setObjectName(currentSession); 33 checkStatementValidity(currentSession); 34 ArrayList listOfPDs = getIdentifiedPrivilegeDescriptors(currentSession); 35 return listOfPDs; 36 } 37 38 private void setObjectName(_ServerSession currentSession) throws DException { 39 String sch_name = _objectname0.getSchemaName(); 40 String cat_name = _objectname0.getCatalogName(); 41 sch_name = (sch_name != null) ? sch_name : (schemaDescriptor != null) 42 ? schemaDescriptor.schema_name : currentSession.getCurrentSchema(); 43 cat_name = (cat_name != null) ? cat_name : (schemaDescriptor != null) 44 ? schemaDescriptor.catalog_name : currentSession.getCurrentCatalog(); 45 objectName = new QualifiedIdentifier(cat_name, sch_name, 46 _objectname0.getObjectName()); 47 } 48 49 private void checkStatementValidity(_ServerSession currentSession) throws 50 DException { 51 String objectType = _objectname0.getObjectType(); 52 if (objectType.equalsIgnoreCase(SqlKeywords.TABLE)) { 53 TableDescriptor tableDescriptor = null; 54 checkForTableType(); 55 tableDescriptor = setTableDescriptor(currentSession, tableDescriptor); 56 checkForPrivilegeColumnsExisting(currentSession, tableDescriptor); 57 } else if (objectType.equalsIgnoreCase(SqlKeywords.DOMAIN)) { 58 checkForUsage(); 59 setDomainDescriptor(currentSession); 60 } else if (objectType.equalsIgnoreCase(SqlKeywords.SPECIFIC)) { 61 checkSqlRoutine(); 62 setRoutineDescriptor(currentSession); 63 } 64 } 65 66 private void checkForTableType() throws DException { 67 ArrayList listOfActions = _objectprivileges2.getArrayList(); 68 if (listOfActions != null) { 69 for (int i = 0, size = listOfActions.size(); i < size; i++) { 70 action act = (action) listOfActions.get(i); 71 String actionType = (String ) act.run(null); 72 if (actionType.equalsIgnoreCase(SqlKeywords.USAGE) 73 || actionType.equalsIgnoreCase(SqlKeywords.EXECUTE) 74 || actionType.equalsIgnoreCase(SqlKeywords.UNDER)) { 75 throw new DException("DSE1181", new Object [] {actionType}); 76 } 77 } 78 } 79 } 80 81 private void checkForUsage() throws DException { 82 ArrayList privs = _objectprivileges2.getArrayList(); 83 if (privs != null) { 84 if (privs.size() == 1) { 85 if (privs.get(0).toString().equalsIgnoreCase(SqlKeywords.USAGE)) { 86 return; 87 } 88 } 89 throw new DException("DSE759", null); 90 } 91 } 92 93 private void checkSqlRoutine() throws DException { 94 ArrayList privileges = _objectprivileges2.getArrayList(); 95 if (privileges != null) { 96 if (privileges.size() > 1) { 97 throw new DException("DSE5014", null); 98 } 99 if (! ( (action) privileges.get(0)).toString().equalsIgnoreCase( 100 SqlKeywords.EXECUTE)) { 101 throw new DException("DSE934", null); 102 } 103 } 104 } 105 106 private TableDescriptor setTableDescriptor(_ServerSession currentSession, TableDescriptor tableDescriptor) throws DException { 107 if (objectDescriptor == null) { 108 TableDescriptor tableDes = new TableDescriptor(objectName.catalog, 109 objectName.schema, objectName.name); 110 tableDes.load(currentSession); 111 objectDescriptor = tableDes; 112 tableDescriptor = tableDes; 113 } else { 114 tableDescriptor = (TableDescriptor) objectDescriptor; 115 } 116 return tableDescriptor; 117 } 118 119 private void setDomainDescriptor(_ServerSession currentSession) throws 120 DException { 121 if (objectDescriptor == null) { 122 DomainDescriptor domainDes = new DomainDescriptor(); 123 domainDes.catalog_name = objectName.catalog; 124 domainDes.schema_name = objectName.schema; 125 domainDes.domain_name = objectName.name; 126 domainDes.load(currentSession); 127 objectDescriptor = domainDes; 128 } 129 } 130 131 private void setRoutineDescriptor(_ServerSession currentSession) throws 132 DException { 133 if (objectDescriptor == null) { 134 RoutineDescriptor routineDes = new RoutineDescriptor(); 135 routineDes.SPECIFIC_CATALOG = objectName.catalog; 136 routineDes.SPECIFIC_SCHEMA = objectName.schema; 137 routineDes.SPECIFIC_NAME = objectName.name; 138 routineDes.load(currentSession); 139 objectDescriptor = routineDes; 140 } 141 } 142 143 private ArrayList getIdentifiedPrivilegeDescriptors(_ServerSession 144 currentSession) throws DException { 145 String objectType = _objectname0.getObjectType(); 146 return (_objectprivileges2 instanceof 147 SRESERVEDWORD1206543922SRESERVEDWORD1206543922) 148 ? getAllPrivilegeDescriptors(objectType, currentSession) 149 : getCorrespondingPrivilegeDescriptors(objectType, _objectprivileges2. 150 getArrayList()); 151 } 152 153 private ArrayList getAllPrivilegeDescriptors(String objectType, 154 _ServerSession currentSession) throws DException { 155 ArrayList listOfPDs = new ArrayList(); 156 if (objectType.equalsIgnoreCase(SqlKeywords.TABLE)) { 157 TableDescriptor tableDescriptor = (TableDescriptor) objectDescriptor; 158 if (grantee.equalsIgnoreCase(SystemTables.SYSTEM) || grantee.equalsIgnoreCase(ServerSystem.browserUser)) { 159 setAllTablePrivilegeDescriptor(listOfPDs, tableDescriptor); 160 } else { 161 calculateGrantableTablePrivilege(tableDescriptor, currentSession, 162 listOfPDs); 163 } 164 } else if (objectType.equalsIgnoreCase(SqlKeywords.DOMAIN)) { 165 if (grantee.equalsIgnoreCase(SystemTables.SYSTEM) || grantee.equalsIgnoreCase(ServerSystem.browserUser)) { 166 setUsagePrivilegeDescriptor(SqlKeywords.DOMAIN, listOfPDs); 167 } else { 168 calculateGrantableUsagePrivilege(currentSession, listOfPDs); 169 } 170 } else if (objectType.equalsIgnoreCase(SqlKeywords.SPECIFIC)) { 171 if (grantee.equalsIgnoreCase(SystemTables.SYSTEM) || grantee.equalsIgnoreCase(ServerSystem.browserUser)) { 172 setRoutinePrivilegeDescriptor(listOfPDs); 173 } else { 174 calculateGrantableRoutinePrivilege(currentSession, listOfPDs); 175 } 176 } 177 return listOfPDs; 178 } 179 180 private void setAllTablePrivilegeDescriptor(ArrayList listOfPDs, 181 TableDescriptor tableDescriptor) throws DException { 182 setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.SELECT, listOfPDs); 183 setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.UPDATE, listOfPDs); 184 setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.INSERT, listOfPDs); 185 setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.DELETE, listOfPDs); 186 setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.REFERENCES, 187 listOfPDs); 188 setTablePrivilegeDescriptor(tableDescriptor, SqlKeywords.TRIGGER, listOfPDs); 189 } 190 191 private void calculateGrantableTablePrivilege(TableDescriptor tableDescriptor, 192 _ServerSession currentSession, 193 ArrayList listOfPDs) throws 194 DException { 195 String clause = "select distinct privilege_type from " + 196 SystemTables.table_privileges_TableName 197 + " where grantee IN (?) and is_grantable = 'YES' and table_catalog = ? " 198 + " and table_schema = ? and table_name = ? "; 199 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(currentSession, clause, 200 new Object [] {allGrantees, objectName.catalog, objectName.schema, 201 objectName.name}); 202 if (iter.first()) { 203 do { 204 Object [] obj = (Object []) iter.getObject(); 205 setTablePrivilegeDescriptor(tableDescriptor, obj[0], listOfPDs); 206 } while (iter.next()); 207 } else { 208 throw new DException("DSE8167", new Object [] {currentSession.getCurrentRole() == null ? currentSession.getCurrentUser() : currentSession.getCurrentRole(), objectName}); 209 } 210 } 211 212 private void calculateGrantableUsagePrivilege(_ServerSession currentSession, ArrayList listOfPDs) throws DException { 213 String usage_clause = "select object_type from " + 214 SystemTables.usage_privileges_TableName 215 + " where grantee IN (?)and is_grantable = 'YES' and object_catalog = ? " 216 + " and object_schema = ? and object_name = ? "; 217 218 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(currentSession, 219 usage_clause, 220 new Object [] {allGrantees, objectName.catalog, objectName.schema, 221 objectName.name}); 222 if (iter.first()) { 223 do { 224 Object [] obj = (Object []) iter.getObject(); 225 setUsagePrivilegeDescriptor(obj[0], listOfPDs); 226 } while (iter.next()); 227 } 228 } 229 230 private void calculateGrantableRoutinePrivilege(_ServerSession currentSession, ArrayList listOfPDs) throws 231 DException { 232 String routine_clause = "select privilege_type from " + 233 SystemTables.routine_privileges_TableName 234 + 235 " where grantee in (?) and is_grantable = 'YES' and specific_catalog = ? " 236 + " and specific_schema = ? and specific_name = ? "; 237 238 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(currentSession, 239 routine_clause, new Object [] {allGrantees, objectName.catalog, 240 objectName.schema, objectName.name}); 241 if (iter.first()) { 242 do { 243 Object [] obj = (Object []) iter.getObject(); 244 setRoutinePrivilegeDescriptor(listOfPDs); 245 } while (iter.next()); 246 } 247 } 248 249 private ArrayList getCorrespondingPrivilegeDescriptors(String objectType, 250 ArrayList list_of_actions) throws DException { 251 if (objectType.equalsIgnoreCase(SqlKeywords.TABLE)) { 252 return getTablePrivilegeDescriptors(list_of_actions); 253 } else if (objectType.equalsIgnoreCase(SqlKeywords.DOMAIN)) { 254 return getDomainPrivilegeDescriptors(objectType, list_of_actions); 255 } else if (objectType.equalsIgnoreCase(SqlKeywords.SPECIFIC)) { 256 return getRoutinePrivilegeDescriptors(list_of_actions); 257 } else { 258 throw new DException("DSE565", 259 new Object [] {objectType + " for privilleges"}); 260 } 261 } 262 263 private ArrayList getRoutinePrivilegeDescriptors(ArrayList list_of_actions) throws 264 DException { 265 ArrayList listOfPDs = new ArrayList(); 266 for (int i = 0, size = list_of_actions.size(); i < size; i++) { 267 action act = (action) list_of_actions.get(i); 268 String actionType = (String ) act.run(null); 269 if (actionType.equalsIgnoreCase(SqlKeywords.EXECUTE)) { 270 setRoutinePrivilegeDescriptor(listOfPDs); 271 } 272 } 273 return listOfPDs; 274 } 275 276 private ArrayList getDomainPrivilegeDescriptors(String objectType, 277 ArrayList list_of_actions) throws 278 DException { 279 ArrayList listOfPDs = new ArrayList(); 280 for (int i = 0, size = list_of_actions.size(); i < size; i++) { 281 action act = (action) list_of_actions.get(i); 282 String actionType = (String ) act.run(null); 283 if (actionType.equalsIgnoreCase(SqlKeywords.USAGE)) { 284 setUsagePrivilegeDescriptor(objectType, listOfPDs); 285 } 286 } 287 return listOfPDs; 288 } 289 290 private ArrayList getTablePrivilegeDescriptors(ArrayList list_of_actions) throws DException { 291 ArrayList listOfPDs = new ArrayList(); 292 TableDescriptor table_descriptor = (TableDescriptor) objectDescriptor; 293 for (int i = 0, size = list_of_actions.size(); i < size; i++) { 294 action act = (action) list_of_actions.get(i); 295 String actionType = (String ) act.run(null); 296 if (actionType.equalsIgnoreCase(SqlKeywords.SELECT) || 297 actionType.equalsIgnoreCase(SqlKeywords.DELETE) || 298 actionType.equalsIgnoreCase(SqlKeywords.INSERT) || 299 actionType.equalsIgnoreCase(SqlKeywords.UPDATE) || 300 actionType.equalsIgnoreCase(SqlKeywords.REFERENCES) || 301 actionType.equalsIgnoreCase(SqlKeywords.TRIGGER)) { 302 ArrayList l = act.get_columns(); 303 if (l == null) { 304 setTablePrivilegeDescriptor(table_descriptor, actionType, 305 listOfPDs); 306 } else { 307 for (int j = 0; j < l.size(); j++) { 308 setColumnPrivilegeDescriptor(table_descriptor, l.get(j), 309 actionType, listOfPDs); 310 } 311 } 312 } else { 313 throw new DException("DSE8030", new Object [] {"TABLE", actionType}); 314 } 315 } 316 return listOfPDs; 317 } 318 319 private void setTablePrivilegeDescriptor(TableDescriptor tabledesc, 320 Object privilege_type, ArrayList listOfPDs) throws DException { 321 if (tabledesc == null) { 322 throw new DException("DSE1183", null); 323 } 324 TablePrivilegesDescriptor tabPriDes = new TablePrivilegesDescriptor(); 325 tabPriDes.object_catalog = tabledesc.table_catalog; 326 tabPriDes.object_schema = tabledesc.table_schema; 327 tabPriDes.object_name = objectName.name; 328 tabPriDes.privilege_type = (String ) privilege_type; 329 listOfPDs.add(tabPriDes); 330 } 331 332 private void setColumnPrivilegeDescriptor(TableDescriptor tabledesc, 333 Object columnName, Object privilege_type, ArrayList listOfPDs) throws 334 DException { 335 ColumnPrivilegeDescriptor cpd = new ColumnPrivilegeDescriptor(); 336 cpd.object_catalog = tabledesc.table_catalog; 337 cpd.object_schema = tabledesc.table_schema; 338 cpd.object_name = objectName.name; 339 cpd.column_name = (String ) columnName; 340 if (privilege_type != null) { 341 cpd.privilege_type = (String ) privilege_type; 342 } 343 listOfPDs.add(cpd); 344 } 345 346 private void setUsagePrivilegeDescriptor(Object object_type, 347 ArrayList listOfPDs) throws DException { 348 UsagePrivilegesDescriptor upd = new UsagePrivilegesDescriptor(); 349 upd.object_catalog = objectName.catalog; 350 upd.object_schema = objectName.schema; 351 upd.object_name = objectName.name; 352 if (object_type != null) { 353 upd.object_type = (String ) object_type; 354 } 355 listOfPDs.add(upd); 356 } 357 358 private void setRoutinePrivilegeDescriptor(ArrayList listOfPDs) throws DException { 359 RoutinePrivilegeDescriptor rpd = new RoutinePrivilegeDescriptor(); 360 rpd.object_catalog = objectName.catalog; 361 rpd.object_schema = objectName.schema; 362 rpd.object_name = objectName.name; 363 rpd.privilege_type = SqlKeywords.EXECUTE; 364 listOfPDs.add(rpd); 365 } 366 367 public void setGrantee(String grantee0) throws DException { 368 grantee = grantee0; 369 } 370 371 public void setObjectDescriptor(_Descriptor descriptor) { 372 objectDescriptor = descriptor; 373 } 374 375 public void setApplicableRoles(Object [] applicableRoles0) { 376 applicableRoles = applicableRoles0; 377 } 378 379 public void setSchemaDescriptor(_Descriptor schemaDes) throws 380 DException { 381 schemaDescriptor = (SchemaDescriptor) schemaDes; 382 } 383 384 public _Descriptor getObjectDescriptor() { 385 return objectDescriptor; 386 } 387 388 public String getObjectType() { 389 return _objectname0.getObjectType(); 390 } 391 392 public QualifiedIdentifier getQualifiedObjectName() { 393 return objectName; 394 } 395 396 public String toString() { 397 StringBuffer sb = new StringBuffer (); 398 sb.append(" "); 399 sb.append(_objectprivileges2); 400 sb.append(" "); 401 sb.append(_SRESERVEDWORD12065439221); 402 sb.append(" "); 403 sb.append(_objectname0); 404 return sb.toString(); 405 } 406 407 public Object clone() throws CloneNotSupportedException { 408 return this; 409 } 410 411 private void checkForPrivilegeColumnsExisting(_ServerSession currentSession, TableDescriptor tableDescriptor) throws DException { 412 ArrayList listOfActions = _objectprivileges2.getArrayList(); 413 if (listOfActions != null) { 414 for (int i = 0, size = listOfActions.size(); i < size; i++) { 415 action act = (action) listOfActions.get(i); 416 ArrayList allColumns = act.get_columns(); 417 if (allColumns != null) { 418 for (int j = 0; j < allColumns.size(); j++) { 419 String columnName = (String ) allColumns.get(j); 420 ColumnDescriptor columnDes = new ColumnDescriptor(objectName.catalog, 421 objectName.schema, objectName.name, columnName); 422 columnDes.setTableDescriptor(tableDescriptor); 423 columnDes.load(currentSession); 424 } 425 } 426 } 427 } 428 } 429 } 430 | Popular Tags |