KickJava   Java API By Example, From Geeks To Geeks.

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


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

21
22 public class UnLockedCommittedDataRetriever extends DataRetrieverWithoutCondition implements _DataRetriever{
23
24   Session session;
25   public UnLockedCommittedDataRetriever(Session session) {
26     this.session = session;
27   }
28
29   public _Iterator getIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
30     if( (singleTableExecuter.isParameterisedQuery() || ((MergeTable)mergeTable).hasRecordsInMemory()) && ! singleTableExecuter.isContainsPresent() )
31       return getConditionalIterator(mergeTable,singleTableExecuter,serverSession,tableName,forUpdateTableHandler);
32     return super.getIterator(session, mergeTable, singleTableExecuter, serverSession, tableName, forUpdateTableHandler);
33   }
34
35
36   public _Iterator getConditionalIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
37     SessionIndex sessionIndex = new SessionIndex((_IndexTable)mergeTable, serverSession);
38     _SessionCondition sessionCondition = ((Session)session).getUnlockedCommitted();
39     _Iterator iterator = singleTableExecuter.execute(sessionIndex );
40     return new RowIdSessionIterator( new NonIndexedSessionFilterIterator(iterator,sessionCondition), sessionCondition );
41   }
42
43   public _Iterator getFCIterator(_Table mergeTable,
44                                              QualifiedIdentifier tableName,_SingleTableExecuter conditionExecuter,_IndexTable foreignConstrainTable)throws DException{
45        _ServerSession serverSession = ((_SessionGetter)foreignConstrainTable).getServerSession();
46        SessionIndex sessionIndex = new SessionIndex((_IndexTable)mergeTable, serverSession);
47        _SessionCondition sessionCondition = ((Session)session).getUnlockedCommitted();
48        _Iterator iterator = conditionExecuter.execute(sessionIndex );
49        _Iterator baseIterator = new NonIndexedSessionFilterIterator(iterator,sessionCondition);
50        _Iterator fcIterator = ((ForeignConstraintTable)foreignConstrainTable).getIterator(baseIterator);
51        return new RowIdSessionIterator( fcIterator, sessionCondition );
52
53    }
54
55 }
56
Popular Tags