1 package com.daffodilwoods.daffodildb.server.datadictionarysystem; 2 3 import java.util.*; 4 5 import com.daffodilwoods.daffodildb.server.sql99.*; 6 import com.daffodilwoods.daffodildb.server.sql99.common.*; 7 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 8 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 9 import com.daffodilwoods.database.general.*; 10 import com.daffodilwoods.database.resource.*; 11 import com.daffodilwoods.database.utility.*; 12 13 public class PrimaryAndUniqueConstraintCharacteristics implements _PrimaryAndUniqueConstraintCharacteristics { 14 15 private PreparedStatementGetter preparedStatementGetter; 16 17 private _UniqueConstraint primaryConstraints; 18 19 private TreeMap constraints; 20 transient HashMap constraint_column_mapping; 21 private Object [] parameters; 22 private _ColumnCharacteristics columnCharacteristics; 23 private boolean initialized; 24 private boolean isdefered; 25 private boolean isSystemTable; 26 public static boolean testing; 27 private _DataDictionary dataDictionary; 28 29 public PrimaryAndUniqueConstraintCharacteristics(QualifiedIdentifier tableName, _ColumnCharacteristics columnCharacteristics0, PreparedStatementGetter preparedStatementGetter0, boolean deferable, _DataDictionary dataDictionary0) throws DException { 30 isSystemTable = SystemTables.isSystemTable(tableName.getIdentifier()); 31 preparedStatementGetter = preparedStatementGetter0; 32 isdefered = deferable; 33 parameters = new Object [] {tableName.catalog, tableName.schema, tableName.name}; 34 columnCharacteristics = columnCharacteristics0; 35 dataDictionary = dataDictionary0; 36 } 37 38 private void initializeConstraintDescriptor() throws DException { 39 if (initialized) { 40 return; 41 } 42 synchronized (this) { 43 if (constraints != null) 44 return; 45 constraints = new TreeMap(String.CASE_INSENSITIVE_ORDER); 46 constraint_column_mapping = new HashMap(4); 47 if (isSystemTable) { 48 if (!isdefered && dataDictionary.getSystemTableConstraint()) { 49 primaryConstraints = SystemConstraintsFactory.getPrimaryKeyConstraints(parameters[2].toString(), columnCharacteristics); 50 SystemConstraintsFactory.getUniqueKeyConstraints(parameters[2].toString(), constraints, columnCharacteristics); 51 } 52 } else { 53 _SelectQueryIterator constraintsIterator = isdefered 54 ? getIterator(preparedStatementGetter.getTableDescriptorExecuterForPrimaryAndUniqueConstraint(), parameters) 55 : getIterator(preparedStatementGetter.getTableDescriptorExecuterForPrimaryAndUniqueConstraintNonDef(), parameters); 56 57 if (constraintsIterator.first()) { 58 Object [] record = null; 59 try { 60 do { 61 TableConstraintDescriptor tableConstraintDescriptor = new TableConstraintDescriptor(); 62 UniqueConstraintDescriptor constraint = new UniqueConstraintDescriptor(); 63 record = (Object []) constraintsIterator.getObject(); 64 tableConstraintDescriptor.constraintDescriptor = constraint; 65 constraint.tableConstraintDescriptor = tableConstraintDescriptor; 66 tableConstraintDescriptor.loadDataFromRecord(record); 67 constraint.load(preparedStatementGetter, columnCharacteristics); 68 if (constraint.getType().equalsIgnoreCase(SqlKeywords.UNIQUE)) { 69 if (P.indexOfIgnoreCase(constraint.getColumnNames(), SystemFields.systemFields[SystemFields.rowId]) == -1) 70 constraints.put(tableConstraintDescriptor.constraint_name, constraint); 71 } else { 72 if (P.indexOfIgnoreCase(constraint.getColumnNames(), SystemFields.systemFields[SystemFields.rowId]) == -1) 73 primaryConstraints = constraint; 74 } 75 } while (constraintsIterator.next()); 76 } catch (NullPointerException ex) { 77 testing = true; 78 P.showIterator(constraintsIterator); 79 testing = false; 80 throw ex; 81 } 82 } 83 } 84 initialized = true; 85 } 86 87 } 88 89 public _UniqueConstraint getPrimaryConstraints() throws DException { 90 initializeConstraintDescriptor(); 91 return primaryConstraints; 92 } 93 94 95 96 97 98 99 100 public _UniqueConstraint[] getConstraints() throws DException { 101 _UniqueConstraint[] uniqueConstraints = getUniqueConstraints(); 102 if (primaryConstraints == null) 103 return uniqueConstraints; 104 if (uniqueConstraints == null) 105 return new _UniqueConstraint[] {primaryConstraints}; 106 int noOfUniqueConstraints = uniqueConstraints.length; 107 _UniqueConstraint[] allConstraints = new _UniqueConstraint[noOfUniqueConstraints + 1]; 108 System.arraycopy(uniqueConstraints, 0, allConstraints, 0, noOfUniqueConstraints); 109 allConstraints[noOfUniqueConstraints] = primaryConstraints; 110 return allConstraints; 111 } 112 113 public _UniqueConstraint[] getUniqueConstraints() throws DException { 114 initializeConstraintDescriptor(); 115 int constraintsCount = constraints.size(); 116 UniqueConstraintDescriptor[] deleteConstraints = constraintsCount == 0 ? null : 117 new UniqueConstraintDescriptor[constraintsCount]; 118 if (constraintsCount > 0) 119 constraints.values().toArray(deleteConstraints); 120 return deleteConstraints; 121 } 122 123 private _SelectQueryIterator getIterator(_Executer executer, Object [] parameters) throws DException { 124 return (_SelectQueryIterator) executer.executeForFresh(parameters); 125 } 126 } 127 | Popular Tags |