KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition;
2
3 import java.util.*;
4
5 import com.daffodilwoods.daffodildb.server.serversystem.*;
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.tableexpression.fromclause.*;
9 import com.daffodilwoods.daffodildb.utils.*;
10 import com.daffodilwoods.database.resource.*;
11
12 public class columnconstraintdefinition {
13    public constraintcharacteristics _Optconstraintcharacteristics0;
14    public columnconstraint _columnconstraint1;
15    public constraintnamedefinition _Optconstraintnamedefinition2;
16
17    private ColumnDescriptor columnDescriptor;
18    private TableConstraintDescriptor constraintDes = null;
19    private boolean found = false;
20
21    public void setColumnDescriptor(_Descriptor columnDes) throws DException {
22       columnDescriptor = (ColumnDescriptor) columnDes;
23    }
24
25    public Object JavaDoc run(Object JavaDoc object) throws DException {
26       _ServerSession currentSession = (_ServerSession) object;
27       TableConstraintDescriptor constraintDescriptor = new TableConstraintDescriptor();
28       constraintDescriptor.setTableDescriptor(columnDescriptor.tableDescriptor);
29       if (_Optconstraintcharacteristics0 != null) {
30          _Optconstraintcharacteristics0.setConstraintCharacterstics(constraintDescriptor);
31       }
32       if (_Optconstraintnamedefinition2 != null) {
33          _Optconstraintnamedefinition2.setTableConstraintName(constraintDescriptor);
34       } else {
35          /** @todo each type of constaint generate its own constaint name */
36       }
37
38       setColumnConstraint(constraintDescriptor, currentSession);
39       /** @todo consider if the following check can be removed
40        * taking into consideration foreign table key column */

41       constraintDescriptor.save(currentSession); // confirm later
42
constraintDes = constraintDescriptor;
43       return constraintDescriptor;
44    }
45
46    private void setColumnConstraint(TableConstraintDescriptor
47                                     tableConsDes, _ServerSession currentSession) throws DException {
48       String JavaDoc columnName = columnDescriptor.column_name;
49       if (_columnconstraint1 instanceof
50           SRESERVEDWORD1206543922SRESERVEDWORD1206543922) {
51          String JavaDoc type = (String JavaDoc) _columnconstraint1.run(null);
52          if (type.equalsIgnoreCase(SqlKeywords.PRIMARY + " " + SqlKeywords.KEY)) {
53             tableConsDes.constraint_type = type;
54             setPrimaryKeyConstraint(tableConsDes, currentSession);
55          } else {
56             setNotNullConstraint(tableConsDes, currentSession, columnName);
57          }
58       } else if (_columnconstraint1 instanceof uniquespecification) {
59          tableConsDes.constraint_type = (String JavaDoc) _columnconstraint1.run(null);
60          setUniqueSpecification(tableConsDes, currentSession, false, "UKC_");
61       } else if (_columnconstraint1 instanceof checkconstraintdefinition) {
62          setCheckConstraint(tableConsDes, currentSession, columnName);
63       } else if (_columnconstraint1 instanceof referencesspecification) {
64          setReferenceSpecification(tableConsDes, currentSession, columnName);
65       }
66    }
67
68    private void setReferenceSpecification(TableConstraintDescriptor
69                                           tableConsDes,
70                                           _ServerSession currentSession,
71                                           String JavaDoc columnName) throws DException {
72       tableConsDes.constraint_type = SqlSchemaConstants.ForeignKey;
73       if (tableConsDes.constraint_name == null) {
74          tableConsDes.setGeneratedConstraintName(currentSession, "FKC_");
75       }
76       ReferentialConstraintDescriptor referentialConstraint = new
77           ReferentialConstraintDescriptor();
78       referentialConstraint.tableConstraintDescriptor = tableConsDes;
79       referentialConstraint.constraint_catalog = tableConsDes.constraint_catalog;
80       referentialConstraint.constraint_schema = tableConsDes.constraint_schema;
81       referentialConstraint.constraint_name = tableConsDes.constraint_name;
82
83       referentialconstraintdefinition rcd = new referentialconstraintdefinition();
84       rcd.setTableConstraintDescriptor(tableConsDes);
85       ArrayList constraintColumnDescriptors = rcd.
86           getKeyColumnUsageDescriptors(new Object JavaDoc[] {columnName});
87       tableConsDes.setConstraintColumnDescriptors(constraintColumnDescriptors);
88
89       referencesspecification referenceSpecification = (referencesspecification)
90           _columnconstraint1;
91       referenceSpecification.setConstraintDescriptor(referentialConstraint);
92       referenceSpecification.run(currentSession);
93
94       tableConsDes.setConstraintDescriptor(referentialConstraint);
95       constraintDes = tableConsDes;
96    }
97
98    private void setCheckConstraint(TableConstraintDescriptor
99                                    tableConsDes, _ServerSession currentSession, String JavaDoc columnName) throws
100        DException {
101       tableConsDes.constraint_type = SqlKeywords.CHECK;
102       /** @todo
103        * remove this check as it is ther in check constraint definition
104        * */

105       if (tableConsDes.constraint_name == null) {
106          tableConsDes.setGeneratedConstraintName(currentSession, "CHECKC_");
107       }
108       checkconstraintdefinition checkConstraint = (checkconstraintdefinition) _columnconstraint1;
109       checkConstraint.setTableConstraintDescriptor(tableConsDes);
110       ColumnDetails cds[] = checkConstraint._searchcondition1.getColumnDetails();
111       checkConstraintValidityOnColumnLevel(cds);
112       checkConstraint.run(currentSession);
113    }
114
115    private void checkConstraintValidityOnColumnLevel(ColumnDetails[] cds) throws DException {
116       int count = 0;
117       for (int i = 0; i < cds.length; i++) {
118          if (cds[i].getType() == cds[i].CONSTANT) {
119             count++;
120             continue;
121          }
122          if (cds[i].getType() == cds[i].REFERENCE) {
123             if (columnDescriptor.column_name.equalsIgnoreCase(cds[i].getColumn())) {
124                found = true;
125             }
126          } else {
127             ColumnDetails[] asd = cds[i].getExistingColumnDetails();
128             if (asd != null) {
129                checkConstraintValidityOnColumnLevel(asd);
130             }
131          }
132       }
133       if (!found && count != cds.length)
134          throw new DException("DSE8158", new Object JavaDoc[] {columnDescriptor.column_name});
135    }
136
137    private void setPrimaryKeyConstraint(TableConstraintDescriptor
138                                         constraintDescriptor, Object JavaDoc object) throws
139        DException {
140       setUniqueSpecification(constraintDescriptor, object, true, "PKC_");
141    }
142
143    private void setNotNullConstraint(TableConstraintDescriptor
144                                      tableConsDes,
145                                      Object JavaDoc object,
146                                      String JavaDoc columnName) throws DException {
147       _ServerSession currentSession = (_ServerSession) object;
148       tableConsDes.constraint_type = SqlKeywords.CHECK;
149       if (tableConsDes.constraint_name == null) {
150          tableConsDes.setGeneratedConstraintName(currentSession, "CHECKC_");
151       }
152       CheckConstraintDescriptor nullCheckConstraint = new CheckConstraintDescriptor();
153       nullCheckConstraint.constraint_catalog = tableConsDes.constraint_catalog;
154       nullCheckConstraint.constraint_schema = tableConsDes.constraint_schema;
155       nullCheckConstraint.constraint_name = tableConsDes.constraint_name;
156       nullCheckConstraint.check_clause = QuotedUtility.getUserIdentifier(
157           columnName) + " is not null";
158       tableConsDes.setConstraintDescriptor(nullCheckConstraint);
159       ArrayList columnsIncluded = new ArrayList();
160       columnsIncluded.add(new String JavaDoc[] {columnDescriptor.table_catalog,
161                           columnDescriptor.table_schema,
162                           columnDescriptor.table_name, columnName});
163       nullCheckConstraint.setColumnsIncluded(columnsIncluded);
164       nullCheckConstraint.saveTableAndColumnIncluded = true;
165    }
166
167    /**
168     * to recheck this method while reviewing
169     * uniquespecificationSleftparen653880241uniquecolumnlistSrightparen_1874859514
170     */

171
172    private void setUniqueSpecification(TableConstraintDescriptor
173                                        tableConsDes, Object JavaDoc object,
174                                        boolean isPrimary, String JavaDoc name) throws
175        DException {
176       _ServerSession currentSession = (_ServerSession) object;
177       String JavaDoc columnName = columnDescriptor.column_name;
178       uniquespecificationSleftparen653880241uniquecolumnlistSrightparen_1874859514
179           uniqueConstraint = new
180           uniquespecificationSleftparen653880241uniquecolumnlistSrightparen_1874859514();
181
182       uniqueConstraint.setTableConstraintDescriptor(tableConsDes);
183       if (isPrimary)
184          uniqueConstraint.checkPrimaryExistance(currentSession);
185       ArrayList constraintColumnDescriptors = uniqueConstraint.
186           getKeyColumnUsageDescriptors(new Object JavaDoc[] {columnName});
187       if (tableConsDes.constraint_name == null)
188          tableConsDes.setGeneratedConstraintName(currentSession, name);
189       tableConsDes.setConstraintColumnDescriptors(constraintColumnDescriptors);
190       uniqueConstraint.createIndex(object, isPrimary);
191    }
192
193    public String JavaDoc toString() {
194       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
195       sb.append(" ");
196       if (_Optconstraintnamedefinition2 != null) {
197          sb.append(_Optconstraintnamedefinition2);
198       }
199       sb.append(" ");
200       sb.append(_columnconstraint1);
201       sb.append(" ");
202       if (_Optconstraintcharacteristics0 != null) {
203          sb.append(_Optconstraintcharacteristics0);
204       }
205       return sb.toString();
206    }
207
208    public TableConstraintDescriptor getTableConstraintDescriptor() {
209       return constraintDes;
210    }
211
212    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
213       return this;
214    }
215 }
216
Popular Tags