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