KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > sessionsystem > CommittedDataRetriever


1 package com.daffodilwoods.daffodildb.server.sessionsystem;
2
3 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._Table;
4 import com.daffodilwoods.daffodildb.server.sql99.dql.iterator._Iterator;
5 import com.daffodilwoods.database.resource.DException;
6 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
7 import com.daffodilwoods.daffodildb.server.sql99.utils._Reference;
8 import com.daffodilwoods.daffodildb.server.sessionsystem.sessioncondition._SessionCondition;
9 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._IndexTable;
10 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._MergeTable;
11 import com.daffodilwoods.database.general.QualifiedIdentifier;
12 import java.lang.ref.WeakReference JavaDoc;
13 import com.daffodilwoods.daffodildb.server.datasystem.mergesystem.MergeTable;
14 import com.daffodilwoods.daffodildb.server.sql99.expression.booleanvalueexpression.*;
15
16 /**
17  * Provides the iterator to fetch the reocrds which satisfies the requirements of
18  * Read Committed Isolation level
19  * @param singleTableExecuter constains condition and order
20  * @param serverSession used by singleTableExecuter to solve the inner query
21  * @return _IndexIterator
22  * @throws DException
23  */

24
25 public class CommittedDataRetriever extends DataRetrieverWithoutCondition implements _DataRetriever{
26
27   Session session;
28   public CommittedDataRetriever(Session session) {
29     this.session = session;
30   }
31
32   public _Iterator getIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
33     if(( singleTableExecuter.isParameterisedQuery() || ((MergeTable)mergeTable).hasRecordsInMemory()) && ! singleTableExecuter.isContainsPresent() ){
34       return getConditionalIterator(mergeTable, singleTableExecuter,
35                                     serverSession, tableName,
36                                     forUpdateTableHandler,false);
37     }
38     return super.getIterator(session, mergeTable, singleTableExecuter, serverSession, tableName, forUpdateTableHandler);
39   }
40
41  private _Iterator getConditionalIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler,boolean isCheckingForLocking) throws DException{
42
43    _Reference[] references = singleTableExecuter.getReferences();
44      boolean questionMarkNotFound = references == null ;
45      _SessionCondition readCommittedLock = ((Session)session).getReadCommittedForLockModified();
46      SessionIndex sessionIndex = new SessionIndex(((_MergeTable)mergeTable).getMemoryTable(), serverSession);
47      _Iterator baseIteratorForLock = singleTableExecuter.executeForDirtyLock( sessionIndex );
48      _Iterator iterator = new NonIndexedSessionFilterIterator(baseIteratorForLock , readCommittedLock);
49
50      _SessionCondition readCommitted = ((Session)session).getReadCommitted();
51      SessionIndex sessionIndexForFile = new SessionIndex(((_IndexTable)mergeTable), serverSession);
52      _Iterator baseIteratorForFile = singleTableExecuter.execute( sessionIndexForFile);
53      _Iterator fileIterator = new NonIndexedSessionFilterIterator(baseIteratorForFile, readCommitted);
54
55      if(singleTableExecuter.hasForUpdate()) {
56        Object JavaDoc sessionId = ((Session)session).getSuperMostSessionId();
57        if(questionMarkNotFound){
58          forUpdateTableHandler.addForUpdateVariableValues(sessionId,new ConditionReferenceValues(singleTableExecuter.getCondition(), null, null),new WeakReference JavaDoc(serverSession));
59        }
60        ForUpdateIterator fui = new ForUpdateIterator(iterator, fileIterator, (SessionDatabase)session.getSessionDatabase(),questionMarkNotFound, singleTableExecuter.getCondition() , forUpdateTableHandler , sessionId, references ,new WeakReference JavaDoc(serverSession),serverSession,tableName);
61        return new RowIdSessionIterator( fui, readCommitted);
62      }
63      CommitedSessionIterator iter = new CommitedSessionIterator(iterator, fileIterator, (SessionDatabase)session.getSessionDatabase(), questionMarkNotFound,serverSession,tableName,isCheckingForLocking);
64      iter.setTableName(tableName);
65      return new RowIdSessionIterator( iter, readCommitted);
66
67  }
68
69
70   public _Iterator getConditionalIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
71     return getConditionalIterator(mergeTable, singleTableExecuter,
72                                   serverSession, tableName,
73                                   forUpdateTableHandler,true);
74
75 /* _Reference[] references = singleTableExecuter.getReferences();
76       boolean questionMarkNotFound = references == null ;
77       _SessionCondition readCommittedLock = ((Session)session).getReadCommittedForLockModified();
78       SessionIndex sessionIndex = new SessionIndex(((_MergeTable)mergeTable).getMemoryTable(), serverSession);
79       _Iterator baseIteratorForLock = singleTableExecuter.executeForDirtyLock( sessionIndex );
80       _Iterator iterator = new NonIndexedSessionFilterIterator(baseIteratorForLock , readCommittedLock);
81
82       _SessionCondition readCommitted = ((Session)session).getReadCommitted();
83       SessionIndex sessionIndexForFile = new SessionIndex(((_IndexTable)mergeTable), serverSession);
84       _Iterator baseIteratorForFile = singleTableExecuter.execute( sessionIndexForFile);
85       _Iterator fileIterator = new NonIndexedSessionFilterIterator(baseIteratorForFile, readCommitted);
86
87       if(singleTableExecuter.hasForUpdate()) {
88         Object sessionId = ((Session)session).getSuperMostSessionId();
89         if(questionMarkNotFound){
90           forUpdateTableHandler.addForUpdateVariableValues(sessionId,new ConditionReferenceValues(singleTableExecuter.getCondition(), null, null),new WeakReference(serverSession));
91         }
92         ForUpdateIterator fui = new ForUpdateIterator(iterator, fileIterator, (SessionDatabase)session.getSessionDatabase(),questionMarkNotFound, singleTableExecuter.getCondition() , forUpdateTableHandler , sessionId, references ,new WeakReference(serverSession),serverSession,tableName);
93         return new RowIdSessionIterator( fui, readCommitted);
94       }
95       CommitedSessionIterator iter = new CommitedSessionIterator(iterator, fileIterator, (SessionDatabase)session.getSessionDatabase(), questionMarkNotFound,serverSession,tableName);
96       iter.setTableName(tableName);
97       return new RowIdSessionIterator( iter, readCommitted);*/

98   }
99
100   public _Iterator getFCIterator(_Table mergeTable,
101                                            QualifiedIdentifier tableName,
102                                            _SingleTableExecuter
103                                           conditionExecuter,
104                                           _IndexTable foreignConstraintTable) throws
105       DException {
106        boolean questionMarkNotFound = conditionExecuter.getReferences() == null ? true : false;
107        _SessionCondition readCommittedLock = ((Session)session).getReadCommittedForLock();
108        _ServerSession serverSession = ((ForeignConstraintTable)foreignConstraintTable).getServerSession();
109        SessionIndex sessionIndex = new SessionIndex(((_MergeTable)mergeTable).getMemoryTable(), serverSession);
110        _Iterator baseIteratorForLock = conditionExecuter.execute( sessionIndex );
111        _Iterator iterator = new NonIndexedSessionFilterIterator(baseIteratorForLock , readCommittedLock);
112
113        _SessionCondition readCommitted = ((Session)session).getReadCommitted();
114        SessionIndex sessionIndexForFile = new SessionIndex(((_MergeTable)mergeTable).getFileTable(), serverSession);
115        CommittedTable committedTable = new CommittedTable(sessionIndexForFile);
116        _Iterator baseIteratorForFile = conditionExecuter.execute( committedTable);
117        _Iterator fileIterator = new NonIndexedSessionFilterIterator(baseIteratorForFile, readCommitted);
118
119
120        _Iterator baseIteratorForMemory = conditionExecuter.execute( sessionIndex);
121        _Iterator memoryIterator = new NonIndexedSessionFilterIterator(baseIteratorForMemory, readCommitted);
122
123        _Iterator baseIteratorForSeek = conditionExecuter.execute( sessionIndex);
124        _Iterator memoryIteratorForSeek = new NonIndexedSessionFilterIterator(baseIteratorForSeek, readCommitted);
125        _Iterator mIterator = new CommittedIterator( new _Iterator[]{ memoryIterator, fileIterator},committedTable.getComparator(), ((Session)session).getRecursiveSessionIds(),memoryIteratorForSeek);
126        _Iterator committedSessionIterator = new CommitedSessionIterator(iterator, mIterator, (SessionDatabase)session.getSessionDatabase(), questionMarkNotFound,serverSession,tableName,true);
127        _Iterator fcIterator = ((ForeignConstraintTable)foreignConstraintTable).getIterator(committedSessionIterator);
128        return new RowIdSessionIterator( fcIterator, readCommitted);
129    }
130
131 }
132
Popular Tags