KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.datadictionarysystem;
2
3 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator;
4
5 import java.util.*;
6 import com.daffodilwoods.database.resource.*;
7 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
8 import com.daffodilwoods.database.general.*;
9 import com.daffodilwoods.database.utility.P;
10 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
11 import com.daffodilwoods.daffodildb.server.sql99.common.SqlKeywords;
12 import com.daffodilwoods.daffodildb.server.sql99._Executer;
13 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
14 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference;
15 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*;
16 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._SelectQueryIterator;
17
18 public class ReferencedConstraintCharacteristics implements _ReferencedConstraintCharacteristics {
19
20    private PreparedStatementGetter preparedStatementGetter;
21    private TreeMap constraints;
22    transient HashMap constraint_column_mapping;
23    private Object JavaDoc[] parameters;
24    private _DataDictionary dataDictionary;
25    private boolean initialized;
26    private boolean isDefered;
27    private boolean isSystemTable;
28
29    public ReferencedConstraintCharacteristics(QualifiedIdentifier tableName, PreparedStatementGetter preparedStatementGetter0, boolean deferable, _DataDictionary dataDictionary) 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       this.dataDictionary = dataDictionary;
35    }
36
37    private void initializeConstraintDescriptor() throws DException {
38       if (initialized)
39          return;
40       synchronized (this) {
41          if (constraints != null)
42             return;
43          constraints = new TreeMap(String.CASE_INSENSITIVE_ORDER);
44          constraint_column_mapping = new HashMap(4);
45          if (!isSystemTable) {
46             _SelectQueryIterator constraintsIterator = isDefered
47                 ? getIterator(preparedStatementGetter.getReferencedConstraintsJoinExecuter(), parameters)
48                 : getIterator(preparedStatementGetter.getReferencedConstraintsJoinExecuterNonDef(), parameters);
49             if (constraintsIterator.first()) {
50                Object JavaDoc[] record = null;
51                do {
52                   TableConstraintDescriptor tableConstraintDescriptor = new TableConstraintDescriptor();
53                   ReferentialConstraintDescriptor constraint = new ReferentialConstraintDescriptor();
54                   record = (Object JavaDoc[]) constraintsIterator.getObject();
55                   constraint.tableConstraintDescriptor = tableConstraintDescriptor;
56                   tableConstraintDescriptor.constraintDescriptor = constraint;
57                   constraint.load(preparedStatementGetter, record, dataDictionary);
58                   constraints.put(constraint.constraint_name, constraint);
59                } while (constraintsIterator.next());
60             }
61          }
62          initialized = true;
63       }
64    }
65
66    public _ReferentialConstraint[] getReferencedConstraintsForUpdate(int[] columns) throws DException {
67       return getInsertConstraints(columns);
68    }
69
70    public _ReferentialConstraint[] getReferencedConstraintsForDelete() throws DException {
71       initializeConstraintDescriptor();
72       int constraintsCount = constraints.size();
73       ReferentialConstraintDescriptor[] deleteConstraints = constraintsCount == 0 ? null :
74           new ReferentialConstraintDescriptor[constraintsCount];
75       if (constraintsCount > 0)
76          constraints.values().toArray(deleteConstraints);
77       return deleteConstraints;
78    }
79
80    private ReferentialConstraintDescriptor[] getInsertConstraints(int[] columns) throws DException {
81       initializeConstraintDescriptor();
82       ArrayList constraintsToBeReturned = new ArrayList(4);
83       for (int i = 0; i < columns.length; i++) {
84          ReferentialConstraintDescriptor[] effectedConstraints = getConstraintsUsingColumn(columns[i]);
85          if (effectedConstraints != null)
86             for (int j = 0; j < effectedConstraints.length; j++) {
87                int size = constraintsToBeReturned.size();
88                boolean contains = false;
89                for (int k = 0; k < size; k++) {
90                   ReferentialConstraintDescriptor rcd = (ReferentialConstraintDescriptor) constraintsToBeReturned.get(k);
91                   if (effectedConstraints[j].constraint_name.equalsIgnoreCase(rcd.constraint_name)) {
92                      contains = true;
93                      break;
94                   }
95                }
96                if (!contains)
97                   constraintsToBeReturned.add(effectedConstraints[j]);
98             }
99       }
100       return constraintsToBeReturned.size() == 0 ? null : (ReferentialConstraintDescriptor[]) constraintsToBeReturned.toArray(new ReferentialConstraintDescriptor[0]);
101    }
102
103    private ReferentialConstraintDescriptor[] getConstraintsUsingColumn(int columnIndex) throws DException {
104       Integer JavaDoc key = new Integer JavaDoc(columnIndex);
105       if (constraint_column_mapping.containsKey(key))
106          return (ReferentialConstraintDescriptor[]) constraint_column_mapping.get(key);
107
108       ArrayList effectedConstraints = new ArrayList(3);
109       Iterator iterator = constraints.values().iterator();
110       while (iterator.hasNext()) {
111          ReferentialConstraintDescriptor constraint = (ReferentialConstraintDescriptor) iterator.next();
112          TableConstraintDescriptor tcd = constraint.referencedTableConstraintDescriptor;
113          if (tcd.isConstraintColumn(columnIndex))
114             effectedConstraints.add(constraint);
115       }
116       ReferentialConstraintDescriptor[] constraintsArray = null;
117       if (effectedConstraints.size() != 0) {
118          constraintsArray = new ReferentialConstraintDescriptor[effectedConstraints.size()];
119          effectedConstraints.toArray(constraintsArray);
120       }
121       constraint_column_mapping.put(key, constraintsArray);
122       return constraintsArray;
123    }
124
125
126
127    private _SelectQueryIterator getIterator(_Executer executer, Object JavaDoc[] parameters) throws DException {
128       return (_SelectQueryIterator) executer.executeForFresh(parameters);
129    }
130 }
131
Popular Tags