KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sql99 > dml > updatestatementpositioned


1 package com.daffodilwoods.daffodildb.server.sql99.dml;
2
3 import java.util.*;
4
5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
6 import com.daffodilwoods.daffodildb.server.datasystem.utility.*;
7 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record;
8 import com.daffodilwoods.daffodildb.server.serversystem.*;
9 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*;
10 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*;
11 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
12 import com.daffodilwoods.daffodildb.server.sql99.*;
13 import com.daffodilwoods.daffodildb.server.sql99.common.*;
14 import com.daffodilwoods.daffodildb.server.sql99.dml.declarecursor.*;
15 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
16 import com.daffodilwoods.daffodildb.server.sql99.dql.semanticchecker.*;
17 import com.daffodilwoods.daffodildb.server.sql99.expression.*;
18 import com.daffodilwoods.daffodildb.server.sql99.token.*;
19 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
20 import com.daffodilwoods.daffodildb.utils.*;
21 import com.daffodilwoods.database.general.*;
22 import com.daffodilwoods.database.resource.*;
23
24 public class updatestatementpositioned implements com.daffodilwoods.daffodildb.utils.parser.StatementExecuter, SQLdatachangestatement, _Executer {
25
26    public cursorname _cursorname0;
27    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439221;
28    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439222;
29    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439223;
30    public setclauselist _setclauselist4;
31    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439225;
32    public targettable _targettable6;
33    public SRESERVEDWORD1206543922 _SRESERVEDWORD12065439227;
34
35    private ArrayList knownReferences;
36    Object JavaDoc referencesIteratorMapping;
37    _StatementExecutionContext sec = null;
38    _ServerSession serverSession = null;
39    QualifiedIdentifier tableName = null;
40    _StatementTriggerTable statementTriggerTable = null;
41    _DataTriggerTable dataTriggerTable = null;
42    _Cursor cursor = null;
43    _ColumnCharacteristics cc = null;
44    Object JavaDoc[][] setclauselistarray = null;
45    TableDetails tableDetails = null;
46    boolean checkingPerformed;
47    int[] columnsType, columns;
48    _Iterator iterator;
49    int[] size;
50    long time = 0;
51
52    public _Reference[] checkSemantic(_ServerSession serverSession) throws DException {
53       tableDetails = (TableDetails) _targettable6.run(serverSession);
54       SemanticChecker.initializeCatalogNameAndSchemaNameOfTable(tableDetails, serverSession);
55       _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableDetails.getQualifiedIdentifier());
56       tableDetails.cc = cc;
57       tableDetails.setTableType(cc.getTableType());
58
59       if (tableDetails.getTableType() == TypeConstants.VIEW) {
60          throw new DmlStatementException("DSE1276", new Object JavaDoc[] {tableDetails.getQualifiedTableName()}
61                                          , new DException("DSE1267", null));
62       }
63       cursor = (_Cursor) serverSession.getCursor( (String JavaDoc) _cursorname0.run(serverSession));
64       if (!cursor.getUpdatabilityClause()) {
65          throw new DException("DSE1263", (Object JavaDoc[])null);
66       }
67       _Reference[] references1 = _setclauselist4.checkSemantic(serverSession);
68       checkColumnsValidity(_setclauselist4.getLeftColumnDetails(serverSession), tableDetails);
69       knownReferences = new ArrayList(4);
70       _Reference[] rightReferences = getRightSetClauseReferences(tableDetails, serverSession);
71       checkingPerformed = true;
72       return GeneralPurposeStaticClass.getJointReferences(rightReferences, references1);
73    }
74
75    public Object JavaDoc run(Object JavaDoc object) throws com.daffodilwoods.database.resource.DException {
76       sec = (_StatementExecutionContext) object;
77       _ServerSession serverSession = sec.getServerSession();
78       tableDetails = _targettable6._tablename1.getTableDetails();
79       tableName = tableDetails.getQualifiedIdentifier();
80       cc = sec.getColumnCharacteristics(tableName);
81       statementTriggerTable = sec.getStatementTriggerTable(tableName);
82       referencesIteratorMapping = _setclauselist4.getReferenceIteratorMapping(tableDetails, serverSession);
83       dataTriggerTable = sec.getDataTriggerTable(tableName);
84       ArrayList allQueryTables = new ArrayList();
85       ( (cursorspecification) cursor.getCursorSpecification())._queryexpression2.getTablesIncluded(allQueryTables);
86       if (!allQueryTables.contains(tableName)) {
87          throw new DException("DSE8047", new Object JavaDoc[] {tableName, cursor.getCursorName()});
88       }
89       setclauselistarray = (Object JavaDoc[][]) _setclauselist4.run(serverSession);
90       columns = getIntColumns();
91       columnsType = ColumnCharacteristicsUtilities.getColumnsType(columns, cc);
92       size = ColumnCharacteristicsUtilities.getColumnsSize(columns, cc);
93       time = System.currentTimeMillis();
94       return this;
95    }
96
97    public Object JavaDoc execute(_VariableValues vvrecieved) throws DException {
98       iterator = cursor.getIterator();
99       _VariableValues vv = initialiseVariableValues(vvrecieved);
100       vv.setIterator(iterator);
101
102       _UserSession childUserSession = sec.getUserSession();
103       int count = 0;
104       boolean createChildSession = false;
105       if (childUserSession == null) {
106          childUserSession = sec.getServerSession().getUserSession();
107          createChildSession = true;
108       }
109       TriggerExecutionContext tec = new TriggerExecutionContext();
110       sec.setUserSession(childUserSession);
111       sec.setTriggerExecutionContext(tec);
112
113       _Record record = iterator.getRecord();
114       Object JavaDoc updateEvent = null;
115       try {
116          statementTriggerTable.fireBeforeUpdateStatementLevelTriggers(sec, columns);
117          RecordVersion recordVersion = new RecordVersion(record);
118
119
120          sec.setRecordVersion(recordVersion);
121
122          Object JavaDoc[] valueSource = ColumnCharacteristicsUtilities.getObjectOfRespectiveType(getColumnsValues(vv), columnsType, size);
123          updateEvent = dataTriggerTable.update(iterator, columns, valueSource, sec);
124
125       } catch (DException e) {
126          if (createChildSession) {
127             childUserSession.rollback(sec);
128          }
129          throw e;
130       }
131       if (createChildSession) {
132          childUserSession.commit(sec);
133       }
134       return new Integer JavaDoc(1);
135    }
136
137    public int[] getIntColumns() throws DException {
138       int length = setclauselistarray.length;
139       int[] columns = new int[length];
140       for (int i = 0; i < length; i++) {
141          try {
142             columns[i] = ( (_Reference) setclauselistarray[i][0]).getIndex();
143          } catch (DException e) {
144             int tt = cc.getColumnIndex( ( (_Reference) setclauselistarray[i][0]).getColumn());
145             ( (_Reference) setclauselistarray[i][0]).setIndex(tt);
146             columns[i] = tt;
147          }
148       }
149       return columns;
150    }
151
152    public Object JavaDoc[] getColumnsValues(_VariableValues vv) throws DException {
153       int length = setclauselistarray.length;
154       Object JavaDoc[] values = new Object JavaDoc[length];
155       for (int i = 0; i < length; i++) {
156          values[i] = ( (valueexpression) setclauselistarray[i][1]).run(vv);
157       }
158       return values;
159    }
160
161    public Object JavaDoc[] getParameters(Object JavaDoc object) throws DException {
162       throw new DException("DSE565", null);
163    }
164
165    public String JavaDoc toString() {
166       StringBuffer JavaDoc clause = new StringBuffer JavaDoc();
167       clause.append(" ");
168       clause.append(_SRESERVEDWORD12065439227.toString());
169       clause.append(" ");
170       clause.append(_targettable6.toString());
171       clause.append(" ");
172       clause.append(_SRESERVEDWORD12065439225.toString());
173       clause.append(" ");
174       clause.append(_setclauselist4.toString());
175       clause.append(" ");
176       clause.append(_SRESERVEDWORD12065439223.toString());
177       clause.append(" ");
178       clause.append(_SRESERVEDWORD12065439222.toString());
179       clause.append(" ");
180       clause.append(_SRESERVEDWORD12065439221.toString());
181       clause.append(" ");
182       clause.append(_cursorname0.toString());
183       return clause.toString().trim();
184    }
185
186    private void checkColumnsValidity(ColumnDetails[] columns, TableDetails tableDetails) throws DException {
187       if (columns != null) {
188          int len = columns.length;
189          for (int i = 0; i < len; i++) {
190             if (!check(tableDetails, columns[i].getColumnName())) {
191                throw new DmlStatementException("DSE1277", new Object JavaDoc[] {tableDetails.getQualifiedTableName()}
192                                                , new DException("DSE1130", new Object JavaDoc[] {columns[i].getColumn(), tableDetails.getQualifiedTableName()}));
193             }
194          }
195       }
196    }
197
198    private boolean check(TableDetails tableDetails, String JavaDoc[] columnName) throws DException {
199       try {
200          String JavaDoc[] tableName = tableDetails.getTableName();
201          for (int i = columnName.length - 2, j = tableName.length - 1, length = columnName.length; i >= 0 && j >= 0; i--, j--) {
202             if (!tableName[j].equalsIgnoreCase(columnName[i])) {
203                return false;
204             }
205          }
206          return tableDetails.cc.getColumnIndex(columnName[columnName.length - 1]) != -1;
207       } catch (Exception JavaDoc e) {
208          return false;
209       }
210    }
211
212    private _Reference[] getRightSetClauseReferences(TableDetails tableDetails, _ServerSession serverSession) throws DException {
213       ColumnDetails[] setRightColumnDetails = _setclauselist4.getColumnDetails(serverSession);
214       _Reference[] ref1 = checkColumnsValidityAsReference(setRightColumnDetails, tableDetails, serverSession);
215       return ref1;
216    }
217
218    private _Reference[] makeProvisionForKnownReferences(_Reference[] columns, TableDetails tableDetails) throws DException {
219       ArrayList toReturn = new ArrayList(5);
220       if (columns != null) {
221          int len = columns.length;
222          for (int i = 0; i < len; i++) {
223             if ( (columns[i].getReferenceType() != SimpleConstants.VARIABLECOLUMN) && check(tableDetails, ( (ColumnDetails) columns[i]).getColumnName())) {
224                knownReferences.add(columns[i]);
225             } else {
226                toReturn.add(columns[i]);
227             }
228          }
229       }
230       return toReturn.size() > 0 ? (_Reference[]) toReturn.toArray(new _Reference[0]) : null;
231    }
232
233    public _Reference[] checkColumnsValidityAsReference(ColumnDetails[] columns, TableDetails tableDetails, _ServerSession serverSession) throws DException {
234       ArrayList aList = new ArrayList(5);
235       if (columns != null) {
236          SetColumnProperties.setTableNamesAndDatatypesOfAllColumns(serverSession, columns, new TableDetails[] {tableDetails}
237              , aList, new ArrayList());
238          return makeProvisionForKnownReferences( (_Reference[]) aList.toArray(new _Reference[0]), tableDetails);
239       }
240       return null;
241    }
242
243    private _Reference[] getReferences(Object JavaDoc[][] refValue) {
244       if (refValue != null) {
245          int len = refValue.length;
246          _Reference[] refToReturn = new _Reference[len];
247          for (int i = 0; i < len; i++) {
248             refToReturn[i] = (_Reference) refValue[i][0];
249          }
250          return refToReturn;
251       }
252       return null;
253    }
254
255    private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException {
256       _VariableValues vvToReturn = null;
257       _Reference[] ref = null;
258       Object JavaDoc[][] refValues = null;
259
260       if (vv != null) {
261          refValues = vv.getReferenceAndValuePair();
262          ref = getReferences(refValues);
263          if (ref != null) {
264             iterator.setConditionVariableValue(ref, (Object JavaDoc[]) vv.getColumnValues(ref), 1);
265          }
266       }
267       _Reference[] knownRef = knownReferences != null ? (_Reference[]) knownReferences.toArray(new _Reference[0]) : null;
268       _Reference[] mergedReferences = GeneralPurposeStaticClass.getJointReferences(ref, knownRef);
269       if (referencesIteratorMapping != null) {
270          vvToReturn = new SubQueryVariableValues(mergedReferences, (Object JavaDoc[][]) referencesIteratorMapping, sec.getServerSession());
271       } else {
272          vvToReturn = new VariableValues(mergedReferences, sec.getServerSession());
273       }
274       if (vv != null && ref != null) {
275          vvToReturn.setConditionVariableValue(ref, getValues(refValues), 1);
276       }
277       vvToReturn.setIterator(iterator);
278       if (knownRef != null) {
279          vvToReturn.setConditionVariableValue(knownRef, getIteratorArray(), 1);
280       }
281       return vvToReturn;
282    }
283
284    private Object JavaDoc[] getIteratorArray() {
285       Object JavaDoc[] toReturn = new Object JavaDoc[knownReferences.size()];
286       for (int i = 0; i < toReturn.length; i++) {
287          toReturn[i] = iterator;
288       }
289       return toReturn;
290    }
291
292    private Object JavaDoc[] getValues(Object JavaDoc[][] refValue) {
293       int len = refValue.length;
294       Object JavaDoc[] toReturn = new Object JavaDoc[len];
295       for (int i = 0; i < len; i++) {
296          toReturn[i] = refValue[i][1];
297       }
298       return toReturn;
299    }
300
301    public _Reference[] getReferences() throws com.daffodilwoods.database.resource.DException {
302       return null;
303    }
304
305    public _Reference[] syntaxChecking(_ServerSession object) throws DException {
306       return null;
307    }
308
309    public Object JavaDoc executeForFresh(Object JavaDoc[] parm1) throws com.daffodilwoods.database.resource.DException {
310       return execute(parm1);
311    }
312
313    public Object JavaDoc execute(Object JavaDoc[] parm1) throws com.daffodilwoods.database.resource.DException {
314       return execute( (_VariableValues)null);
315    }
316
317    public Object JavaDoc clone() throws CloneNotSupportedException JavaDoc {
318       return this;
319    }
320
321    public ParameterInfo[] getParameterInfo() throws DException {
322       return null;
323    }
324
325 }
326
Popular Tags