| 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 run(Object 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 36 } 37 38 setColumnConstraint(constraintDescriptor, currentSession); 39 41 constraintDescriptor.save(currentSession); constraintDes = constraintDescriptor; 43 return constraintDescriptor; 44 } 45 46 private void setColumnConstraint(TableConstraintDescriptor 47 tableConsDes, _ServerSession currentSession) throws DException { 48 String columnName = columnDescriptor.column_name; 49 if (_columnconstraint1 instanceof 50 SRESERVEDWORD1206543922SRESERVEDWORD1206543922) { 51 String type = (String ) _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 ) _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 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 [] {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 columnName) throws 100 DException { 101 tableConsDes.constraint_type = SqlKeywords.CHECK; 102 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 [] {columnDescriptor.column_name}); 135 } 136 137 private void setPrimaryKeyConstraint(TableConstraintDescriptor 138 constraintDescriptor, Object object) throws 139 DException { 140 setUniqueSpecification(constraintDescriptor, object, true, "PKC_"); 141 } 142 143 private void setNotNullConstraint(TableConstraintDescriptor 144 tableConsDes, 145 Object object, 146 String 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 [] {columnDescriptor.table_catalog, 161 columnDescriptor.table_schema, 162 columnDescriptor.table_name, columnName}); 163 nullCheckConstraint.setColumnsIncluded(columnsIncluded); 164 nullCheckConstraint.saveTableAndColumnIncluded = true; 165 } 166 167 171 172 private void setUniqueSpecification(TableConstraintDescriptor 173 tableConsDes, Object object, 174 boolean isPrimary, String name) throws 175 DException { 176 _ServerSession currentSession = (_ServerSession) object; 177 String 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 [] {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 toString() { 194 StringBuffer sb = new StringBuffer (); 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 clone() throws CloneNotSupportedException { 213 return this; 214 } 215 } 216 | Popular Tags |