KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > datadictionarysystem > PrimaryAndUniqueConstraintCharacteristics


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 JavaDoc[] 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 JavaDoc[] {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 JavaDoc[] record = null;
59                try {
60                   do {
61                      TableConstraintDescriptor tableConstraintDescriptor = new TableConstraintDescriptor();
62                      UniqueConstraintDescriptor constraint = new UniqueConstraintDescriptor();
63                      record = (Object JavaDoc[]) 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 JavaDoc 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 JavaDoc[] parameters) throws DException {
124       return (_SelectQueryIterator) executer.executeForFresh(parameters);
125    }
126 }
127
Popular Tags