KickJava   Java API By Example, From Geeks To Geeks.

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


1 package com.daffodilwoods.daffodildb.server.serversystem;
2
3 import java.sql.*;
4 import java.util.*;
5 import com.daffodilwoods.daffodildb.server.datadictionarysystem.*;
6 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.*;
7 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*;
8 import com.daffodilwoods.daffodildb.server.datasystem.mergesystem.*;
9 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.*;
10 import com.daffodilwoods.daffodildb.server.serversystem.chainedcolumn.*;
11 import com.daffodilwoods.daffodildb.server.serversystem.datatriggersystem.*;
12 import com.daffodilwoods.daffodildb.server.serversystem.deeprecordcopy.*;
13 import com.daffodilwoods.daffodildb.server.serversystem.dmlvalidation.statementtriggersystem.*;
14 import com.daffodilwoods.daffodildb.server.serversystem.triggerInfo.*;
15 import com.daffodilwoods.daffodildb.server.sessionsystem.*;
16 import com.daffodilwoods.daffodildb.server.sessionsystem.sessionversioninfo.*;
17 import com.daffodilwoods.daffodildb.server.sql99.*;
18 import com.daffodilwoods.daffodildb.server.sql99.common.*;
19 import com.daffodilwoods.daffodildb.server.sql99.dcl.sqlcontrolstatement.*;
20 import com.daffodilwoods.daffodildb.server.sql99.dcl.sqlsessionstatement.*;
21 import com.daffodilwoods.daffodildb.server.sql99.dcl.sqltransactionstatement.*;
22 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemadefinition.*;
23 import com.daffodilwoods.daffodildb.server.sql99.ddl.schemamanipulation.*;
24 import com.daffodilwoods.daffodildb.server.sql99.dml.*;
25 import com.daffodilwoods.daffodildb.server.sql99.dml.declarecursor.*;
26 import com.daffodilwoods.daffodildb.server.sql99.dql.execution.*;
27 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.*;
28 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.condition.*;
29 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator.order.*;
30 import com.daffodilwoods.daffodildb.server.sql99.dql.listenerevents.*;
31 import com.daffodilwoods.daffodildb.server.sql99.dql.plan.table.*;
32 import com.daffodilwoods.daffodildb.server.sql99.dql.queryexpression.*;
33 import com.daffodilwoods.daffodildb.server.sql99.dql.queryexpression.orderbyclause.*;
34 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
35 import com.daffodilwoods.daffodildb.server.sql99.utils.*;
36 import com.daffodilwoods.daffodildb.utils.*;
37 import com.daffodilwoods.daffodildb.utils.byteconverter.*;
38 import com.daffodilwoods.daffodildb.utils.comparator.*;
39 import com.daffodilwoods.daffodildb.utils.parser.*;
40 import com.daffodilwoods.database.general.*;
41 import com.daffodilwoods.database.resource.*;
42
43 public class ServerSession implements _ServerSession {
44    protected _UserSession userSession;
45    public ServerSystem serverSystem;
46    protected String JavaDoc databaseURL;
47    private WeakOrderedKeyList serverTableList = new WeakOrderedKeyList(new CTusjohDbtfJoTfotjujwfDpnqbsbups());
48    private String JavaDoc moduleSchema = SystemTables.DEFAULT_SCHEMA;
49    private String JavaDoc moduleCatalog = SystemTables.DEFAULT_CATALOG;
50    private String JavaDoc currentSchema = SystemTables.DEFAULT_SCHEMA;
51    private String JavaDoc currentCatalog = SystemTables.DEFAULT_CATALOG;
52    private HashMap viewMap = new HashMap();
53
54    private TreeMap cursorPool = new TreeMap(String.CASE_INSENSITIVE_ORDER);
55    private HashMap materializedViewTableMap = new HashMap();
56
57    _Iterator foreignKeyIterator;
58
59    boolean commit = true;
60    private boolean checkConstraint = false;
61    public boolean verbose = true;
62    public int queryTimeOut;
63    private int type = IteratorConstants.NONSCROLLABLE;
64    protected boolean connectionStatus = false;
65
66    private HashMap iteratorsList = new HashMap();
67    protected String JavaDoc verboseUser;
68    private _DataTriggerDatabase datatriggerDatabase;
69
70    protected ArrayList createIndexesList = new ArrayList(4);
71
72    private TriggerInformationStore triggerInfoStore;
73
74    private TriggerInformationStore statementLevelTriggerInfoStore;
75
76    public ServerSession() throws DException {
77    }
78
79    public ServerSession(String JavaDoc databaseURL, _UserSession userSession,
80                         ServerSystem serverSystem) throws DException {
81       this.databaseURL = databaseURL;
82       this.userSession = userSession;
83       this.serverSystem = serverSystem;
84       triggerInfoStore = new TriggerInformationStore();
85       statementLevelTriggerInfoStore = new TriggerInformationStore();
86    }
87
88    protected void finalize() {
89       try {
90          if (connectionStatus == false) {
91             serverSystem.close(databaseURL, this);
92          }
93       } catch (DException ex) {
94
95       }
96    }
97
98    public void commit() throws DException {
99       if (connectionStatus)
100          throw new DatabaseException("DSE279", null);
101       if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
102           equalsIgnoreCase("Read Only"))
103          throw new DException("DSE1184", (Object JavaDoc[])null);
104       if (commit) {
105          _StatementExecutionContext statementExecutionContext =
106              getStatementExecutionContext();
107          _TriggerExecutionContext triggerExecutionContext = new
108              TriggerExecutionContext();
109          statementExecutionContext.setTriggerExecutionContext(
110              triggerExecutionContext);
111
112          int length = createIndexesList.size();
113          if (length > 0) {
114             HashMap tablesRefreshed = new HashMap(5);
115             QualifiedIdentifier tableName;
116             for (int i = 0; i < length; i++) {
117                IndexInfo indexInfo = (IndexInfo) createIndexesList.get(i);
118                tableName = indexInfo.getTableName();
119                if (indexInfo.type == IndexInfo.CREATEINDEX) {
120                   _IndexCharacteristics ic = serverSystem.getDataDictionary(databaseURL).
121                       getIndexCharacteristics(tableName);
122                   if (tablesRefreshed.get(tableName) == null) {
123                      ic.refresh();
124                      tablesRefreshed.put(tableName, "");
125                   }
126                   boolean isNonUnique = indexInfo.getIsNonUnique();
127                   _IndexInformation iif = ic.getIndexInformations(indexInfo.
128                       getIndexName(), isNonUnique);
129                   if (isNonUnique)
130                      ( (MergeDatabase) serverSystem.getMergeDatabase(databaseURL)).
131                          getSessionVersionHandler().update(iif);
132                   indexInfo.setIndexInformation(iif);
133                }
134             }
135          }
136
137          statementExecutionContext.setCreateIndexList(createIndexesList);
138          try {
139             userSession.commit(statementExecutionContext);
140          } finally {
141             createIndexesList.clear();
142          }
143          userSession.getSavePointVector().clear();
144       }
145    }
146
147    public void rollback() throws DException {
148       if (connectionStatus)
149          throw new DatabaseException("DSE279", null);
150       if (getUserSession().getTransactionAccessMode().equals("Read Only"))
151          throw new DException("DSE1184", (Object JavaDoc[])null);
152
153       if (commit) {
154          _StatementExecutionContext statementExecutionContext =
155              getStatementExecutionContext();
156          TriggerExecutionContext triggerExecutionContext = new
157              TriggerExecutionContext();
158          statementExecutionContext.setTriggerExecutionContext(
159              triggerExecutionContext);
160          try {
161             userSession.rollback(statementExecutionContext);
162          } finally {
163             createIndexesList.clear();
164          }
165          userSession.getSavePointVector().clear();
166       }
167    }
168
169    public synchronized _ServerTable getServerTable(QualifiedIdentifier tableName) throws
170        DException {
171
172       if (connectionStatus)
173          throw new DatabaseException("DSE279", null);
174       _ServerTable serverTable = (_ServerTable) serverTableList.get(tableName.
175           getIdentifier());
176       if (serverTable != null)
177          return serverTable;
178
179       _DataTriggerTable dataTriggerTable = getDataTriggerTable(
180           tableName);
181       _StatementTriggerTable statementTriggerTable = serverSystem.
182           getStatementTriggerTable(databaseURL, tableName);
183       serverTable = new ServerTable(tableName, this, dataTriggerTable,
184                                     statementTriggerTable);
185       serverTableList.put(tableName.getIdentifier(), serverTable);
186       return serverTable;
187
188    }
189
190    public _StatementExecutionContext getStatementExecutionContext() throws
191        DException {
192       StatementExecutionContext statementExecutionContext = new StatementExecutionContext();
193       statementExecutionContext.setServerSession(this);
194       statementExecutionContext.setServerSystem(serverSystem);
195       return statementExecutionContext;
196    }
197
198    public String JavaDoc getDatabaseURL() throws DException {
199       return this.databaseURL;
200    }
201
202    public _UserSession getUserSession() throws DException {
203       return userSession;
204    }
205
206    public _ColumnCharacteristics getColumnCharacteristics(QualifiedIdentifier
207        tableName) throws DException {
208       if (connectionStatus)
209          throw new DatabaseException("DSE279", null);
210       _DataDictionarySystem dataDictionarySystem = serverSystem.
211           getDataDictionarySystem();
212       return dataDictionarySystem.getDataDictionary(databaseURL).
213           getColumnCharacteristics(tableName, true);
214    }
215
216    public void setTimeOut(int timeOut) throws DException {
217       queryTimeOut = timeOut;
218    }
219
220    public void setModuleSchema(String JavaDoc moduleSchema) throws DException {
221       this.moduleSchema = moduleSchema;
222    }
223
224    public String JavaDoc getModuleSchema() throws DException {
225       return moduleSchema;
226    }
227
228    public void setModuleCatalog(String JavaDoc moduleCatalog) throws DException {
229       this.moduleCatalog = moduleCatalog;
230    }
231
232    public String JavaDoc getModuleCatalog() throws DException {
233       return moduleCatalog;
234    }
235
236    public String JavaDoc getCurrentRole() throws DException {
237       return userSession.getCurrentRole();
238    }
239
240    public String JavaDoc getCurrentUser() throws DException {
241       return userSession.getCurrentUser();
242    }
243
244    public java.sql.Date JavaDoc getDate() throws DException {
245       return userSession.getDate();
246    }
247
248    public Time getTime() throws DException {
249       return userSession.getTime();
250    }
251
252    public void deleteTable(QualifiedIdentifier tableName, boolean dropTable) throws
253        DException {
254       /**@todo check the exception */
255       try {
256          serverSystem.deleteTable(databaseURL, tableName, dropTable);
257       } catch (DatabaseException e) {
258          throw e;
259       }
260    }
261
262    public void setCurrentSchema(String JavaDoc currentSchema) throws DException {
263       this.currentSchema = currentSchema;
264    }
265
266    public String JavaDoc getCurrentSchema() throws DException {
267       return currentSchema;
268    }
269
270    public void setCurrentCatalog(String JavaDoc currentCatalog) throws DException {
271       this.currentCatalog = currentCatalog;
272    }
273
274    public String JavaDoc getCurrentCatalog() throws DException {
275       return currentCatalog;
276    }
277
278    public boolean isEnabledAuthorizationIdentifier(String JavaDoc
279        authorizationIdentifier, boolean checkBrowserUser) throws
280        DException {
281       if (checkBrowserUser && getCurrentUser().equalsIgnoreCase(ServerSystem.browserUser))
282          return!authorizationIdentifier.equalsIgnoreCase(SystemTables.SYSTEM);
283       return userSession.isEnabledAuthorizationIdentifier(authorizationIdentifier);
284    }
285
286    public String JavaDoc getAuthorizationIdentifier() throws DException {
287       return userSession.getAuthorizationIdentifier();
288    }
289
290    public void setTransactionMode(SessionTransactionMode sessionTransactionMode) throws
291        DException {
292       userSession.setTransactionMode(sessionTransactionMode);
293    }
294
295    public SessionTransactionMode getTransactionMode() throws DException {
296       return userSession.getTransactionMode();
297    }
298
299    public void setUserSession(_UserSession userSession) throws DException {
300       this.userSession = userSession;
301    }
302
303    public void close() throws DException {
304       try {
305          userSession.rollback(getStatementExecutionContext());
306       } catch (DException e) {}
307       connectionStatus = true;
308       serverSystem.close(databaseURL, this);
309    }
310
311    public java.sql.Timestamp JavaDoc getTimeStamp() throws DException {
312       return userSession.getTimeStamp();
313    }
314
315    public String JavaDoc getDatabase() throws DException {
316       int index = databaseURL.lastIndexOf(".");
317       String JavaDoc databaseName = databaseURL.substring(index + 1);
318       return databaseName;
319    }
320
321    public Object JavaDoc getSessionConstant() throws DException {
322       return userSession.getSessionConstant();
323    }
324
325    public int getIsolationLevel() throws DException {
326       return userSession.getSession().getIsolationLevel();
327    }
328
329    public SessionConditionInfo getSessionCondition() throws DException {
330       throw new UnsupportedOperationException JavaDoc(" getSessionCondition not supported ");
331    }
332
333    public Object JavaDoc getSessionId() throws DException {
334       return userSession.getSession().getSessionId();
335    }
336
337    public _ServerSession getGlobalSession() throws DException {
338       return userSession.getGlobalSession();
339    }
340
341    public String JavaDoc[] getSuitableIndex(String JavaDoc tableName, String JavaDoc[] columns) throws
342        DException {
343       throw new UnsupportedOperationException JavaDoc();
344    }
345
346    public boolean prepare() throws DException {
347       if (connectionStatus)
348          throw new DException("DSE279", null);
349       _StatementExecutionContext statementExecutionContext =
350           getStatementExecutionContext();
351       TriggerExecutionContext triggerExecutionContext = new
352           TriggerExecutionContext();
353       statementExecutionContext.setTriggerExecutionContext(
354           triggerExecutionContext);
355       return userSession.prepare(statementExecutionContext);
356    }
357
358    public boolean makePersistent() throws DException {
359       if (connectionStatus)
360          throw new DException("DSE279", null);
361       _StatementExecutionContext statementExecutionContext =
362           getStatementExecutionContext();
363       TriggerExecutionContext triggerExecutionContext = new
364           TriggerExecutionContext();
365       statementExecutionContext.setTriggerExecutionContext(
366           triggerExecutionContext);
367       statementExecutionContext.setCreateIndexList(createIndexesList);
368       return userSession.makePersistent(statementExecutionContext);
369    }
370
371    public TimeZone getTimeZone() throws DException {
372       return userSession.getTimeZone();
373    }
374
375    public _ServerSession getSystemServerSession() throws DException {
376       java.util.Properties JavaDoc systemProperties = new java.util.Properties JavaDoc();
377       return serverSystem.getServerSession(SystemTables.SYSTEM,
378                                            SystemTables.SYSTEM, systemProperties,
379                                            databaseURL);
380    }
381
382    public _Connection getSystemConnection() throws DException {
383       java.util.Properties JavaDoc systemProperties = new java.util.Properties JavaDoc();
384       systemProperties.setProperty(_Server.USER, SystemTables.SYSTEM);
385       systemProperties.setProperty(_Server.XID, SystemTables.SYSTEM);
386       return serverSystem.get_Connection(databaseURL, systemProperties);
387    }
388
389    public _DataDictionary getDataDictionary() throws DException {
390       return serverSystem.getDataDictionarySystem().getDataDictionary(databaseURL);
391    }
392
393    public void setAutoCommit(boolean autoCommit0) throws DException {
394
395       if (userSession.getAutoCommit() != autoCommit0) {
396          if (userSession.getAutoCommit() == false)
397             commit();
398          userSession.setAutoCommit(autoCommit0);
399       }
400
401    }
402
403    public void createDatabase(String JavaDoc databaseName, Properties prop) throws
404        DException {
405       serverSystem.createDatabase(databaseName, prop);
406    }
407
408    public void createTable(QualifiedIdentifier tableName) throws DException {
409       _ColumnCharacteristics cc = getColumnCharacteristics(tableName);
410       String JavaDoc country = ( (ColumnCharacteristics) cc).getCountry();
411       String JavaDoc[] columns = cc.getColumnNames();
412       Object JavaDoc[][] columnsDetail = new Object JavaDoc[columns.length][4];
413       for (int i = 0; i < columns.length; i++) {
414          columnsDetail[i][0] = columns[i];
415          int index = cc.getColumnIndex(columns[i]);
416          int type = cc.getColumnType(index);
417          int size = cc.getSize(index);
418          size = country != null &&
419              ColumnCharacteristicsUtilities.isStringType(type) ? (size + 1) * 2 :
420              size;
421          columnsDetail[i][1] = new Long JavaDoc(type);
422          columnsDetail[i][2] = new Integer JavaDoc(size);
423          columnsDetail[i][3] = new Long JavaDoc(index);
424       }
425       ColumnInformation columnInfo = new ColumnInformation();
426       if (country != null) {
427          columnInfo.setCountry(country);
428          columnInfo.setLanguage( ( (ColumnCharacteristics) cc).getLanguage());
429       }
430       columnInfo.setObjects(columnsDetail);
431       _Database mergeDatabase = serverSystem.getMergeDatabase(databaseURL);
432       mergeDatabase.createTable(tableName, columnInfo);
433    }
434
435    public _Iterator getIterator(QualifiedIdentifier tableName,
436                                 _SingleTableExecuter singleTableExecuter) throws
437        DException {
438       if (connectionStatus)
439          throw new DatabaseException("DSE279", null);
440       if (singleTableExecuter.getInternalIteratorRequired())
441          return userSession.getUserSessionTable(tableName).getInternalIterator(singleTableExecuter, this);
442       else
443          return userSession.getUserSessionTable(tableName).getIterator(singleTableExecuter, this);
444
445    }
446
447    public Object JavaDoc execute(String JavaDoc query, int queryTimeOut) throws DException {
448       return execute(query, queryTimeOut, getType());
449    }
450
451    public Object JavaDoc execute(String JavaDoc query, int queryTimeOut, int type) throws
452        DException {
453       if (verbose)
454          PrintHandler.print(query, null, verboseUser);
455       if (connectionStatus)
456          throw new DException("DSE279", null);
457       try {
458          Object JavaDoc parsedQuery = Parser.parseQuery(query);
459          return execute(parsedQuery, queryTimeOut, type);
460
461       } catch (DException de) {
462          throw de;
463       } catch (RuntimeException JavaDoc de) {
464          throw de;
465       }
466    }
467
468    public Object JavaDoc execute(Object JavaDoc parsedQuery, int queryTimeOut, int type) throws
469        DException {
470       if (parsedQuery instanceof queryexpression) {
471          {
472             userSession.startTransaction();
473          }
474
475          int tp = getType();
476          queryexpression qurexp = (queryexpression) parsedQuery;
477          ServerSessionWrapper sersewr = new ServerSessionWrapper(this);
478          if (qurexp.isSimpleQuery(sersewr)) {
479             if (type == IteratorConstants.UPDATABLE) {
480                tp = IteratorConstants.UPDATABLE;
481             }
482          } else {
483             tp = IteratorConstants.NONSCROLLABLE;
484          }
485          sersewr.setType(tp);
486          _Executer executer = (_Executer) (qurexp).run(sersewr);
487          Object JavaDoc obj = executer.execute( (Object JavaDoc[])null);
488          return obj;
489       }
490
491       if (parsedQuery instanceof SQLschemastatement) {
492          commit();
493          _ServerSession ss = getSystemServerSession();
494          if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
495              equalsIgnoreCase("Read Only"))
496             throw new DException("DSE1184", (Object JavaDoc[])null);
497          Object JavaDoc returnedObject = null;
498          _DataDictionary dd = getDataDictionary();
499          dd.lockDDL();
500          try {
501             try {
502                returnedObject = ( (SQLschemastatement) parsedQuery).run(this);
503             } catch (DException ex) {
504                dd.restoreGeneratedKeys();
505                createIndexesList.clear();
506                ss.rollback();
507                throw ex;
508             }
509             if (! (parsedQuery instanceof dropdatabasestatement)) {
510                ( (ServerSession) ss).createIndexesList = createIndexesList;
511                ss.commit();
512                createIndexesList.clear();
513             }
514          } finally {
515             dd.releaseDDL();
516             ss.close();
517          }
518          if (returnedObject == null)
519             return new Integer JavaDoc(Integer.MIN_VALUE);
520          return returnedObject;
521       }
522       if (parsedQuery instanceof SQLtransactionstatement) {
523          Object JavaDoc returnedObject = ( (SQLtransactionstatement) parsedQuery).run(this);
524          return new Integer JavaDoc(Integer.MIN_VALUE);
525
526       }
527       if (parsedQuery instanceof SQLsessionstatement) {
528          _StatementExecutionContext sec = getStatementExecutionContext();
529          Object JavaDoc returnedObject = ( (SQLsessionstatement) parsedQuery).run(sec);
530          return new Integer JavaDoc(Integer.MIN_VALUE);
531       }
532
533       if (parsedQuery instanceof SQLdatastatement) {
534          if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
535              equalsIgnoreCase("Read Only"))
536             throw new DException("DSE1184", (Object JavaDoc[])null);
537          _StatementExecutionContext sec = getStatementExecutionContext();
538          _Executer executer = (_Executer) ( (SQLdatastatement) parsedQuery).run(
539              sec);
540          Object JavaDoc returnedObject = executer.execute( (_VariableValues)null);
541          if (returnedObject == null)
542             return new Integer JavaDoc(Integer.MIN_VALUE);
543          return returnedObject;
544       }
545       if (parsedQuery instanceof SQLcontrolstatement) {
546          _StatementExecutionContext sec = getStatementExecutionContext();
547          _Executer executer = (_Executer) ( (SQLcontrolstatement) parsedQuery).run(
548              sec);
549          Object JavaDoc returnedObject = executer.execute( (_VariableValues)null);
550          ( (CallResult) returnedObject).print();
551          if (returnedObject == null)
552             return new Integer JavaDoc(Integer.MIN_VALUE);
553          return returnedObject;
554       }
555
556       throw new DException("DSE531", null);
557    }
558
559    public Object JavaDoc execute(String JavaDoc query, int queryTimeOut, int type, int queryType,
560                          int autoGeneratedType, Object JavaDoc autoGenetatedValues) throws
561        DException {
562       try {
563          Object JavaDoc parsedQuery = Parser.parseQuery(query);
564          if (parsedQuery instanceof SQLdatastatement) {
565             if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
566                 equalsIgnoreCase("Read Only"))
567                throw new DException("DSE1184", (Object JavaDoc[])null);
568             _StatementExecutionContext sec = getStatementExecutionContext();
569             sec.setAutoGeneratedInfo(autoGeneratedType, autoGenetatedValues);
570             _Executer executer = (_Executer) ( (SQLdatastatement) parsedQuery).run(
571                 sec);
572             return executer.execute( (_VariableValues)null);
573          } else {
574             if (queryType == _Connection.EXECUTE)
575                return execute(parsedQuery, queryTimeOut, type);
576             else
577                return executeUpdate(parsedQuery, queryTimeOut);
578          }
579       } catch (DException de) {
580          throw de;
581       } catch (RuntimeException JavaDoc de) {
582          throw de;
583       }
584    }
585
586    public Object JavaDoc executeParameterised(String JavaDoc query, int queryTimeOut) throws
587        DException {
588       try {
589          Object JavaDoc parsedQuery = Parser.parseQuery(query);
590          if (parsedQuery instanceof queryexpression)
591          {
592             {
593                userSession.startTransaction();
594             }
595
596             queryexpression qurexp = (queryexpression) parsedQuery;
597             ServerSessionWrapper serwr = new ServerSessionWrapper(this);
598             serwr.setType(IteratorConstants.NONSCROLLABLE);
599             if (qurexp.isSimpleQuery(serwr))
600                return qurexp.run(serwr);
601             return qurexp.run(serwr);
602          }
603
604          if (parsedQuery instanceof SQLschemastatement) {
605             commit();
606             _ServerSession ss = getSystemServerSession();
607             _DataDictionary dd = getDataDictionary();
608             if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
609                 equalsIgnoreCase("Read Only"))
610                throw new DException("DSE1184", (Object JavaDoc[])null);
611             Object JavaDoc retunObject = null;
612             dd.lockDDL();
613             try {
614                try {
615                   retunObject = ( (SQLschemastatement) parsedQuery).run(this);
616                } catch (DException ex) {
617                   dd.restoreGeneratedKeys();
618                   createIndexesList.clear();
619                   ss.rollback();
620                   throw ex;
621                }
622                if (! (parsedQuery instanceof dropdatabasestatement)) {
623                   ( (ServerSession) ss).createIndexesList = createIndexesList;
624                   ss.commit();
625                   createIndexesList.clear();
626                }
627             } finally {
628                dd.releaseDDL();
629             }
630             return retunObject;
631          }
632          if (parsedQuery instanceof SQLtransactionstatement) {
633             ( (SQLtransactionstatement) parsedQuery).run(this);
634             return new Integer JavaDoc(Integer.MIN_VALUE);
635
636          }
637          if (parsedQuery instanceof SQLsessionstatement) {
638             _StatementExecutionContext sec = getStatementExecutionContext();
639             ( (SQLsessionstatement) parsedQuery).run(sec);
640             return new Integer JavaDoc(Integer.MIN_VALUE);
641
642          }
643
644          if (parsedQuery instanceof SQLdatastatement) {
645             if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
646                 equalsIgnoreCase("Read Only"))
647                throw new DException("DSE1184", (Object JavaDoc[])null);
648
649             _StatementExecutionContext sec = getStatementExecutionContext();
650             return ( (SQLdatastatement) parsedQuery).run(sec);
651          }
652          if (parsedQuery instanceof SQLcontrolstatement) {
653
654             _StatementExecutionContext sec = getStatementExecutionContext();
655             return ( (SQLcontrolstatement) parsedQuery).run(sec);
656          }
657
658
659          if (parsedQuery instanceof SQLprocedurestatement) {
660             if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
661                 equalsIgnoreCase("Read Only"))
662                throw new DException("DSE1184", (Object JavaDoc[])null);
663             return (_Executer) ( (SQLprocedurestatement) parsedQuery).run(this);
664          }
665       } catch (DException de) {
666          throw de;
667       } catch (RuntimeException JavaDoc de) {
668          throw de;
669       }
670       throw new DException("DSE86", null);
671    }
672
673    public Object JavaDoc executeUpdate(String JavaDoc query, int queryTimeOut) throws DException {
674       if (verbose)
675          PrintHandler.print(query, null, verboseUser);
676       try {
677          if (connectionStatus)
678             throw new DException("DSE279", null);
679          Object JavaDoc parsedObject = Parser.parseQuery(query);
680          return executeUpdate(parsedObject, queryTimeOut);
681
682       } catch (DException de) {
683          throw de;
684       } catch (RuntimeException JavaDoc de) {
685          throw de;
686       }
687    }
688
689    public Object JavaDoc executeUpdate(Object JavaDoc parsedObject, int queryTimeOut) throws
690        DException {
691       if (parsedObject instanceof SQLdatastatement) {
692          if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
693              equalsIgnoreCase("Read Only"))
694             throw new DException("DSE1184", (Object JavaDoc[])null);
695          _StatementExecutionContext sec = getStatementExecutionContext();
696          _Executer executer = (_Executer) ( (SQLdatastatement) parsedObject).run(
697              sec);
698          Object JavaDoc returnedObject = executer.execute( (_VariableValues)null);
699          if (returnedObject == null)
700             return new Integer JavaDoc(Integer.MIN_VALUE);
701          return returnedObject;
702       } else if (parsedObject instanceof SQLschemastatement) {
703          commit();
704          _ServerSession ss = getSystemServerSession();
705          if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
706              equalsIgnoreCase("Read Only"))
707             throw new DException("DSE1184", (Object JavaDoc[])null);
708          Object JavaDoc returnedObject = null;
709          _DataDictionary dd = getDataDictionary();
710          dd.lockDDL();
711          try {
712             try {
713                returnedObject = ( (SQLschemastatement) parsedObject).run(this);
714             } catch (DException ex) {
715                dd.restoreGeneratedKeys();
716                createIndexesList.clear();
717                ss.rollback();
718                throw ex;
719             }
720             if (! (parsedObject instanceof dropdatabasestatement)) {
721                ( (ServerSession) ss).createIndexesList = createIndexesList;
722
723                ss.commit();
724                createIndexesList.clear();
725             }
726          } finally {
727             dd.releaseDDL();
728          }
729          if (returnedObject == null)
730             return new Integer JavaDoc(Integer.MIN_VALUE);
731          return returnedObject;
732       }
733       throw new DException("DSE533", null);
734    }
735
736    public Object JavaDoc executeUpdateParameterised(String JavaDoc query, int queryTimeOut) throws
737        DException {
738       try {
739          if (connectionStatus)
740             throw new DException("DSE279", null);
741          Object JavaDoc parsedObject = Parser.parseQuery(query);
742          if (parsedObject instanceof SQLdatastatement) {
743             if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
744                 equalsIgnoreCase("Read Only"))
745                throw new DException("DSE1184", (Object JavaDoc[])null);
746             _StatementExecutionContext sec = getStatementExecutionContext();
747             return ( (StatementExecuter) parsedObject).run(sec);
748          } else if (parsedObject instanceof SQLschemastatement) {
749             commit();
750             _ServerSession ss = getSystemServerSession();
751             if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
752                 equalsIgnoreCase("Read Only"))
753                throw new DException("DSE1184", (Object JavaDoc[])null);
754             _DataDictionary dd = getDataDictionary();
755             dd.lockDDL();
756             try {
757                try {
758                   ( (SQLschemastatement) parsedObject).run(this);
759                } catch (DException ex) {
760                   dd.restoreGeneratedKeys();
761                   createIndexesList.clear();
762                   ss.rollback();
763                   throw ex;
764                }
765                if (! (parsedObject instanceof dropdatabasestatement)) {
766                   ( (ServerSession) ss).createIndexesList = createIndexesList;
767                   ss.commit();
768                   createIndexesList.clear();
769                }
770             } finally {
771                dd.releaseDDL();
772             }
773             return new Integer JavaDoc(Integer.MIN_VALUE);
774          }
775       } catch (DException de) {
776          throw de;
777       } catch (RuntimeException JavaDoc de) {
778          throw de;
779       }
780       throw new DException("DSE533", null);
781    }
782
783    public Object JavaDoc executeQuery(String JavaDoc query, int queryTimeOut) throws DException {
784       return executeQuery(query, queryTimeOut, getType());
785    }
786
787    public Object JavaDoc executeQuery(String JavaDoc query, int queryTimeOut, int type) throws
788        DException {
789       if (verbose)
790          PrintHandler.print(query, null, verboseUser);
791       try {
792          if (connectionStatus)
793             throw new DException("DSE279", null);
794          Object JavaDoc parsedQuery = Parser.parseQuery(query);
795          if (parsedQuery instanceof queryexpression /*|| parsedQuery instanceof selectstatementsinglerow */) {
796             {
797                userSession.startTransaction();
798             }
799
800             queryexpression qurexp = (queryexpression) parsedQuery;
801             int tp = IteratorConstants.NONSCROLLABLE;
802             ServerSessionWrapper sersewr = new ServerSessionWrapper(this);
803             if (type == IteratorConstants.UPDATABLE)
804                tp = qurexp.isSimpleQuery(sersewr) ? IteratorConstants.UPDATABLE : IteratorConstants.NONSCROLLABLE;
805             sersewr.setType(tp);
806             _Executer executer = (_Executer) qurexp.run(sersewr);
807             return executer.execute( (Object JavaDoc[])null);
808          }
809       } catch (DException de) {
810          throw de;
811       } catch (RuntimeException JavaDoc de) {
812          throw de;
813       }
814       throw new DException("DSE86", null);
815    }
816
817    public Object JavaDoc executeQueryParameterised(String JavaDoc query, int queryTimeOut) throws
818        DException {
819       try {
820          if (connectionStatus)
821             throw new DException("DSE279", null);
822          if ( ( (String JavaDoc) getUserSession().getTransactionAccessMode()).
823              equalsIgnoreCase("Read Only"))
824             throw new DException("DSE1184", (Object JavaDoc[])null);
825          Object JavaDoc parsedQuery = Parser.parseQuery(query);
826          if (parsedQuery instanceof queryexpression /*|| parsedQuery instanceof selectstatementsinglerow */) {
827             {
828                userSession.startTransaction();
829             }
830
831             queryexpression qurexp = (queryexpression) parsedQuery;
832             ServerSessionWrapper serwr = new ServerSessionWrapper(this);
833             serwr.setType(IteratorConstants.NONSCROLLABLE);
834             if (qurexp.isSimpleQuery(serwr))
835                return qurexp.run(serwr);
836             return qurexp.run(serwr);
837          }
838       } catch (DException de) {
839          throw de;
840       } catch (RuntimeException JavaDoc de) {
841          throw de;
842       }
843       throw new DException("DSE86", null);
844
845    }
846
847    public _Iterator getIndexedIterator(_Iterator selectIterator,
848                                        _ExpressionOrderValues order, CbCUsffWbmvfIboemfs btreeValueHandler) throws
849        DException {
850       if (serverSystem.getReadOnlyMode()) {
851          return new ReadOnlyTempIndexIterator(selectIterator, order, ( (MergeDatabase) serverSystem.getMergeDatabase(databaseURL)).getVersionHandler());
852
853       }
854       TempIndexDatabase tempIndexDatabase = (TempIndexDatabase) ( (MergeDatabase) serverSystem.getMergeDatabase(databaseURL)).getMemoryDatabase();
855       return new TemporaryIndexIterator(selectIterator, order, btreeValueHandler, tempIndexDatabase);
856    }
857
858    public _IndexTable getIndexTable(QualifiedIdentifier tableName) throws
859        DException {
860       return (_IndexTable) serverSystem.getMergeDatabase(databaseURL).getTable(
861           tableName);
862    }
863
864    public int getType() {
865       return type;
866    }
867
868    public void setType(int type0) {
869       type = type0;
870    }
871
872    public void createIndex(QualifiedIdentifier tableName, String JavaDoc indexName,
873                            boolean isNonUnique) throws DException {
874       IndexInfo indexInfo = new IndexInfo(IndexInfo.CREATEINDEX, tableName, indexName, null);
875       indexInfo.setIsNonUnique(isNonUnique);
876       createIndexesList.add(indexInfo);
877
878    }
879
880    public void createFullTextIndex(QualifiedIdentifier tableName,
881                                    String JavaDoc indexName, String JavaDoc[] columnName) throws
882        DException {
883       MergeDatabase md = ( (MergeDatabase) userSession.getSession().
884                           getSessionDatabase().getMergeDatabase());
885       if (!md.getVersionHandler().isFullTextSupported())
886          throw new DException("DSE5590", new Object JavaDoc[] {"createFullTextIndex"});
887       md.createFullTextIndex(tableName, indexName, columnName);
888    }
889
890    public void dropFullTextIndex(QualifiedIdentifier tableName, String JavaDoc indexName) throws DException {
891       ( (_IndexDatabase) userSession.getSession().getSessionDatabase().
892        getMergeDatabase()).dropFullTextIndex(tableName, indexName);
893    }
894
895    public void createIndexForSystemTable(QualifiedIdentifier tableName,
896                                          String JavaDoc indexName) throws DException {
897       createIndex(tableName, indexName, true);
898    }
899
900    public void dropTable(QualifiedIdentifier tableName) throws DException {
901       serverSystem.getMergeDatabase(databaseURL).dropTable(tableName);
902    }
903
904
905    public void dropIndex(QualifiedIdentifier tableName, String JavaDoc indexName) throws
906        DException {
907       IndexInfo indexInfo = new IndexInfo(IndexInfo.DROPINDEX, tableName, indexName, null);
908       createIndexesList.add(indexInfo);
909
910       ( (_IndexDatabase) userSession.getSession().getSessionDatabase().
911        getMergeDatabase()).dropTemporaryIndex(tableName, indexName);
912    }
913
914    public boolean getAutoCommit() {
915       return userSession.getAutoCommit();
916    }
917
918    public String JavaDoc[] getUniqueInformation(QualifiedIdentifier tableName) throws
919        DException {
920       _PrimaryAndUniqueConstraintCharacteristics pucc = getDataDictionary().
921           getDDSConstraintsOperation().
922           getPrimaryAndUniqueConstraintCharacteristics(tableName, false);
923       _UniqueConstraint uc = pucc.getPrimaryConstraints();
924       return uc == null ? null : uc.getColumnNames();
925    }
926
927    public HashMap getViewMap() throws DException {
928       return viewMap;
929    }
930
931    public _Iterator getForeignKeyIterator(QualifiedIdentifier tableName,
932                                           _SingleTableExecuter conditionExecuter,
933                                           _TableAlias[] tableAlias) throws
934        DException {
935       if (connectionStatus)
936          throw new DatabaseException("DSE279", null);
937       HashMap tablesMapping = new HashMap();
938       HashMap columnsMapping = new HashMap();
939       ArrayList tableDetailsList = new ArrayList();
940       _DataDictionary dic = getDataDictionary();
941       ChainedColumnInfo cci = new ChainedColumnInfo(tableName, "");
942       ChainedTableInfo cti = new ChainedTableInfo(cci, tableName);
943       tablesMapping.put(cci, cti);
944       TableDetails tableD0 = new TableDetails();
945       tableD0.setTableName(new String JavaDoc[] {tableName.catalog, tableName.schema,
946                            tableName.name});
947       tableD0.cc = dic.getColumnCharacteristics(tableD0.getQualifiedIdentifier(), true);
948       tableDetailsList.add(tableD0);
949       for (int i = 0; i < tableAlias.length; i++) {
950          String JavaDoc[] columns = tableAlias[i].getColumnName();
951          ChainedTableInfo parent = cti;
952          for (int j = 0; j < columns.length; j++) {
953             QualifiedIdentifier tempName = parent.getTableName();
954             ChainedColumnInfo childColumnInfo = new ChainedColumnInfo(tempName,
955                 columns[j]);
956             ChainedTableInfo childTableInfo = (ChainedTableInfo) tablesMapping.get(
957                 childColumnInfo);
958             if (childTableInfo != null) {
959                parent = childTableInfo;
960                continue;
961             }
962
963             _ColumnCharacteristics cc = dic.getColumnCharacteristics(tempName, true);
964             _ReferencingConstraintCharacteristics rcc = dic.
965                 getDDSConstraintsOperation().
966                 getReferencingConstraintCharacteristics(tempName, false);
967             _ReferentialConstraint rc = rcc.getReferencingConstraints(
968                 new int[] {cc.getColumnIndex(columns[j])})[0];
969
970             QualifiedIdentifier childtemp = rc.getReferencedTable();
971
972             TableDetails tableD = new TableDetails();
973             tableD.setTableName(new String JavaDoc[] {childtemp.catalog, childtemp.schema,
974                                 childtemp.name});
975
976             childTableInfo = new ChainedTableInfo(childColumnInfo, childtemp);
977
978             int[] referencedIndexes = rc.getReferencedColumns();
979             int columnIndex = cc.getColumnIndex(columns[j]);
980             booleanvalueexpression referencingCondition =
981                 rc.getReferencingCondition(rc.getReferencingColumns());
982
983             booleanvalueexpression referencedCondition =
984                 rc.getReferencedCondition(referencedIndexes);
985             _Reference[] referecingCoditionRefs = GeneralPurposeStaticClass.
986                 changeReferences(referencingCondition.getParameters(null));
987             _Reference[] referencedConditionRefs = GeneralPurposeStaticClass.
988                 changeReferences(referencedCondition.getParameters(null));
989
990             TableDetails parentDetails = new TableDetails();
991             parentDetails.setTableName(new String JavaDoc[] {tempName.catalog,
992                                        tempName.schema, tempName.name});
993
994             IteratorInfo ii1 = new IteratorInfo(childtemp,
995                                                 referencedCondition, tableD,
996                                                 tempName,
997                                                 columnIndex,
998                                                 referencedConditionRefs);
999
1000            IteratorInfo ii2 = new IteratorInfo(tempName,
1001                                                referencingCondition, parentDetails,
1002                                                childtemp,
1003                                                referencedIndexes[0],
1004                                                referecingCoditionRefs);
1005
1006            childTableInfo.setReferencingToReferencedTableIteratorInfo(ii1); // __rowid = ?
1007
childTableInfo.setReferencedToReferencingTableIteratorInfo(ii2); // countryid = ?
1008
childTableInfo.setParentTableInfo(parent);
1009            parent.addChildTableInfo(childTableInfo);
1010            tablesMapping.put(childColumnInfo, childTableInfo);
1011            tableD.cc = dic.getColumnCharacteristics(tableD.getQualifiedIdentifier(), true);
1012            tableDetailsList.add(tableD);
1013            parent = childTableInfo;
1014            if (j == columns.length - 1) {
1015               columnsMapping.put(columns, childColumnInfo);
1016            }
1017         }
1018      }
1019      ForeignConstraintTable fct = new ForeignConstraintTable(this, tablesMapping,
1020          cti, columnsMapping, tableDetailsList);
1021      _Iterator sessionIterator = userSession.getUserSessionTable(tableName).
1022          getForeignConstraintIterator(conditionExecuter, fct);
1023      foreignKeyIterator = ( (SessionIterator) sessionIterator).
1024          getForeignKeyIterator();
1025      return sessionIterator;
1026   }
1027
1028   public ForeignKeyIterator getForeignKeyIterator() throws DException {
1029      if (foreignKeyIterator instanceof ForeignKeyIterator)
1030         return (ForeignKeyIterator) foreignKeyIterator;
1031      if (foreignKeyIterator instanceof NonIndexedFilterIterator)
1032         return (ForeignKeyIterator) ( (NonIndexedFilterIterator)
1033                                      foreignKeyIterator).getForeignKeyIterator();
1034      if (foreignKeyIterator instanceof IndexedFilterIterator)
1035         return (ForeignKeyIterator) ( (IndexedFilterIterator) foreignKeyIterator).
1036             getForeignKeyIterator();
1037      throw new DException("DSE5537", new Object JavaDoc[] {foreignKeyIterator.getClass().getName()});
1038   }
1039
1040   public Object JavaDoc[] getForeignConstraintCharacteritics(QualifiedIdentifier
1041       tableName, String JavaDoc columnName) throws DException {
1042      try {
1043         _ColumnCharacteristics cc = getColumnCharacteristics(tableName);
1044         if (cc.getTableType() == TypeConstants.VIEW) {
1045            return getViewObject(tableName, true).getForeignConstraintCharacteritics(
1046                columnName, this, cc);
1047         }
1048         _ReferencingConstraintCharacteristics rcc = getDataDictionary().
1049             getDDSConstraintsOperation().getReferencingConstraintCharacteristics(
1050             tableName, false);
1051         _ReferentialConstraint rc = rcc.getReferencingConstraints(new int[] {cc.
1052             getColumnIndex(columnName)})[0];
1053         QualifiedIdentifier referencedTable = rc.getReferencedTable();
1054         String JavaDoc[] referencedColumns = rc.getReferencedColumnNames();
1055         return new Object JavaDoc[] {
1056             referencedTable, getColumnCharacteristics(referencedTable),
1057             referencedColumns};
1058      } catch (NullPointerException JavaDoc nex) {
1059         throw new DException("DSE5538", new Object JavaDoc[] {columnName});
1060      }
1061   }
1062
1063   public synchronized _ViewObject getViewObject(QualifiedIdentifier viewName, boolean checkUserRight) throws DException {
1064      _DataDictionary dataDictionary = getDataDictionary();
1065      if (checkUserRight) {
1066         _PrivilegeTable pt = userSession.getPrivilegeCharacteristics().getPrivilegeTable(viewName);
1067         boolean hasRight = pt.hasTablePrivileges(_PrivilegeTable.SELECT);
1068         if (!hasRight)
1069            throw new DException("DSE8132", null);
1070      }
1071      return dataDictionary.getViewObject(viewName, this);
1072   }
1073
1074   public boolean cursorAlreadyCreated(String JavaDoc name) {
1075      return cursorPool.containsKey(name);
1076   }
1077
1078   public void removeCursor(String JavaDoc name) {
1079      cursorPool.remove(name);
1080   }
1081
1082   public void addCursor(String JavaDoc cname, _Cursor cur) {
1083      cursorPool.put(cname, cur);
1084   }
1085
1086   public _Cursor getCursor(String JavaDoc name) {
1087      return (_Cursor) cursorPool.get(name);
1088   }
1089
1090   public int getEstimatedRowCount(QualifiedIdentifier parm1) throws com.
1091
       daffodilwoods.database.resource.DException {
1092      return ( (_IndexTable) serverSystem.getMergeDatabase(databaseURL).getTable(
1093          parm1)).getEstimatedRowCount();
1094   }
1095
1096   public void alterTable(QualifiedIdentifier tableName,
1097                          _ColumnCharacteristics cc, Object JavaDoc defaultValue) throws
1098       DException {
1099      ColumnInformation columnInfo = getColumnInfo(cc);
1100      _AlterRecord alterRecord = new AlterRecord(columnInfo);
1101      IndexInfo indexInfo = new IndexInfo(IndexInfo.ALTERTABLE, tableName, columnInfo, alterRecord, defaultValue);
1102      createIndexesList.add(indexInfo);
1103   }
1104
1105   public ColumnInformation getColumnInfo(_ColumnCharacteristics cc) throws
1106       DException {
1107      String JavaDoc[] columns = cc.getColumnNames();
1108      Object JavaDoc[][] columnsDetail = new Object JavaDoc[columns.length][4];
1109      for (int i = 0; i < columns.length; i++) {
1110         columnsDetail[i][0] = columns[i];
1111         int index = cc.getColumnIndex(columns[i]);
1112         int type = cc.getColumnType(index);
1113         int size = cc.getSize(index);
1114         columnsDetail[i][1] = new Long JavaDoc(type);
1115         columnsDetail[i][2] = new Integer JavaDoc(size);
1116         columnsDetail[i][3] = new Long JavaDoc(index);
1117      }
1118      ColumnInformation columnInfo = new ColumnInformation();
1119      columnInfo.setObjects(columnsDetail);
1120      return columnInfo;
1121   }
1122
1123   public Object JavaDoc[] createDeepRecordCopy(QualifiedIdentifier tableName,
1124                                        Object JavaDoc[] keys, String JavaDoc[] tableNames) throws
1125       DException {
1126      HierarchyCreator hr = new HierarchyCreator(tableName,
1127                                                 serverSystem.
1128                                                 getDataDictionary(databaseURL),
1129                                                 tableNames, true);
1130      hr.createHierarchy();
1131      TableCopy tableCopy = hr.getRootNode();
1132      CopyHierarchy ch = new CopyHierarchy(this);
1133      Object JavaDoc[] val = ch.copy(keys, tableCopy);
1134      return val;
1135   }
1136
1137   public Object JavaDoc[] createDeepRecordCopy(QualifiedIdentifier tableName,
1138                                        Object JavaDoc[] keys) throws DException {
1139      HierarchyCreator hr = new HierarchyCreator(tableName,
1140                                                 serverSystem.
1141                                                 getDataDictionary(databaseURL), null, false);
1142      hr.createHierarchy();
1143      TableCopy tableCopy = hr.getRootNode();
1144      CopyHierarchy ch = new CopyHierarchy(this);
1145      Object JavaDoc[] val = ch.copy(keys, tableCopy);
1146      return val;
1147   }
1148
1149   public boolean hasRecordInMemory(QualifiedIdentifier tableName) throws
1150       DException {
1151      _Database mergeDatabase = serverSystem.getMergeDatabase(databaseURL);
1152      _Iterator memoryIterator = ( (MergeTable) mergeDatabase.getTable(tableName)).
1153          getMemoryTable().getIterator(0);
1154      return memoryIterator.first();
1155   }
1156
1157   public void startSavePoint() throws DException {
1158      userSession.startSavePoint();
1159   }
1160
1161   public void commitSavePoint() throws DException {
1162      userSession.commitSavePoint(getStatementExecutionContext());
1163   }
1164
1165   public void rollbackSavePoint() throws DException {
1166      userSession.rollbackSavePoint(getStatementExecutionContext());
1167   }
1168
1169   public void releaseSavePoint() throws DException {
1170      userSession.releaseSavePoint(getStatementExecutionContext());
1171   }
1172
1173   public void setTransactionIsolation(int level) throws DException {
1174      if (iteratorsList.size() > 0)
1175         throw new DException("DSE5503", null);
1176      userSession.getSession().setIsolationLevel(level);
1177   }
1178
1179   public _SequenceManager getSequenceManager() throws DException {
1180      return serverSystem.getSequenceManager(databaseURL);
1181   }
1182
1183   public void dropDatabase(String JavaDoc databaseName, String JavaDoc userName,
1184                            String JavaDoc password) throws DException {
1185      serverSystem.dropDatabase(databaseName, userName, password, getDatabase());
1186   }
1187
1188   public boolean isConstraintCheckingDeffered() {
1189      return checkConstraint;
1190   }
1191
1192   public void removeTable(QualifiedIdentifier tableName) throws DException {
1193      serverTableList.remove(tableName.getIdentifier());
1194      materializedViewTableMap.remove(tableName);
1195      viewMap.remove(tableName);
1196      ( (UserSession) userSession).removeTable(tableName);
1197   }
1198
1199   public boolean isDataModified() throws DException {
1200      return userSession.getSession().isDataModified();
1201   }
1202
1203   public void hideSavePoint() throws DException {
1204      userSession.hideSavePoint();
1205   }
1206
1207   public void unhideSavePoint() throws DException {
1208      userSession.unhideSavePoint();
1209   }
1210
1211   public void ignoreParallelSavePoint() throws DException {
1212      userSession.ignoreParallelSavePoint();
1213   }
1214
1215   public void allowParallelSavePoint() throws DException {
1216      userSession.allowParallelSavePoint();
1217   }
1218
1219   public void checkImmediateConstraintsOnCommit() throws DException {
1220      userSession.checkImmediateConstraintsOnCommit();
1221   }
1222
1223   /* CONNECTION */
1224
1225   public void setSavePoint(String JavaDoc savepoint) throws DException {
1226      ArrayList savePointVector = userSession.getSavePointVector();
1227      if (!savePointVector.contains(savepoint)) {
1228         userSession.addSavePoint(savepoint);
1229         userSession.startSavePoint();
1230      } else
1231         throw new DException("DSE889", new Object JavaDoc[] {savepoint});
1232   }
1233
1234   public String JavaDoc setSavePoint() throws DException {
1235      String JavaDoc savepoint = "sp" + userSession.getSavePointVector().size();
1236      setSavePoint(savepoint);
1237      return savepoint;
1238   }
1239
1240   public void releaseSavePoint(String JavaDoc savepoint) throws DException {
1241      ArrayList savePointVector = userSession.getSavePointVector();
1242      int index = savePointVector.indexOf(savepoint);
1243      if (index == -1)
1244         throw new DException("DSE890", null);
1245      userSession = commitUptoLevel(userSession, getStatementExecutionContext(),
1246                                    savePointVector.size() - index);
1247   }
1248
1249   protected _UserSession commitUptoLevel(_UserSession userSession,
1250                                          _StatementExecutionContext sec,
1251                                          int level) throws com.daffodilwoods.
1252
       database.resource.DException {
1253      for (int i = 0; i < level; i++) {
1254         userSession.commitSavePoint(sec);
1255         userSession.releaseLastSavePoint();
1256      }
1257      return userSession;
1258   }
1259
1260   public void rollbackSavePoint(String JavaDoc savepoint) throws DException {
1261      ArrayList userSavepointVector = userSession.getSavePointVector();
1262      _StatementExecutionContext sec = getStatementExecutionContext();
1263      if (savepoint != null) {
1264         int index = userSavepointVector.indexOf(savepoint);
1265         if (index < 0)
1266            throw new DException("DSE877", null);
1267         CommitToParentAndRollback(userSession, sec,
1268                                   userSavepointVector.size() - index);
1269         userSession.rollbackSavePoint(sec);
1270         userSession.releaseLastSavePoint();
1271      } else {
1272         CommitToParentAndRollback(userSession, sec,
1273                                   userSavepointVector.size() + 1);
1274         userSession.rollback(sec);
1275      }
1276   }
1277
1278   protected void CommitToParentAndRollback(_UserSession userSession,
1279                                            _StatementExecutionContext sec,
1280                                            int level) throws com.daffodilwoods.
1281
       database.resource.DException {
1282      for (int i = 0; i < level - 1; i++) {
1283         userSession.commitSavePoint(sec);
1284         userSession.releaseLastSavePoint();
1285      }
1286   }
1287
1288   public void setVerboseForCreatingDatabase() {
1289      verbose = false;
1290   }
1291
1292   public void setVerboseUser(String JavaDoc verboseUser0) {
1293      verboseUser = verboseUser0;
1294   }
1295
1296   public void setRole(String JavaDoc roleName) throws DException {
1297      userSession.setRole(roleName);
1298   }
1299
1300   public boolean isActiveAuthorization(String JavaDoc authorization) throws DException {
1301      return serverSystem.isActiveAuthorization(authorization, databaseURL);
1302   }
1303
1304   public _Iterator getInternalIterator(QualifiedIdentifier tableName, _SingleTableExecuter singleTableExecuter) throws DException {
1305      return userSession.getUserSessionTable(tableName).getInternalIterator(singleTableExecuter, this);
1306   }
1307
1308   public ArrayList getCreateIndexesList() {
1309      return createIndexesList;
1310   }
1311
1312   public _DataTriggerTable getDataTriggerTable(QualifiedIdentifier tableName) throws DException {
1313      if (datatriggerDatabase == null)
1314         datatriggerDatabase = serverSystem.getDataTriggerDatabase(databaseURL);
1315      return datatriggerDatabase.getDataTriggerTable(tableName);
1316   }
1317
1318   public double getDbVersion() throws DException {
1319      return ( (MergeDatabase) serverSystem.getMergeDatabase(databaseURL)).getVersionHandler().getDbVersion();
1320   }
1321
1322   public void refereshTable(QualifiedIdentifier tableName,
1323                             boolean dropTable) throws DException {
1324      serverSystem.refereshTable(databaseURL, tableName, dropTable);
1325   }
1326
1327   public _Triggers[] getAfterInsertTrigger(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1328      return triggerInfoStore.getAfterInsertTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1329   }
1330
1331   public _Triggers[] getBeforeInsertTrigger(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1332      return triggerInfoStore.getBeforeInsertTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1333   }
1334
1335   public _Triggers[] getAfterUpdateTrigger(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext, int[] cols) throws DException {
1336      return triggerInfoStore.getAfterUpdateTrigger(triggerCharacteristics, tableName, statementExecutionContext, cols);
1337   }
1338
1339   public _Triggers[] getBeforeUpdateTrigger(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext, int[] cols) throws DException {
1340      return triggerInfoStore.getBeforeUpdateTrigger(triggerCharacteristics, tableName, statementExecutionContext, cols);
1341   }
1342
1343   public _Triggers[] getAfterDeleteTrigger(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1344      return triggerInfoStore.getAfterDeleteTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1345   }
1346
1347   public _Triggers[] getBeforeDeleteTrigger(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1348      return triggerInfoStore.getBeforeDeleteTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1349   }
1350
1351   public void refreshTriggers(QualifiedIdentifier tableName) throws DException {
1352      serverSystem.refreshTriggers(databaseURL, tableName);
1353
1354   }
1355
1356   public void refreshTriggerInfo(QualifiedIdentifier tableName) throws DException {
1357      triggerInfoStore.removeTriggerInfo(tableName);
1358      statementLevelTriggerInfoStore.removeTriggerInfo(tableName);
1359   }
1360
1361   public SessionVersionHandler getSessionVersionHandler() throws DException {
1362      return ( (MergeDatabase) serverSystem.getMergeDatabase(databaseURL)).getSessionVersionHandler();
1363   }
1364
1365   public _Triggers[] getAfterInsertTriggerOfStatementLevel(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1366      return statementLevelTriggerInfoStore.getAfterInsertTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1367   }
1368
1369   public _Triggers[] getBeforeInsertTriggerOfStatementLevel(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1370      return statementLevelTriggerInfoStore.getBeforeInsertTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1371   }
1372
1373   public _Triggers[] getAfterUpdateTriggerOfStatementLevel(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext, int[] cols) throws DException {
1374      return statementLevelTriggerInfoStore.getAfterUpdateTrigger(triggerCharacteristics, tableName, statementExecutionContext, cols);
1375   }
1376
1377   public _Triggers[] getBeforeUpdateTriggerOfStatementLevel(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext, int[] cols) throws DException {
1378      return statementLevelTriggerInfoStore.getBeforeUpdateTrigger(triggerCharacteristics, tableName, statementExecutionContext, cols);
1379   }
1380
1381   public _Triggers[] getAfterDeleteTriggerOfStatementLevel(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1382      return statementLevelTriggerInfoStore.getAfterDeleteTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1383   }
1384
1385   public _Triggers[] getBeforeDeleteTriggerOfStatementLevel(QualifiedIdentifier tableName, _TriggerCharacteristics triggerCharacteristics, _StatementExecutionContext statementExecutionContext) throws DException {
1386      return statementLevelTriggerInfoStore.getBeforeDeleteTrigger(triggerCharacteristics, tableName, statementExecutionContext);
1387   }
1388
1389   public ArrayList getCreateIndexList() throws DException {
1390      return createIndexesList;
1391   }
1392
1393   public void resetTime() throws DException {
1394      userSession.getSession().resetTime();
1395   }
1396
1397   public void refreshConstraint(QualifiedIdentifier tableName) throws DException {
1398      serverSystem.refreshConstraintTable(databaseURL, tableName);
1399      getDataDictionary().refereshCheckConstraints(tableName);
1400   }
1401
1402   /**
1403    * New Method by harvinder related to bug 12052. */

1404   public int getTypeForPrivilige() throws DException {
1405      return serverSession;
1406   }
1407
1408   public boolean isUserActiveMoreThanOnceOnSameDatabase(String JavaDoc databaseName, String JavaDoc userName) throws DException {
1409      return serverSystem.isUserActiveMoreThanOnceOnSameDatabase(databaseName, userName);
1410   }
1411}
1412
Popular Tags