1 package com.daffodilwoods.daffodildb.server.sql99.ddl.revoke; 2 3 6 import java.util.*; 7 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*; 8 import com.daffodilwoods.daffodildb.server.serversystem.*; 9 import com.daffodilwoods.daffodildb.server.sql99.common.*; 10 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 12 import com.daffodilwoods.daffodildb.utils.parser.*; 13 import com.daffodilwoods.database.resource.*; 14 import com.daffodilwoods.database.general.SystemFields; 15 16 public class AbandonedObjectHandler { 17 String userSchemas = "select schema_owner, schema_name, catalog_name from " + SystemTables.schema_TableName 18 + " where schema_owner in ( ? )"; 19 20 AbandonedTriggers abandonedTrigger; 21 AbandonedTableConstraints abandonedTableConstraints; 22 AbandonedViews abandonedView; 23 _ServerSession serverSession; 24 Object parsedUserSchemas; 25 ArrayList userNSchema; 26 ArrayList alreadyAbandenedObjects; 27 28 public AbandonedObjectHandler(_ServerSession tempServerSession) throws DException { 29 abandonedTableConstraints = new AbandonedTableConstraints(this, tempServerSession); 30 abandonedTrigger = new AbandonedTriggers(this, tempServerSession); 31 abandonedView = new AbandonedViews(this, tempServerSession); 32 serverSession = tempServerSession; 33 if (parsedUserSchemas == null) { 34 parsedUserSchemas = Parser.parseQuery(userSchemas); 35 } 36 userNSchema = new ArrayList(); 37 } 38 39 public ArrayList getAreadyAbandenedObjects() { 40 return alreadyAbandenedObjects; 41 } 42 43 public void addToAlreadyAbondenedObjets(Object abondenedObject) { 44 if (alreadyAbandenedObjects == null) { 45 alreadyAbandenedObjects = new ArrayList(); 46 } 47 alreadyAbandenedObjects.add(abondenedObject); 48 } 49 50 public void addToAlreadyAbondenedObjets(ArrayList abondenedObjectList) { 51 if (abondenedObjectList == null) { 52 return; 53 } 54 if (alreadyAbandenedObjects == null) { 55 alreadyAbandenedObjects = new ArrayList(); 56 } 57 alreadyAbandenedObjects.addAll(abondenedObjectList); 58 } 59 60 public void calculate(ArrayList identified, ArrayList modified, ArrayList abandoned, _ServerSession currentSession) throws DException { 61 ArrayList both = identified; 62 if (abandoned != null) { 63 both.addAll(abandoned); 64 65 } 66 HashMap users = new HashMap(); 67 int noOfUsers = 0; 68 for (int i = 0, size = both.size(); i < size; i++) { 69 PrivilegeDescriptor pd = (PrivilegeDescriptor) both.get(i); 70 String user = pd.getGrantee(); 71 if (!users.containsKey(user)) { 72 users.put(user, null); 73 noOfUsers++; 74 } 75 } 76 userNSchema = getUserSchema(users); 77 78 for (int i = 0, size = both.size(); i < size; i++) { 79 PrivilegeDescriptor pd = (PrivilegeDescriptor) both.get(i); 80 if (pd instanceof TablePrivilegesDescriptor) { 81 tablePrivilegeHandler( (TablePrivilegesDescriptor) pd, currentSession); 82 } else if (pd instanceof ColumnPrivilegeDescriptor) { 83 columnPrivilegeHandler( (ColumnPrivilegeDescriptor) pd, currentSession); 84 } else if (pd instanceof RoutinePrivilegeDescriptor) { 85 routinePrivilegeHandler( (RoutinePrivilegeDescriptor) pd); 86 } else if (pd instanceof UsagePrivilegesDescriptor) { 87 usagePrivilegeHandler( (UsagePrivilegesDescriptor) pd); 88 } 89 } 90 } 91 92 public void process() throws DException { 93 abandonedTrigger.process(); 94 abandonedTableConstraints.process(); 95 abandonedView.process(); 96 } 97 98 private void tablePrivilegeHandler(TablePrivilegesDescriptor tpd, _ServerSession currentSession) throws DException { 99 if (tpd.privilege_type.equalsIgnoreCase(SqlKeywords.TRIGGER)) { 100 triggerTablePrivilegeHandler(tpd, currentSession); 101 } else if (tpd.privilege_type.equalsIgnoreCase(SqlKeywords.SELECT)) { 102 viewTablePrivilegeHandler(tpd, currentSession); 103 } 104 } 105 106 private void columnPrivilegeHandler(ColumnPrivilegeDescriptor cpd, _ServerSession currentSession) throws DException { 107 if (!cpd.column_name.equalsIgnoreCase(SystemFields.systemFields[SystemFields.rowId])) { 108 if (cpd.privilege_type.equalsIgnoreCase(SqlKeywords.REFERENCES)) { 109 referenceColumnPrivilegeHandler(cpd, currentSession); 110 } else if (cpd.privilege_type.equalsIgnoreCase(SqlKeywords.SELECT)) { 111 viewColumnPrivilegeHandler(cpd, currentSession); 112 } 113 } 114 } 115 116 private void routinePrivilegeHandler(RoutinePrivilegeDescriptor rpd) throws DException { 117 } 118 119 private void usagePrivilegeHandler(UsagePrivilegesDescriptor upd) throws DException { 120 if (upd.object_type.equalsIgnoreCase(SqlKeywords.DOMAIN)) { 121 domainUsagePrivilegeHandler(upd); 122 } 123 } 124 125 private void referenceColumnPrivilegeHandler(ColumnPrivilegeDescriptor cpd, _ServerSession currentSession) throws DException { 126 abandonedTableConstraints.calculate(cpd, currentSession); 127 } 128 129 private void triggerTablePrivilegeHandler(TablePrivilegesDescriptor tpd, _ServerSession currentSession) throws DException { 130 abandonedTrigger.calculate(tpd, currentSession); 131 } 132 133 private void domainUsagePrivilegeHandler(UsagePrivilegesDescriptor upd) throws DException { 134 } 135 136 private void viewColumnPrivilegeHandler(ColumnPrivilegeDescriptor cpd, _ServerSession currentSession) throws DException { 137 abandonedView.calculate(cpd, currentSession); 138 } 139 140 private void viewTablePrivilegeHandler(TablePrivilegesDescriptor tpd, _ServerSession currentSession) throws DException { 141 abandonedView.calculate(tpd, currentSession); 142 } 143 144 public ArrayList getUserSchema(HashMap users) throws DException { 145 Object [] allUsers = users.keySet().toArray(); 146 147 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, parsedUserSchemas.toString(), new Object [] {allUsers}); 148 if (iter.first()) { 149 ArrayList userschema = new ArrayList(); 150 do { 151 Object [] values = (Object []) iter.getObject(); 152 Object [] obj = new Object [3]; 153 obj[0] = values[0]; 154 obj[1] = values[1]; 155 obj[2] = values[2]; 156 userschema.add(obj); 157 } while (iter.next()); 158 return userschema.size() == 0 ? null : userschema; 159 } 160 return null; 161 } 162 163 public ArrayList getUserNSchema() { 164 return userNSchema; 165 } 166 } 167 | Popular Tags |