KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > dcl > sqltransactionstatement > setconstraintsmodestatement


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 JavaDoc run(Object JavaDoc 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 JavaDoc ob = new Object JavaDoc[] {matchingConstraints, conflictingConstraints};
28       UserSession userSession = (UserSession) serverSession.getUserSession();
29       userSession.setConstraintStatus(ob, (String JavaDoc) _constrainttype0.run(object));
30       return null;
31    }
32
33    private void intializeMaps(Object JavaDoc object, HashMap matching, HashMap conflicting) throws DException {
34       Object JavaDoc ob = getConstraintNames(object);
35       String JavaDoc 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 JavaDoc[] data = (Object JavaDoc[]) iterator.getColumnValues();
44          QualifiedIdentifier tableName = new QualifiedIdentifier(
45              (String JavaDoc) ( (FieldBase) (data[SystemTablesFields.table_constraints_table_catalog])).getObject(),
46              (String JavaDoc) ( (FieldBase) (data[SystemTablesFields.table_constraints_table_schema])).getObject(),
47              (String JavaDoc) ( (FieldBase) (data[SystemTablesFields.table_constraints_table_name])).getObject()
48              );
49          String JavaDoc constraintName = (String JavaDoc) ( (FieldBase) (data[SystemTablesFields.table_constraints_constraint_name])).getObject();
50          if (ob != null) {
51             count++;
52          }
53          boolean isSavedDeferred = ( (String JavaDoc) ( (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 JavaDoc[] names = (Object JavaDoc[]) ob;
64          if (count != names.length) {
65             throw new DException("DSE5540", null);
66          }
67       }
68    }
69
70    private void addConstraintNameInCorrespondingMap(HashMap matchingOrConflicting, Object JavaDoc key, Object JavaDoc value) throws DException {
71       Object JavaDoc 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); //Continue to chage Constraint Mode
85
}
86    }
87
88    private void setConstraintsMode(Object JavaDoc[] constraintsName, String JavaDoc 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 JavaDoc getQuery(Object JavaDoc object, Object JavaDoc ob) throws DException {
95       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
96       sb.append(" Select * from ")
97           .append(SystemTables.table_constraints_TableName)
98           .append(" where is_deferrable = 'YES'");
99       if (ob == null) { // For ALL
100
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 JavaDoc getConstraintNames(Object JavaDoc object) throws DException {
142       Object JavaDoc constraintList = _constraintnamelist1.run(object);
143       try {
144          String JavaDoc allConstraints = (String JavaDoc) constraintList;
145          if (allConstraints.equalsIgnoreCase("all")) {
146             return null;
147          }
148       } catch (ClassCastException JavaDoc clExp) {
149          return constraintList;
150       }
151       return null;
152    }
153
154    public String JavaDoc toString() {
155       StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
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 JavaDoc clone() throws CloneNotSupportedException JavaDoc {
168       return this;
169    }
170
171    private boolean isInitiallyDeferred() throws DException {
172       String JavaDoc mode = (String JavaDoc) _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 JavaDoc[] {mode});
180    }
181 }
182
Popular Tags