KickJava   Java API By Example, From Geeks To Geeks.

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


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

26
27 public class RepeatableDataRetriever extends DataRetrieverWithoutCondition implements _DataRetriever{
28
29   Session session;
30   public RepeatableDataRetriever(Session session) {
31     this.session = session;
32   }
33
34   public _Iterator getIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
35     if( (singleTableExecuter.isParameterisedQuery() || ((MergeTable)mergeTable).hasRecordsInMemory() ) && ! singleTableExecuter.isContainsPresent())
36       return getConditionalIterator(mergeTable,singleTableExecuter,serverSession,tableName,forUpdateTableHandler);
37     return super.getIterator(session, mergeTable, singleTableExecuter, serverSession, tableName, forUpdateTableHandler);
38   }
39
40   public _Iterator getConditionalIterator(_Table mergeTable, _SingleTableExecuter singleTableExecuter, _ServerSession serverSession, QualifiedIdentifier tableName, ForUpdateTableHandler forUpdateTableHandler) throws DException{
41
42     _SessionCondition repeatableCondition = ((Session)session).getReadRepeatable();
43     _SessionCondition sessionConditionForTransaction = ((Session)session).getTransactionSessionCondition();
44
45
46     booleanvalueexpression repeatableFilterCondition =SystemFieldsCharacteristics.getRepeatableFilterCondition();
47
48     TableDetails td = new TableDetails();
49     td.setTableName(new String JavaDoc[]{tableName.catalog,tableName.schema,tableName.name});
50     ConditionSingleTableExecuter ste = new ConditionSingleTableExecuter(null,td,serverSession,repeatableFilterCondition,null);
51
52     SessionIndex sessionIndex = new SessionIndex((_IndexTable)mergeTable, serverSession);
53
54     _Iterator repetableFilterIterator =
55             repetableFilterIterator =
56             ste.execute(sessionIndex);
57
58     RepetableTable rt =
59             new RepetableTable(sessionIndex , repetableFilterIterator,GeneralPurposeStaticClass.changeReferences( repeatableFilterCondition.getParameters(null) ), session.getTransactionIdAtStart() , serverSession);
60     _Iterator iterator = singleTableExecuter.execute(rt );
61
62     _Iterator iteratorRepetable =(_Iterator) new NonIndexedSessionFilterIterator(iterator, repeatableCondition);
63
64     _Iterator baseIteratorForSeriablizable = singleTableExecuter.execute(sessionIndex );
65     _Iterator iteratorSerialized = (_Iterator) new NonIndexedSessionFilterIterator(baseIteratorForSeriablizable, sessionConditionForTransaction);
66
67
68     _SessionCondition repeatableAndSerializableCondition = new MergedSessionCondition(new _SessionCondition[]{repeatableCondition,sessionConditionForTransaction });
69
70
71     return new RowIdSessionIterator( new RepetableIterator(new _Iterator[]{iteratorRepetable,iteratorSerialized},rt.getComparator())
72             , repeatableAndSerializableCondition);
73
74   }
75
76   public _Iterator getFCIterator(_Table mergeTable,
77                                            QualifiedIdentifier tableName,
78                                            _SingleTableExecuter
79                                            conditionExeceuter,
80                                            _IndexTable foreignConstraintTable) throws
81       DException {
82       _SessionCondition repeatableCondition = ((Session)session).getReadRepeatable();
83       _SessionCondition sessionConditionForTransaction = ((Session)session).getTransactionSessionCondition();
84
85
86       booleanvalueexpression repeatableFilterCondition =
87               SystemFieldsCharacteristics.getRepeatableFilterCondition();
88       _ServerSession serverSession = ((_SessionGetter)foreignConstraintTable).getServerSession();
89       SessionIndex sessionIndex = new SessionIndex((_IndexTable)mergeTable, serverSession);
90
91       TableDetails tableD = new TableDetails();
92       tableD.setTableName(new String JavaDoc[]{tableName.catalog,tableName.schema,tableName.name});
93       _SingleTableExecuter filterConditionExecuter = new ConditionSingleTableExecuter(null, tableD,serverSession,repeatableFilterCondition , null);
94
95       _Iterator repetableFilterIterator = filterConditionExecuter.execute((_IndexTable)mergeTable);
96
97       RepetableTable rt =
98           new RepetableTable(sessionIndex , repetableFilterIterator,GeneralPurposeStaticClass.changeReferences( repeatableFilterCondition.getParameters(null) ), session.getTransactionIdAtStart() , serverSession);
99       _Iterator iterator = conditionExeceuter.execute(rt );
100
101       _Iterator iteratorRepetable =(_Iterator) new NonIndexedSessionFilterIterator(iterator, repeatableCondition);
102
103       _Iterator baseIteratorForSeriablizable = conditionExeceuter.execute(sessionIndex );
104       _Iterator iteratorSerialized = (_Iterator) new NonIndexedSessionFilterIterator(baseIteratorForSeriablizable, sessionConditionForTransaction);
105       _SessionCondition repeatableAndSerializableCondition = new MergedSessionCondition(new _SessionCondition[]{repeatableCondition,sessionConditionForTransaction });
106       _Iterator baseIterator = new RepetableIterator(new _Iterator[]{iteratorRepetable,iteratorSerialized},rt.getComparator());
107       _Iterator fcIterator = ((ForeignConstraintTable)foreignConstraintTable).getIterator(baseIterator);
108       return new RowIdSessionIterator( fcIterator , repeatableAndSerializableCondition);
109   }
110
111 }
112
Popular Tags