KickJava   Java API By Example, From Geeks To Geeks.

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


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.database.resource.DException;
7 import com.daffodilwoods.daffodildb.server.serversystem._ServerSession;
8 import com.daffodilwoods.daffodildb.server.sessionsystem.sessioncondition._SessionCondition;
9 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._IndexTable;
10 import com.daffodilwoods.database.general.QualifiedIdentifier;
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 Uncommitted 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 UncommittedDataRetriever extends DataRetrieverWithoutCondition implements _DataRetriever{
23   Session session;
24
25   public UncommittedDataRetriever(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   public _Iterator getConditionalIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
36     _SessionCondition sessionCondition = ((Session)session).getRecordValidityCondition();
37     SessionIndex sessionIndex = new SessionIndex((_IndexTable)mergeTable, serverSession);
38     _Iterator iterator = singleTableExecuter.execute( sessionIndex );
39     return new RowIdSessionIterator( new NonIndexedSessionFilterIterator(iterator , sessionCondition), sessionCondition );
40   }
41
42   public _Iterator getFCIterator(_Table mergeTable,
43                                              QualifiedIdentifier tableName,
44                                              _SingleTableExecuter
45                                              conditionExecuter,
46                                              _IndexTable foreignConstraintTable) throws
47       DException {
48           _SessionCondition sessionCondition = ((Session)session).getRecordValidityCondition();
49           _ServerSession serverSession = ((_SessionGetter)foreignConstraintTable).getServerSession();
50           SessionIndex sessionIndex = new SessionIndex((_IndexTable)mergeTable, serverSession);
51           _Iterator iterator = conditionExecuter.execute( sessionIndex );
52           _Iterator baseIterator = new NonIndexedSessionFilterIterator(iterator , sessionCondition);
53           _Iterator fcIterator = ((ForeignConstraintTable)foreignConstraintTable).getIterator(baseIterator);
54           return new RowIdSessionIterator( fcIterator, sessionCondition );
55  }
56
57 }
58
Popular Tags