KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.sql99.dml;
2
3 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
4 import com.daffodilwoods.daffodildb.server.datasystem.utility.*;
5 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record;
6 import com.daffodilwoods.daffodildb.server.serversystem.*;
7 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*;
8 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*;
9 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
10 import com.daffodilwoods.daffodildb.server.sql99.*;
11 import com.daffodilwoods.daffodildb.server.sql99.common.*;
12 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
13 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
14 import com.daffodilwoods.daffodildb.utils.*;
15 import com.daffodilwoods.daffodildb.utils.field.*;
16 import com.daffodilwoods.database.general.*;
17 import com.daffodilwoods.database.resource.*;
18
19 public class DeleteExecuter implements _Executer {
20    _StatementExecutionContext sec;
21    TableDetails tableDetails;
22    _Iterator iterator;
23    _DataTriggerTable dataTriggerTable;
24    _StatementTriggerTable statementTriggerTable;
25    _UserSession childUserSession;
26    _ServerSession serverSession;
27    _Reference[] underlyingReferences, questionMarks;
28    long time;
29    boolean forFisrtTime;
30    private Object JavaDoc[] previousParameters;
31    private FieldBase[] previousFieldBase;
32    private _DropTableInfo[] dropTableInfo;
33
34    private QualifiedIdentifier tableName;
35    public DeleteExecuter(_StatementExecutionContext ssec, TableDetails tableDetails, _Iterator itera, long initialTime, _Reference[] knownReferences, _Reference[] questinMarks, _DropTableInfo[] dropTableInfo0, QualifiedIdentifier tableName0) throws DException {
36       sec = ssec;
37       iterator = itera;
38       serverSession = sec.getServerSession();
39       this.tableDetails = tableDetails;
40       time = initialTime;
41       questionMarks = questinMarks;
42       underlyingReferences = knownReferences;
43       performInitialisations();
44       dropTableInfo = dropTableInfo0;
45       tableName = tableName0;
46    }
47
48    public Object JavaDoc execute(_VariableValues vv) throws com.daffodilwoods.database.resource.DException {
49       checkForDroppedTable();
50       iterator.releaseResource();
51       return executeV(vv);
52    }
53
54    private Object JavaDoc executeV(_VariableValues vv) throws com.daffodilwoods.database.resource.DException {
55       childUserSession = sec.getServerSession().getUserSession();
56       long t = System.currentTimeMillis();
57       Object JavaDoc obj = null;
58       while (true) {
59          try {
60             if (System.currentTimeMillis() - time >= ( (_ServerSession) sec.getServerSession()).queryTimeOut && ( (_ServerSession) sec.getServerSession()).queryTimeOut != 0) {
61                return null;
62             }
63             obj = performExecution(vv);
64             return obj;
65          } catch (DException ex) {
66             if (ex.getDseCode().equalsIgnoreCase("DSE5582"))
67                throw new DException("DSE5582", null);
68             if (ex.getDseCode().equalsIgnoreCase("DSE5583"))
69                throw new DException("DSE5583", null);
70
71             if ( (ex.getDseCode().equalsIgnoreCase("DSE879") || ex.getDseCode().equalsIgnoreCase("DSE2004")) &&
72                 sec.getServerSession().getIsolationLevel() == Session.ReadCommitted) {
73                try {
74                   synchronized (sec.getServerSession().getUserSession().getSession().getSessionDatabase()) {
75                      sec.getServerSession().getUserSession().getSession().getSessionDatabase().wait();
76                   }
77                } catch (Exception JavaDoc e) {
78                }
79             } else {
80                throw new DmlStatementException("DSE1277", new Object JavaDoc[] {tableDetails.getQualifiedTableName()}
81                                                , ex);
82             }
83          }
84       }
85    }
86
87    public Object JavaDoc execute(Object JavaDoc[] obj) throws com.daffodilwoods.database.resource.DException {
88       checkForDroppedTable();
89       if (obj == null) {
90          if (questionMarks != null) {
91             throw new DException("DSE1273", null);
92          }
93          return execute( (_VariableValues)null);
94       }
95       _VariableValues vv = new VariableValues(questionMarks, sec.getServerSession());
96       if (obj.length != questionMarks.length) {
97          throw new DmlStatementException("DSE1277", new Object JavaDoc[] {tableDetails.getQualifiedTableName()}
98                                          , new DException("DSE1252", new Object JavaDoc[] {new Integer JavaDoc(obj.length), new Integer JavaDoc(questionMarks.length)}));
99       }
100       previousParameters = obj;
101       iterator.releaseResource();
102       previousFieldBase = FieldUtility.getFields(obj);
103       vv.setConditionVariableValue(questionMarks, previousFieldBase, 1);
104
105       return executeV(vv);
106    }
107
108    public Object JavaDoc executeForFresh(Object JavaDoc[] parm1) throws com.daffodilwoods.database.resource.DException {
109       return execute(parm1);
110    }
111
112    private Object JavaDoc performExecution(_VariableValues vv) throws DException {
113       int count = 0;
114       childUserSession.startSavePoint();
115       sec.setUserRight(false);
116       _VariableValues vvInitialised = initialiseVariableValues(vv);
117       TriggerExecutionContext tec = new TriggerExecutionContext();
118       sec.setUserSession(childUserSession);
119       sec.setTriggerExecutionContext(tec);
120       statementTriggerTable.fireBeforeDeleteStatementLevelTriggers(sec);
121       if (iterator.last()) {
122          Object JavaDoc deleteEvent = null;
123          try {
124
125             _Record record = null;
126             do {
127                record = iterator.getRecord();
128                RecordVersion recordVersion = new RecordVersion(record);
129                sec.setRecordVersion(recordVersion);
130                deleteEvent = dataTriggerTable.delete(iterator, sec);
131                count++;
132             } while (iterator.previous());
133             statementTriggerTable.fireAfterDeleteStatementLevelTriggers(sec);
134          } catch (DException e) {
135             childUserSession.rollbackSavePoint(sec);
136             throw e;
137          }
138
139
140          catch (Exception JavaDoc e) {
141             e.printStackTrace();
142             childUserSession.rollbackSavePoint(sec);
143             throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
144          }
145       }
146
147       childUserSession.commitSavePoint(sec);
148       if (sec.getAutoCommit() && serverSession.getAutoCommit() && !childUserSession.getSession().hasAnyChild()) {
149          serverSession.commit();
150       }
151       if (sec.getAutoGeneratedType()) {
152          DMLResult dmlResult = sec.getDMLResult();
153          dmlResult.setrowsEffected(count);
154          return dmlResult;
155       }
156
157       return new Integer JavaDoc(count);
158    }
159
160    private void performInitialisations() throws DException {
161       QualifiedIdentifier tableName = tableDetails.getQualifiedIdentifier();
162       dataTriggerTable = sec.getDataTriggerTable(tableName);
163       statementTriggerTable = sec.getStatementTriggerTable(tableName);
164    }
165
166    private _Reference[] getReferences(Object JavaDoc[][] refValue) {
167       if (refValue != null) {
168          int len = refValue.length;
169          _Reference[] refToReturn = new _Reference[len];
170          for (int i = 0; i < len; i++) {
171             refToReturn[i] = (_Reference) refValue[i][0];
172          }
173          return refToReturn;
174       }
175       return null;
176    }
177
178    private _VariableValues initialiseVariableValues(_VariableValues vv) throws DException {
179       _VariableValues vvToReturn = null;
180       _Reference[] ref = null;
181
182       if (vv != null) {
183          ref = getReferences(vv.getReferenceAndValuePair());
184          if (ref != null) {
185             iterator.setConditionVariableValue(ref, (Object JavaDoc[]) vv.getColumnValues(ref), 1);
186          }
187       } else {
188          iterator.setConditionVariableValue(null, null, 1);
189       }
190       if (questionMarks != null && ref == null) {
191          throw new DException("DSE1273", null);
192       }
193       _Reference[] mergedReferences = GeneralPurposeStaticClass.getJointReferences(ref, underlyingReferences);
194       vvToReturn = new VariableValues(mergedReferences, sec.getServerSession());
195       if (vv != null && ref != null) {
196          vvToReturn.setConditionVariableValue(ref, (Object JavaDoc[]) vv.getColumnValues(ref), 1);
197       }
198       vvToReturn.setIterator(iterator);
199       if (underlyingReferences != null) {
200          vvToReturn.setConditionVariableValue(underlyingReferences, getIteratorArray(), 1);
201       }
202       return vvToReturn;
203    }
204
205    private Object JavaDoc[] getIteratorArray() {
206       Object JavaDoc[] toReturn = new Object JavaDoc[underlyingReferences.length];
207       for (int i = 0; i < toReturn.length; i++) {
208          toReturn[i] = iterator;
209       }
210       return toReturn;
211    }
212
213    public void checkForDroppedTable() throws DException {
214       for (int i = 0; i < dropTableInfo.length; i++) {
215          if (dropTableInfo[i].isTableDropped())
216             throw new DException("DSE5584", null);
217
218       }
219    }
220 }
221
Popular Tags