KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > ddl > schemadefinition > uniquespecificationSleftparen653880241uniquecolumnlistSrightparen_1874859514


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition;
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.sql99.common.*;
8 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*;
9 import com.daffodilwoods.daffodildb.server.sql99.ddl.utility.*;
10 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
11 import com.daffodilwoods.daffodildb.server.sql99.token.*;
12 import com.daffodilwoods.daffodildb.utils.parser.*;
13 import com.daffodilwoods.database.resource.*;
14
15 public class
16     uniquespecificationSleftparen653880241uniquecolumnlistSrightparen_1874859514 implements uniqueconstraintdefinition {
17    public Srightparen_1874859514 _Srightparen_18748595140;
18    public uniquecolumnlist _uniquecolumnlist1;
19    public Sleftparen653880241 _Sleftparen6538802412;
20    public uniquespecification _uniquespecification3;
21
22    private TableConstraintDescriptor tableConsDes;
23
24    public void setTableConstraintDescriptor(_Descriptor tableConsDes0) throws
25        DException {
26       tableConsDes = (TableConstraintDescriptor) tableConsDes0;
27    }
28
29    /** @todo algo
30     initialize the variable currentSession
31     setConstraintType()
32     checkPrimaryKeyExistence() -- if type is primary;
33     setConstraintColumns() --
34     createIndex()
35     */

36
37    public Object JavaDoc run(Object JavaDoc object) throws DException {
38       _ServerSession currentSession = (_ServerSession) object;
39       String JavaDoc constraint_type = (String JavaDoc) _uniquespecification3.run(null);
40       tableConsDes.constraint_type = constraint_type;
41       boolean isPrimaryKey = tableConsDes.constraint_type.equalsIgnoreCase(SqlSchemaConstants.PrimaryKey);
42       if (isPrimaryKey) {
43          checkPrimaryExistance(currentSession);
44       }
45       checkPrimaryORUniqueConstraintValidity(tableConsDes.constraint_type, currentSession);
46       if (tableConsDes.constraint_name == null) {
47          tableConsDes.setGeneratedConstraintName(currentSession, isPrimaryKey ? "PKC_" : "UKC_");
48       }
49       checkForAlreadyConstraints(currentSession);
50       storeConstraintColumns(currentSession, isPrimaryKey);
51       createIndex(object, isPrimaryKey);
52       return null;
53    }
54
55    public void checkForAlreadyConstraints(_ServerSession currentSession) throws DException {
56       if (tableConsDes.tableDescriptor.isAlterTable) {
57          _Iterator iter = checkUniqueORPrimaryExistance(currentSession);
58          if (iter.first()) {
59             ArrayList arr = new ArrayList();
60             Object JavaDoc[] values = (Object JavaDoc[]) iter.getColumnValues();
61             String JavaDoc constraintName = values[0].toString();
62             arr.add(values[1]);
63             while (iter.next()) {
64                values = (Object JavaDoc[]) iter.getColumnValues();
65                if (values[0].toString().equalsIgnoreCase(constraintName)) {
66                   arr.add(values[1]);
67                } else {
68                   tableConsDes.tableDescriptor.constraintMap.put(constraintName, arr);
69                   constraintName = values[0].toString();
70                   arr = new ArrayList();
71                   arr.add(values[1]);
72                }
73             }
74             tableConsDes.tableDescriptor.constraintMap.put(values[0].toString(), arr);
75          }
76
77          Object JavaDoc[] columns = (Object JavaDoc[]) _uniquecolumnlist1.run(null);
78          Iterator iter1 = tableConsDes.tableDescriptor.constraintMap.values().iterator();
79          while (iter1.hasNext()) {
80             ArrayList mapColumns = (ArrayList) iter1.next();
81             if (mapColumns.size() == columns.length) {
82                int count = 0;
83                for (int i = 0; i < mapColumns.size(); i++) {
84                   if (mapColumns.get(i).toString().equalsIgnoreCase(columns[i].toString()))
85                      count++;
86                }
87                if (count == columns.length)
88                   throw new DException("DSE8161", new Object JavaDoc[] {tableConsDes.table_name});
89             }
90          }
91       } else {
92          Object JavaDoc[] columns = (Object JavaDoc[]) _uniquecolumnlist1.run(null);
93          ArrayList constraintColumns = new ArrayList();
94          constraintColumns.add(Arrays.asList(columns));
95          Iterator iter1 = tableConsDes.tableDescriptor.constraintMap.values().iterator();
96          if (iter1.hasNext()) {
97             do {
98                ArrayList mapColumns = (ArrayList) iter1.next();
99                if (constraintColumns.size() == mapColumns.size()) {
100                   int count = 0;
101                   for (int i = 0; i < mapColumns.size(); i++) {
102                      if (constraintColumns.get(i).toString().equalsIgnoreCase(mapColumns.get(i).toString()))
103                         count++;
104                   }
105                   if (count == constraintColumns.size())
106                      throw new DException("DSE8161", new Object JavaDoc[] {tableConsDes.table_name});
107                }
108             } while (iter1.hasNext());
109          }
110          tableConsDes.tableDescriptor.constraintMap.put(tableConsDes.constraint_name, constraintColumns);
111       }
112    } // done by harvinder over
113

114    private void storeConstraintColumns(_ServerSession currentSession, boolean isPrimaryKey) throws
115        DException {
116       Object JavaDoc[] columns = (Object JavaDoc[]) _uniquecolumnlist1.run(null);
117       ArrayList constraintColumnDescriptors = getKeyColumnUsageDescriptors(
118           columns);
119       tableConsDes.setConstraintColumnDescriptors(constraintColumnDescriptors);
120       if (isPrimaryKey) {
121          setIsNullableColumnProperty(currentSession);
122       }
123    }
124
125    public void createIndex(Object JavaDoc object, boolean isPrimaryKey) throws DException {
126       ArrayList columnsList = tableConsDes.getConstraintColumns();
127       String JavaDoc tableName = tableConsDes.getTable();
128       String JavaDoc indexName = ( (_ServerSession) object).getDataDictionary().generateIndexName();
129       String JavaDoc query = QueryMaker.getCreateIndexQuery(tableConsDes.tableDescriptor.getQualifiedTableName(), columnsList, indexName);
130       if (isPrimaryKey) {
131          tableConsDes.tableDescriptor.primarKeyCreated = true;
132       }
133       indexdefinition parsedObject = (indexdefinition) Parser.parseQuery(query);
134       parsedObject.setTableDescriptor(tableConsDes.tableDescriptor);
135       parsedObject.indexTableName = indexName + "_Index";
136       try {
137          parsedObject.run(object);
138       } catch (DException ex) {
139          if (!ex.getDseCode().equalsIgnoreCase("DSE8050")) {
140             throw ex;
141          }
142       }
143    }
144
145    public void checkPrimaryExistance(_ServerSession serverSession) throws DException {
146       _Iterator iter = (_Iterator) ( (DataDictionary) serverSession.getDataDictionary()).getPreparedStatementGetter().
147           getTableConstraintExecuterForPrimaryKey().executeForFresh(new Object JavaDoc[] {tableConsDes.table_catalog, tableConsDes.table_schema, tableConsDes.table_name});
148       if (iter.first()) {
149          throw new DException("DSE1205", new Object JavaDoc[] {tableConsDes.tableDescriptor.getQualifiedTableName().getIdentifier()});
150       }
151    }
152
153    public _Iterator checkUniqueORPrimaryExistance(_ServerSession serverSession) throws
154        DException {
155       String JavaDoc query = QueryMaker.getUniqueORPrimaryConstraintQuery();
156       _Iterator iter = SqlSchemaConstants.getIterator(serverSession, query,
157           new Object JavaDoc[] {tableConsDes.table_catalog,
158           tableConsDes.table_schema,
159           tableConsDes.table_name});
160       return iter;
161    }
162
163    public ArrayList getKeyColumnUsageDescriptors(Object JavaDoc[] columns) throws DException {
164       int columnCount = columns.length;
165       ArrayList constraintColumnDescriptors = new ArrayList(columnCount);
166       tableConsDes.constraint_type.
167           equalsIgnoreCase(SqlSchemaConstants.PrimaryKey);
168
169       for (int i = 0; i < columnCount; i++) {
170          String JavaDoc columnName = (String JavaDoc) columns[i];
171
172          ColumnDescriptor columnDescriptor = tableConsDes.
173              tableDescriptor.getColumnDescriptor(columnName);
174          if (columnDescriptor.dataTypeDescriptor.isStringLargeObjectOrArrayType()) {
175             throw new DException("DSE1083", new Object JavaDoc[] {columnName,
176                                  columnDescriptor.dataTypeDescriptor.data_Type});
177          }
178
179          KeyColumnUsageDescriptor keyColUsageDes = new KeyColumnUsageDescriptor();
180          keyColUsageDes.column_name = columnName;
181          keyColUsageDes.ordinal_position = i + 1;
182
183          keyColUsageDes.constraint_catalog = tableConsDes.constraint_catalog;
184          keyColUsageDes.constraint_schema = tableConsDes.constraint_schema;
185          keyColUsageDes.constraint_name = tableConsDes.constraint_name;
186
187          keyColUsageDes.table_catalog = tableConsDes.table_catalog;
188          keyColUsageDes.table_schema = tableConsDes.table_schema;
189          keyColUsageDes.table_name = tableConsDes.table_name;
190          constraintColumnDescriptors.add(keyColUsageDes);
191       }
192       return constraintColumnDescriptors;
193    }
194
195    private void setIsNullableColumnProperty(_ServerSession currentSession) throws DException {
196       ArrayList primaryKeysColumns = tableConsDes.getConstraintColumns();
197       Object JavaDoc[] values = new Object JavaDoc[] {SqlSchemaConstants.NO};
198
199       for (int i = 0; i < primaryKeysColumns.size(); i++) {
200          ColumnDescriptor columnDescriptor = tableConsDes.
201              tableDescriptor.getColumnDescriptor( (String JavaDoc) primaryKeysColumns.
202                                                  get(i));
203          int[] columns = new int[] {SystemTablesFields.columns_is_nullable};
204          if (columnDescriptor.isNullable.equalsIgnoreCase(SqlSchemaConstants.YES)) {
205             columnDescriptor.update(currentSession, columns, values);
206          }
207       }
208    }
209
210    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
211       return this;
212    }
213
214    public String JavaDoc toString() {
215       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
216       sb.append(" ");
217       sb.append(_uniquespecification3);
218       sb.append(" ");
219       sb.append(_Sleftparen6538802412);
220       sb.append(" ");
221       sb.append(_uniquecolumnlist1);
222       sb.append(" ");
223       sb.append(_Srightparen_18748595140);
224       return sb.toString();
225    }
226
227    /**
228     * Write a new method related to bug 12307 by harvinder */

229    private void checkPrimaryORUniqueConstraintValidity(String JavaDoc constraint_type, _ServerSession currentSession) throws DException {
230       if (!tableConsDes.tableDescriptor.isAlterTable) {
231          if (constraint_type.equalsIgnoreCase(SqlSchemaConstants.PrimaryKey) ||
232              constraint_type.equalsIgnoreCase(SqlKeywords.UNIQUE)) {
233             String JavaDoc query = QueryMaker.getUniqueORPrimaryConstraintQuery();
234             _Iterator iter = SqlSchemaConstants.getIterator(currentSession, query,
235                 new Object JavaDoc[] {tableConsDes.table_catalog, tableConsDes.table_schema, tableConsDes.table_name});
236             if (iter.first()) {
237                ArrayList arr = new ArrayList();
238                Object JavaDoc[] values = (Object JavaDoc[]) iter.getColumnValues();
239                String JavaDoc constraintName = values[0].toString();
240                arr.add(values[1]);
241                while (iter.next()) {
242                   values = (Object JavaDoc[]) iter.getColumnValues();
243                   if (values[0].toString().equalsIgnoreCase(constraintName)) {
244                      arr.add(values[1]);
245                   } else {
246                      tableConsDes.tableDescriptor.constraintMap.put(constraintName, arr);
247                      constraintName = values[0].toString();
248                      arr = new ArrayList();
249                      arr.add(values[1]);
250                   }
251                }
252                tableConsDes.tableDescriptor.constraintMap.put(values[0].toString(), arr);
253             }
254
255             Object JavaDoc[] columns = (Object JavaDoc[]) _uniquecolumnlist1.run(null);
256             Iterator iter1 = tableConsDes.tableDescriptor.constraintMap.values().iterator();
257             while (iter1.hasNext()) {
258                ArrayList mapColumns = (ArrayList) iter1.next();
259                if (mapColumns.size() == columns.length) {
260                   int count = 0;
261                   for (int i = 0; i < mapColumns.size(); i++) {
262                      if (mapColumns.get(i).toString().equalsIgnoreCase(columns[i].toString()))
263                         count++;
264                   }
265                   if (count == columns.length)
266                      throw new DException("DSE8187", new Object JavaDoc[] {tableConsDes.table_name});
267                }
268             }
269          }
270       }
271    }
272 }
273
Popular Tags