1 package com.daffodilwoods.daffodildb.server.sql99.dcl.sqltransactionstatement; 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.sessionsystem.*; 8 import com.daffodilwoods.daffodildb.server.sql99.ddl.descriptors.*; 9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*; 10 import com.daffodilwoods.daffodildb.server.sql99.token.*; 11 import com.daffodilwoods.daffodildb.utils.field.*; 12 import com.daffodilwoods.database.general.*; 13 import com.daffodilwoods.database.resource.*; 14 15 public class setconstraintsmodestatement implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, SQLtransactionstatement { 16 17 public constrainttype _constrainttype0; 18 public constraintnamelist _constraintnamelist1; 19 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222; 20 public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223; 21 22 public Object run(Object object) throws com.daffodilwoods.database.resource.DException { 23 _ServerSession serverSession = (_ServerSession) object; 24 HashMap matchingConstraints = new HashMap(); 25 HashMap conflictingConstraints = new HashMap(); 26 intializeMaps(object, matchingConstraints, conflictingConstraints); 27 Object ob = new Object [] {matchingConstraints, conflictingConstraints}; 28 UserSession userSession = (UserSession) serverSession.getUserSession(); 29 userSession.setConstraintStatus(ob, (String ) _constrainttype0.run(object)); 30 return null; 31 } 32 33 private void intializeMaps(Object object, HashMap matching, HashMap conflicting) throws DException { 34 Object ob = getConstraintNames(object); 35 String query = getQuery(object, ob); 36 _Iterator iterator = (_Iterator) ( (_ServerSession) object) 37 .getSystemServerSession().execute(query, 0); 38 if (!iterator.first()) { 39 throw new DException("DSE5540", null); 40 } 41 int count = 0; 42 do { 43 Object [] data = (Object []) iterator.getColumnValues(); 44 QualifiedIdentifier tableName = new QualifiedIdentifier( 45 (String ) ( (FieldBase) (data[SystemTablesFields.table_constraints_table_catalog])).getObject(), 46 (String ) ( (FieldBase) (data[SystemTablesFields.table_constraints_table_schema])).getObject(), 47 (String ) ( (FieldBase) (data[SystemTablesFields.table_constraints_table_name])).getObject() 48 ); 49 String constraintName = (String ) ( (FieldBase) (data[SystemTablesFields.table_constraints_constraint_name])).getObject(); 50 if (ob != null) { 51 count++; 52 } 53 boolean isSavedDeferred = ( (String ) ( (FieldBase) (data[SystemTablesFields.table_constraints_initially_deferred])).getObject()).equalsIgnoreCase("YES"); 54 boolean isRequiredDeferred = isInitiallyDeferred(); 55 if ( (isSavedDeferred && isInitiallyDeferred()) || 56 (!isSavedDeferred && !isInitiallyDeferred())) { 57 addConstraintNameInCorrespondingMap(matching, tableName, constraintName); 58 } else { 59 addConstraintNameInCorrespondingMap(conflicting, tableName, constraintName); 60 } 61 } while (iterator.next()); 62 if (ob != null) { 63 Object [] names = (Object []) ob; 64 if (count != names.length) { 65 throw new DException("DSE5540", null); 66 } 67 } 68 } 69 70 private void addConstraintNameInCorrespondingMap(HashMap matchingOrConflicting, Object key, Object value) throws DException { 71 Object keyValues = matchingOrConflicting.get(key); 72 if (keyValues == null) { 73 ArrayList list = new ArrayList(); 74 list.add(value); 75 matchingOrConflicting.put(key, list); 76 return; 77 } 78 ArrayList list = (ArrayList) keyValues; 79 if (list == null) { 80 list = new ArrayList(); 81 list.add(value); 82 matchingOrConflicting.put(key, list); 83 } else { 84 list.add(value); } 86 } 87 88 private void setConstraintsMode(Object [] constraintsName, String mode, _UserSession userSession) throws com.daffodilwoods.database.resource.DException { 89 for (int i = 0; i < constraintsName.length; i++) { 90 userSession.setConstraintStatus(constraintsName[i], mode); 91 } 92 } 93 94 private String getQuery(Object object, Object ob) throws DException { 95 StringBuffer sb = new StringBuffer (); 96 sb.append(" Select * from ") 97 .append(SystemTables.table_constraints_TableName) 98 .append(" where is_deferrable = 'YES'"); 99 if (ob == null) { return sb.toString(); 101 } 102 103 QualifiedIdentifier[] constraintsNames = (QualifiedIdentifier[]) ob; 104 ArrayList catalogs = new ArrayList(); 105 sb.append(" and constraint_catalog in ( "); 106 for (int i = 0, len = constraintsNames.length; i < len; i++) { 107 if (catalogs.contains(constraintsNames[i].catalog)) { 108 continue; 109 } 110 sb.append("'" + constraintsNames[i].catalog + "'"); 111 catalogs.add(constraintsNames[i].catalog); 112 if (catalogs.size() > 1) { 113 sb.append(" , "); 114 } 115 } 116 sb.append(" ) "); 117 sb.append(" and constraint_schema in ( "); 118 ArrayList schemas = new ArrayList(); 119 for (int i = 0, len = constraintsNames.length; i < len; i++) { 120 if (schemas.contains(constraintsNames[i].schema)) { 121 continue; 122 } 123 sb.append("'" + constraintsNames[i].schema + "'"); 124 schemas.add(constraintsNames[i].schema); 125 if (schemas.size() > 1) { 126 sb.append(" , "); 127 } 128 } 129 sb.append(" ) "); 130 sb.append(" and constraint_name in ( "); 131 for (int i = 0, len = constraintsNames.length; i < len; i++) { 132 sb.append("'" + constraintsNames[i].name + "'"); 133 if (i != (len - 1)) { 134 sb.append(" , "); 135 } 136 } 137 sb.append(" ) "); 138 return sb.toString(); 139 } 140 141 private Object getConstraintNames(Object object) throws DException { 142 Object constraintList = _constraintnamelist1.run(object); 143 try { 144 String allConstraints = (String ) constraintList; 145 if (allConstraints.equalsIgnoreCase("all")) { 146 return null; 147 } 148 } catch (ClassCastException clExp) { 149 return constraintList; 150 } 151 return null; 152 } 153 154 public String toString() { 155 StringBuffer sb = new StringBuffer (); 156 sb.append(" "); 157 sb.append(_SRESERVEDWORD12065439223); 158 sb.append(" "); 159 sb.append(_SRESERVEDWORD12065439222); 160 sb.append(" "); 161 sb.append(_constraintnamelist1); 162 sb.append(" "); 163 sb.append(_constrainttype0); 164 return sb.toString(); 165 } 166 167 public Object clone() throws CloneNotSupportedException { 168 return this; 169 } 170 171 private boolean isInitiallyDeferred() throws DException { 172 String mode = (String ) _constrainttype0.run(null); 173 if (mode.equalsIgnoreCase("IMMEDIATE")) { 174 return false; 175 } 176 if (mode.equalsIgnoreCase("DEFERRED")) { 177 return true; 178 } 179 throw new DException("DSE5541", new Object [] {mode}); 180 } 181 } 182 | Popular Tags |