1 package com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors; 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.serversystem.dmlvalidation.constraintsystem.*; 8 import com.daffodilwoods.daffodildb.server.sql99.common.*; 9 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*; 10 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*; 11 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 12 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*; 13 import com.daffodilwoods.daffodildb.server.sql99.utils.*; 14 import com.daffodilwoods.daffodildb.server.sql99.utils.parser.*; 15 import com.daffodilwoods.daffodildb.utils.*; 16 import com.daffodilwoods.database.general.*; 17 import com.daffodilwoods.database.resource.*; 18 19 public class DomainDescriptor extends Descriptor { 20 public String catalog_name; 21 public String schema_name; 22 public String domain_name; 23 public String dtd_Idenifier; 24 25 public String default_clause; 26 27 public DataTypeDescriptor dataTypeDescriptor; 28 public SchemaDescriptor schemaDescriptor; 29 30 public ArrayList domainConstrainsList; 31 32 33 private static String domainReferencedFromColumnsQuery = " select * from " + 34 SqlSchemaConstants.columns_TableName 35 + " where domain_catalog = ? and domain_schema = ? and domain_name = ? "; 36 37 public DomainDescriptor() throws DException { 38 } 39 40 41 42 public void load(_ServerSession serverSession) throws DException { 43 DataDictionary dd = (DataDictionary) serverSession.getDataDictionary(); 44 _SelectQueryIterator iter = (_SelectQueryIterator) dd.getPreparedStatementGetter(). 45 getDomianTableExecuter().executeForFresh(new Object [] {catalog_name, 46 schema_name, domain_name}); 47 if (iter.first()) { 48 Object [] obj = (Object []) iter.getObject(); 49 default_clause = (String ) obj[SystemTablesFields.domain_default_clause]; dtd_Idenifier = (String ) obj[SystemTablesFields.domain_dtd_Idenifier]; 51 dataTypeDescriptor = new DataTypeDescriptor(); 52 dataTypeDescriptor.object_catalog = catalog_name; 53 dataTypeDescriptor.object_schema = schema_name; 54 dataTypeDescriptor.object_name = domain_name; 55 dataTypeDescriptor.object_type = SqlKeywords.DOMAIN; 56 dataTypeDescriptor.dtd_identifier = dtd_Idenifier; 57 dataTypeDescriptor.load(serverSession); 58 loadConstraints(serverSession); 59 } else { 60 throw new DException("DSE337", null); 61 } 62 } 63 64 public void loadWithoutConstraints(_ServerSession serverSession) throws DException { 65 DataDictionary dd = (DataDictionary) serverSession.getDataDictionary(); 66 _SelectQueryIterator iter = (_SelectQueryIterator) dd.getPreparedStatementGetter(). 67 getDomianTableExecuter().executeForFresh(new Object [] {catalog_name, 68 schema_name, domain_name}); 69 if (!iter.first()) { 70 throw new DException("DSE8211", new Object [] {new QualifiedIdentifier(catalog_name, schema_name, domain_name)}); 71 } else { 72 Object [] obj = (Object []) iter.getObject(); 73 default_clause = (String ) obj[SystemTablesFields.domain_default_clause]; dtd_Idenifier = (String ) obj[SystemTablesFields.domain_dtd_Idenifier]; 75 dataTypeDescriptor = new DataTypeDescriptor(); 76 dataTypeDescriptor.object_catalog = catalog_name; 77 dataTypeDescriptor.object_schema = schema_name; 78 dataTypeDescriptor.object_name = domain_name; 79 dataTypeDescriptor.object_type = SqlKeywords.DOMAIN; 80 dataTypeDescriptor.dtd_identifier = dtd_Idenifier; 81 dataTypeDescriptor.load(serverSession); 82 } 83 } 84 85 public void save(_ServerSession serverSession) throws DException { 86 dataTypeDescriptor.save(serverSession); 87 Object [] columnValues = { 88 catalog_name, schema_name, domain_name, dtd_Idenifier, default_clause}; 89 90 try { 91 SqlSchemaConstants.insert(serverSession, 92 SqlSchemaConstants.domains_TableName, null, 93 columnValues); 94 } catch (PrimaryConstraintException de) { 95 DException tde = new DException("DSE1144", new Object [] {getDomainName()}); 96 throw tde; 97 } catch (SizeMisMatchException de) { 98 if (de.getDseCode().equals("DSE773")) { 99 DException tde = new DException("DSE8103", null); 100 throw tde; 101 } 102 } catch (DException de) { 103 if (de.getDseCode().equals("DSE1255")) { 104 DException tde = new DException("DSE1144", new Object [] {getDomainName()}); 105 throw tde; 106 } 107 if (de.getDseCode().equals("DSE773")) { 108 DException tde = new DException("DSE8103", null); 109 throw tde; 110 } 111 throw de; 112 } 113 } 114 115 public void delete(_ServerSession serverSession) throws DException { 116 String bve = "DOMAIN_CATALOG=? and DOMAIN_SCHEMA=? and DOMAIN_NAME=?"; 117 _ServerSession globalSession = serverSession.getGlobalSession(); 118 booleanvalueexpression condition = ConditionParser.parseCondition(bve, globalSession, SqlSchemaConstants.domains_TableName); 119 super.delete(serverSession, SqlSchemaConstants.domains_TableName, condition, new Object [] {catalog_name, schema_name, domain_name}); 120 dataTypeDescriptor.delete(serverSession); 121 deleteConstraints(serverSession); 122 } 123 124 public void loadConstraints(_ServerSession serverSession) throws DException { 125 DataDictionary dd = (DataDictionary) serverSession.getDataDictionary(); 126 _SelectQueryIterator retIter = (_SelectQueryIterator) dd.getPreparedStatementGetter().getDomainConstraintsExecuter().executeForFresh( (Object []) getParameters()); 127 if (retIter.first()) { 128 domainConstrainsList = new ArrayList(2); 129 do { 130 DomainConstraintDescriptor constraint = new DomainConstraintDescriptor(); 131 constraint.loadDataFromRecord(serverSession, retIter); 132 domainConstrainsList.add(constraint); 133 } while (retIter.next()); 134 } 135 } 136 137 public void deleteConstraints(_ServerSession serverSession) throws DException { 138 if (domainConstrainsList != null) { 139 for (int i = 0; i < domainConstrainsList.size(); i++) { 140 ( (DomainConstraintDescriptor) domainConstrainsList.get(i)).delete( 141 serverSession); 142 } 143 } 144 } 145 146 private String getDomainName() throws DException { 147 return new StringBuffer ().append(catalog_name).append(".").append( 148 schema_name).append(".").append(domain_name).toString(); 149 } 150 151 private String [] getParameters() throws DException { 152 return new String [] { 153 catalog_name, schema_name, domain_name}; 154 } 155 156 public Object [] isDomainReferencedfromColumns(_ServerSession serverSession) throws 157 DException { 158 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, domainReferencedFromColumnsQuery, getParameters()); 159 if (!iter.first()) { 160 return null; 161 } 162 return (Object []) iter.getObject(); 163 } 164 165 public boolean isDomainReferencedfromRoutines(_ServerSession serverSession) throws 166 DException { 167 return false; 168 } 169 170 public ArrayList getColumnDescriptorsForDomain(_ServerSession serverSession) throws 171 DException { 172 ArrayList columnDescriptorsList = null; 173 _SelectQueryIterator iter = SqlSchemaConstants.getIterator(serverSession, 174 domainReferencedFromColumnsQuery, getParameters()); 175 if (iter.first()) { 176 columnDescriptorsList = new ArrayList(); 177 do { 178 ColumnDescriptor columnDescriptor = new ColumnDescriptor(); 179 columnDescriptor.loadDataFromRecord(iter); 180 columnDescriptorsList.add(columnDescriptor); 181 } while (iter.next()); 182 } 183 return columnDescriptorsList; 184 } 185 186 public ArrayList getConstraintsConditions() { 187 ArrayList checkClauses = null; 188 if (domainConstrainsList != null) { 189 checkClauses = new ArrayList(); 190 for (int i = 0; i < domainConstrainsList.size(); i++) { 191 checkClauses.add( ( (DomainConstraintDescriptor) domainConstrainsList. 192 get(i)).checkConsDes.check_clause); 193 } 194 } 195 return checkClauses; 196 } 197 198 public int getDescriptorType() { 199 return DOMAIN_DESCRIPTOR; 200 } 201 202 public void addDomainConstraintDescriptor(DomainConstraintDescriptor domainConsDes) { 203 if (domainConstrainsList == null) { 204 domainConstrainsList = new ArrayList(); 205 } 206 domainConstrainsList.add(domainConsDes); 207 } 208 209 public boolean hasGrantableRefRightsForColumnsIncluded(_ServerSession currentSession, String user) throws DException { 210 if (domainConstrainsList != null) { 211 for (int i = 0, size = domainConstrainsList.size(); i < size; i++) { 212 DomainConstraintDescriptor dcd = (DomainConstraintDescriptor) domainConstrainsList.get(i); 213 ArrayList columnList = dcd.checkConsDes.getColumnsUsedInSearchCondition(); 214 if (!GeneralUtility.checkAllColumnGrantableRights(currentSession, user, _PrivilegeTable.REFERENCES, columnList)) { 215 return false; 216 } 217 } 218 } 219 return true; 220 } 221 222 public QualifiedIdentifier getQualifiedIdentifier() { 223 return new QualifiedIdentifier(catalog_name, schema_name, domain_name); 224 } 225 226 public void update(_ServerSession serverSession, int[] columns, 227 Object [] values) throws DException { 228 String bve = "DOMAIN_CATALOG=? and DOMAIN_SCHEMA=? and DOMAIN_NAME=?"; 229 TableDetails tableDetail = new TableDetails(); 230 tableDetail.setTableName(SqlSchemaConstants.domains_TableName.getTableName()); 231 _ServerSession systemSession = serverSession.getSystemServerSession(); 232 _ServerSession globalSession = serverSession.getGlobalSession(); 233 booleanvalueexpression condition = ConditionParser.parseCondition(bve,globalSession,SqlSchemaConstants.domains_TableName); 234 ConditionSingleTableExecuter conSingTE = new ConditionSingleTableExecuter(null, 235 tableDetail, globalSession, condition, null); 236 _Iterator iter = globalSession.getInternalIterator(SqlSchemaConstants.domains_TableName, conSingTE); 237 _Reference[] ref = null; 238 Object [] val = null; 239 try { 240 ref = condition.getReferences(new TableDetails[] {tableDetail}); 241 val = new Object [] {catalog_name, schema_name, domain_name}; 242 val = FieldUtility.getFields(val); 243 iter.setConditionVariableValue(ref, val, 1); 244 } 245 catch (Exception ex) { 246 } 247 SqlSchemaConstants.update(systemSession, 248 SqlSchemaConstants.domains_TableName, iter, 249 columns, values); 250 } 251 } 252 | Popular Tags |