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 36 37 public Object run(Object object) throws DException { 38 _ServerSession currentSession = (_ServerSession) object; 39 String constraint_type = (String ) _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 [] values = (Object []) iter.getColumnValues(); 61 String constraintName = values[0].toString(); 62 arr.add(values[1]); 63 while (iter.next()) { 64 values = (Object []) 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 [] columns = (Object []) _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 [] {tableConsDes.table_name}); 89 } 90 } 91 } else { 92 Object [] columns = (Object []) _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 [] {tableConsDes.table_name}); 107 } 108 } while (iter1.hasNext()); 109 } 110 tableConsDes.tableDescriptor.constraintMap.put(tableConsDes.constraint_name, constraintColumns); 111 } 112 } 114 private void storeConstraintColumns(_ServerSession currentSession, boolean isPrimaryKey) throws 115 DException { 116 Object [] columns = (Object []) _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 object, boolean isPrimaryKey) throws DException { 126 ArrayList columnsList = tableConsDes.getConstraintColumns(); 127 String tableName = tableConsDes.getTable(); 128 String indexName = ( (_ServerSession) object).getDataDictionary().generateIndexName(); 129 String 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 [] {tableConsDes.table_catalog, tableConsDes.table_schema, tableConsDes.table_name}); 148 if (iter.first()) { 149 throw new DException("DSE1205", new Object [] {tableConsDes.tableDescriptor.getQualifiedTableName().getIdentifier()}); 150 } 151 } 152 153 public _Iterator checkUniqueORPrimaryExistance(_ServerSession serverSession) throws 154 DException { 155 String query = QueryMaker.getUniqueORPrimaryConstraintQuery(); 156 _Iterator iter = SqlSchemaConstants.getIterator(serverSession, query, 157 new Object [] {tableConsDes.table_catalog, 158 tableConsDes.table_schema, 159 tableConsDes.table_name}); 160 return iter; 161 } 162 163 public ArrayList getKeyColumnUsageDescriptors(Object [] 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 columnName = (String ) columns[i]; 171 172 ColumnDescriptor columnDescriptor = tableConsDes. 173 tableDescriptor.getColumnDescriptor(columnName); 174 if (columnDescriptor.dataTypeDescriptor.isStringLargeObjectOrArrayType()) { 175 throw new DException("DSE1083", new Object [] {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 [] values = new Object [] {SqlSchemaConstants.NO}; 198 199 for (int i = 0; i < primaryKeysColumns.size(); i++) { 200 ColumnDescriptor columnDescriptor = tableConsDes. 201 tableDescriptor.getColumnDescriptor( (String ) 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 clone() throws CloneNotSupportedException { 211 return this; 212 } 213 214 public String toString() { 215 StringBuffer sb = new StringBuffer (); 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 229 private void checkPrimaryORUniqueConstraintValidity(String 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 query = QueryMaker.getUniqueORPrimaryConstraintQuery(); 234 _Iterator iter = SqlSchemaConstants.getIterator(currentSession, query, 235 new Object [] {tableConsDes.table_catalog, tableConsDes.table_schema, tableConsDes.table_name}); 236 if (iter.first()) { 237 ArrayList arr = new ArrayList(); 238 Object [] values = (Object []) iter.getColumnValues(); 239 String constraintName = values[0].toString(); 240 arr.add(values[1]); 241 while (iter.next()) { 242 values = (Object []) 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 [] columns = (Object []) _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 [] {tableConsDes.table_name}); 267 } 268 } 269 } 270 } 271 } 272 } 273 | Popular Tags |