KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > serversystem > ServerTable


1 package com.daffodilwoods.daffodildb.server.serversystem;
2
3 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
4 import com.daffodilwoods.daffodildb.server.datasystem.utility.*;
5 import com.daffodilwoods.daffodildb.server.datasystem.utility._Record;
6 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*;
7 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*;
8 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
9 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
10 import com.daffodilwoods.daffodildb.utils.*;
11 import com.daffodilwoods.daffodildb.utils.field.*;
12 import com.daffodilwoods.database.general.*;
13 import com.daffodilwoods.database.resource.*;
14 import com.daffodilwoods.database.utility.*;
15
16 public class ServerTable implements _ServerTable {
17
18    private _ServerSession serverSession;
19    private _DataTriggerTable dataTriggerTable;
20    private _StatementTriggerTable statementTriggerTable;
21    private QualifiedIdentifier tableName;
22
23    public ServerTable(QualifiedIdentifier tableName0, ServerSession serverSession, _DataTriggerTable dataTriggerTable, _StatementTriggerTable statementTriggerTable) throws DException {
24       tableName = tableName0;
25       this.serverSession = serverSession;
26       this.dataTriggerTable = dataTriggerTable;
27       this.statementTriggerTable = statementTriggerTable;
28    }
29
30    public _Record insert(Object JavaDoc[] values) throws DException {
31       return insert(null, values);
32    }
33
34    /* new methods */
35
36    /**
37     * TEC (triggerExecutionContext) is made so that triggers in turn firing other triggers may not get
38     * into dead lock.
39     */

40    public _Record insert(int[] columnIndexes, Object JavaDoc[] values) throws DException {
41       boolean checkConstraints = values != null;
42       _UserSession userSession = serverSession.getUserSession();
43       userSession.startSavePoint();
44       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
45
46       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
47       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
48       statementExecutionContext.setUserSession(userSession);
49       Object JavaDoc recordVersion = null;
50       try {
51          _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
52          if (columnIndexes == null) {
53             if (cc.getColumnCount() < 5)
54          ;//// Removed By Program ** System.out.println(P.print(cc.getColumnNames()));
55

56             columnIndexes = SystemFieldsCharacteristics.getUserColumnIndexes(cc.getColumnCount());
57             if (values == null)
58                values = new Object JavaDoc[columnIndexes.length];
59          }
60          int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
61          FieldBase[] cValues = FieldUtility.getFields(values);
62          cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
63
64          recordVersion = dataTriggerTable.insert(columnIndexes, cValues, statementExecutionContext, checkConstraints);
65       } catch (DException e) {
66          userSession.rollbackSavePoint(statementExecutionContext);
67          throw e;
68       }
69       catch (Exception JavaDoc e) {
70          userSession.rollbackSavePoint(statementExecutionContext);
71          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
72       }
73       userSession.commitSavePoint(statementExecutionContext);
74       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
75       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
76       return record;
77    }
78
79    public _Record insertForAlreadyInsertedRecord(_Iterator iterator, int[] columnIndexes, Object JavaDoc[] values, boolean fireTriggers) throws DException {
80       _UserSession childUserSession = serverSession.getUserSession();
81       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
82
83       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
84       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
85       statementExecutionContext.setUserSession(childUserSession);
86       Object JavaDoc recordVersion = null;
87       try {
88          _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
89
90          int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
91          FieldBase[] cValues = FieldUtility.getFields(values);
92          cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
93
94          recordVersion = dataTriggerTable.insertForAlreadyInsertedRecord(iterator, columnIndexes, cValues, statementExecutionContext, fireTriggers);
95       } catch (DException e) {
96          throw e;
97       }
98       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
99       record.update(SystemFields.systemFields[SystemFields.sessionId], childUserSession.getSession().getSessionId());
100       return record;
101    }
102
103    public _Record insertVersion(int[] columnIndexes, Object JavaDoc[] values, java.sql.Date JavaDoc date) throws DException {
104
105       boolean checkConstraints = values != null;
106       _UserSession userSession = serverSession.getUserSession();
107       userSession.startSavePoint();
108       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
109
110       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
111       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
112       statementExecutionContext.setUserSession(userSession);
113       Object JavaDoc recordVersion = null;
114       try {
115          _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
116          if (columnIndexes == null) {
117             columnIndexes = SystemFieldsCharacteristics.getUserColumnIndexesForDatedTable(cc.getColumnCount());
118             if (values == null)
119                values = new Object JavaDoc[columnIndexes.length];
120          }
121          int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
122          FieldBase[] cValues = FieldUtility.getFields(values);
123          cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
124
125          recordVersion = dataTriggerTable.insertVersion(columnIndexes, cValues, statementExecutionContext, checkConstraints, date);
126       } catch (DException e) {
127          userSession.rollbackSavePoint(statementExecutionContext);
128          throw e;
129       }
130       catch (Exception JavaDoc e) {
131          userSession.rollbackSavePoint(statementExecutionContext);
132          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
133       }
134       userSession.commitSavePoint(statementExecutionContext);
135       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
136       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
137       return record;
138    }
139
140    public _Record insertVersionWithoutConstraints(java.sql.Date JavaDoc date) throws DException {
141       _UserSession userSession = serverSession.getUserSession();
142       userSession.startSavePoint();
143       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
144       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
145       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
146       statementExecutionContext.setUserSession(userSession);
147       Object JavaDoc recordVersion = null;
148       try {
149          _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
150          int[] columnIndexes = SystemFieldsCharacteristics.getUserColumnIndexes(cc.getColumnCount());
151          Object JavaDoc[] values = new Object JavaDoc[columnIndexes.length];
152          int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
153          FieldBase[] cValues = FieldUtility.getFields(values);
154          cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
155
156          recordVersion = dataTriggerTable.insertVersion(columnIndexes, cValues, statementExecutionContext, false, date);
157       } catch (DException e) {
158          userSession.rollbackSavePoint(statementExecutionContext);
159          throw e;
160       }
161       catch (Exception JavaDoc e) {
162          userSession.rollbackSavePoint(statementExecutionContext);
163          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
164       }
165       userSession.commitSavePoint(statementExecutionContext);
166       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
167       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
168       return record;
169    }
170
171    public _Record insert() throws DException {
172       _UserSession userSession = serverSession.getUserSession();
173       userSession.startSavePoint();
174       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
175       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
176       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
177       statementExecutionContext.setUserSession(userSession);
178       Object JavaDoc recordVersion = null;
179       try {
180
181
182
183
184          recordVersion = dataTriggerTable.insert(null, null, statementExecutionContext, false);
185       } catch (DException e) {
186          userSession.rollbackSavePoint(statementExecutionContext);
187          throw e;
188       }
189       catch (Exception JavaDoc e) {
190          userSession.rollbackSavePoint(statementExecutionContext);
191          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
192       }
193       userSession.commitSavePoint(statementExecutionContext);
194       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
195       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
196       return record;
197    }
198
199    public _Record update(_Iterator iterator, int[] columnIndexes,
200                          Object JavaDoc[] values) throws DException {
201      long t = System.currentTimeMillis();
202      boolean flagToAvoidDeadLocking = false;
203      while (true) {
204        try {
205          return updateLock(iterator, columnIndexes,values);
206        }
207        catch (DException ex) {
208          if (ex.getDseCode().equalsIgnoreCase("DSE5582")) {
209            throw new DException("DSE5582", null);
210          }
211          if (ex.getDseCode().equalsIgnoreCase("DSE5583"))
212            throw new DException("DSE5583", null);
213          if ( (ex.getDseCode().equalsIgnoreCase("DSE879") ||
214                ex.getDseCode().equalsIgnoreCase("DSE2004")) &&
215              serverSession.getIsolationLevel() != Session.ReadSessionSerializable ) {
216           synchronized (serverSession.getUserSession().getSession().getSessionDatabase()) {
217               if(serverSession.getIsolationLevel() == Session.ReadTransactionSerializable ){
218          ;//// Removed By Program ** System.out.println("ServerTable.update(iterator, columnIndexes, values)"+ serverSession.getSessionId() +" going into wait with flag ="+flagToAvoidDeadLocking);
219
if (flagToAvoidDeadLocking){
220          ;//// Removed By Program ** System.out.println(" Exception thrown for "+serverSession.getSessionId() );
221
throw new DException("DSE2058", null);
222                 }
223                 flagToAvoidDeadLocking = true;
224               }
225         try{
226               serverSession.getUserSession().getSession().getSessionDatabase().
227                  wait();
228         }catch(Exception JavaDoc e){
229
230
231         }
232            }
233
234          }
235          else {
236            throw ex;
237          }
238        }
239      }
240    }
241
242    public _Record updateLock(_Iterator iterator, int[] columnIndexes, Object JavaDoc[] values) throws DException {
243       _UserSession userSession = serverSession.getUserSession();
244       userSession.startSavePoint();
245       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
246
247       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
248       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
249       statementExecutionContext.setUserSession(userSession);
250       Object JavaDoc recordVersion = null;
251       try {
252          _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
253          int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
254          FieldBase[] cValues = FieldUtility.getFields(values);
255          cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
256
257          recordVersion = dataTriggerTable.update(iterator, columnIndexes, cValues, statementExecutionContext);
258       } catch (DException e) {
259          userSession.rollbackSavePoint(statementExecutionContext);
260          throw e;
261       }
262       catch (Exception JavaDoc e) {
263          userSession.rollbackSavePoint(statementExecutionContext);
264          e.printStackTrace() ;
265          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
266       }
267       userSession.commitSavePoint(statementExecutionContext);
268       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
269       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
270       return record;
271    }
272
273    /** @todo uncomment the call to updateVersion Line */
274    public _Record updateVersion(_Iterator iterator, int[] columnIndexes, Object JavaDoc[] values, java.sql.Date JavaDoc date) throws DException {
275       _UserSession userSession = serverSession.getUserSession();
276       userSession.startSavePoint();
277       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
278
279       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
280       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
281       statementExecutionContext.setUserSession(userSession);
282       Object JavaDoc recordVersion = null;
283       try {
284
285          _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
286          int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
287          FieldBase[] cValues = FieldUtility.getFields(values);
288          cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
289
290          recordVersion = dataTriggerTable.updateVersion(iterator, columnIndexes, cValues, statementExecutionContext, date);
291       } catch (DException e) {
292          userSession.rollbackSavePoint(statementExecutionContext);
293          throw e;
294       }
295       catch (Exception JavaDoc e) {
296          userSession.rollbackSavePoint(statementExecutionContext);
297          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
298       }
299       userSession.commitSavePoint(statementExecutionContext);
300       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
301       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
302       return record;
303    }
304
305    public _Record update(_Iterator iterator, int[] columnIndexes, Object JavaDoc[] values, _StatementExecutionContext statementExecutionContext) throws DException {
306       _ColumnCharacteristics cc = serverSession.getColumnCharacteristics(tableName);
307       int[] columnsType = ColumnCharacteristicsUtilities.getColumnsType(columnIndexes, cc);
308       FieldBase[] cValues = FieldUtility.getFields(values);
309       cValues = FieldUtility.convertToAppropriateType(cValues, columnsType, ColumnCharacteristicsUtilities.getColumnsSize(columnIndexes, cc), ColumnCharacteristicsUtilities.getColumnsScale(columnIndexes, cc), cc.getCollator());
310
311       Object JavaDoc recordVersion = dataTriggerTable.update(iterator, columnIndexes, cValues, statementExecutionContext);
312       return ( (RecordVersion) recordVersion).getCurrentRecord();
313    }
314
315    public _Record delete(_Iterator iterator) throws DException {
316      long t = System.currentTimeMillis();
317      while (true) {
318         try {
319            return deleteLock(iterator);
320         } catch (DException ex) {
321            if (ex.getDseCode().equalsIgnoreCase("DSE5582"))
322               throw new DException("DSE5582", null);
323            if (ex.getDseCode().equalsIgnoreCase("DSE5583"))
324               throw new DException("DSE5583", null);
325
326            if ( (ex.getDseCode().equalsIgnoreCase("DSE879") || ex.getDseCode().equalsIgnoreCase("DSE2004")) &&
327                serverSession.getIsolationLevel() != Session.ReadSessionSerializable ) {
328               try {
329                  synchronized (serverSession.getUserSession().getSession().getSessionDatabase()) {
330                     serverSession.getUserSession().getSession().getSessionDatabase().wait();
331                  }
332               } catch (Exception JavaDoc e) {
333               }
334            } else {
335               throw ex;
336            }
337         }
338      }
339    }
340    public _Record deleteLock(_Iterator iterator) throws DException {
341       _UserSession userSession = serverSession.getUserSession();
342       userSession.startSavePoint();
343       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
344
345       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
346       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
347       statementExecutionContext.setUserSession(userSession);
348       statementExecutionContext.setConstraintTypeDeferred(serverSession.isConstraintCheckingDeffered());
349       Object JavaDoc recordVersion = null;
350       try {
351          recordVersion = dataTriggerTable.delete(iterator, statementExecutionContext);
352       } catch (DException e) {
353          userSession.rollbackSavePoint(statementExecutionContext);
354          throw e;
355       }
356       catch (Exception JavaDoc e) {
357          userSession.rollbackSavePoint(statementExecutionContext);
358          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
359       }
360       userSession.commitSavePoint(statementExecutionContext);
361       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
362       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
363       return record;
364    }
365
366    /** @todo uncomment the call to deleteVersion Line */
367    public _Record deleteVersion(_Iterator iterator, java.sql.Date JavaDoc date) throws DException {
368       _UserSession userSession = serverSession.getUserSession();
369       userSession.startSavePoint();
370       TriggerExecutionContext triggerExecutionContext = new TriggerExecutionContext();
371
372       _StatementExecutionContext statementExecutionContext = serverSession.getStatementExecutionContext();
373       statementExecutionContext.setTriggerExecutionContext(triggerExecutionContext);
374       statementExecutionContext.setUserSession(userSession);
375       Object JavaDoc recordVersion = null;
376       try {
377          recordVersion = dataTriggerTable.deleteVersion(iterator, date, statementExecutionContext);
378       } catch (DException e) {
379          userSession.rollbackSavePoint(statementExecutionContext);
380          throw e;
381       }
382       catch (Exception JavaDoc e) {
383          userSession.rollbackSavePoint(statementExecutionContext);
384          throw new DException("DSE0", new Object JavaDoc[] {e.getMessage()});
385       }
386       userSession.commitSavePoint(statementExecutionContext);
387       _Record record = ( (RecordVersion) recordVersion).getCurrentRecord();
388       record.update(SystemFields.systemFields[SystemFields.sessionId], userSession.getSession().getSessionId());
389       return record;
390    }
391
392    public _Record delete(_Iterator iterator, _StatementExecutionContext statementExecutionContext) throws DException {
393       Object JavaDoc recordVersion = dataTriggerTable.delete(iterator, statementExecutionContext);
394       return ( (RecordVersion) recordVersion).getCurrentRecord();
395    }
396
397    public void setSeverSession(_ServerSession serverSession0) throws DException {
398       this.serverSession = (ServerSession) serverSession0;
399    }
400 }
401
Popular Tags