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 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 |