|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectmondrian.rolap.SqlTupleReader
public class SqlTupleReader
Reads the members of a single level (level.members) or of multiple levels (crossjoin).
Allows the result to be restricted by a TupleConstraint
. So
the SqlTupleReader can also read Member.Descendants (which is level.members
restricted to a common parent) and member.children (which is a special case
of member.descendants). Other constraints, especially for the current slicer
or evaluation context, are possible.
When a SqlTupleReader reads level.members, it groups the result into parent/children pairs and puts them into the cache. In order that these can be found later when the children of a parent are requested, a matching constraint must be provided for every parent.
TupleConstraint.addLevelConstraint(mondrian.rolap.sql.SqlQuery, mondrian.rolap.RolapCube, mondrian.rolap.aggmatcher.AggStar, mondrian.rolap.RolapLevel)
although it may do so to restrict
the result. Also it is permitted to cache the parent/children from all
members in MemberCache, so
TupleConstraint.getMemberChildrenConstraint(RolapMember)
should not return null.TupleConstraint.getMemberChildrenConstraint(RolapMember)
must return null. Also
TupleConstraint.addConstraint(mondrian.rolap.sql.SqlQuery, mondrian.rolap.RolapCube, mondrian.rolap.aggmatcher.AggStar)
is required to join the fact table for the levels table.
Nested Class Summary | |
---|---|
(package private) static class |
SqlTupleReader.WhichSelect
Description of the position of a SELECT statement in a UNION. |
Nested classes/interfaces inherited from interface mondrian.rolap.TupleReader |
---|
TupleReader.MemberBuilder |
Field Summary | |
---|---|
protected TupleConstraint |
constraint
|
(package private) int |
maxRows
|
(package private) List<TargetBase> |
targets
|
Constructor Summary | |
---|---|
SqlTupleReader(TupleConstraint constraint)
|
Method Summary | |
---|---|
void |
addLevelMembers(RolapLevel level,
TupleReader.MemberBuilder memberBuilder,
List<RolapMember> srcMembers)
Adds a hierarchy to retrieve members from. |
protected void |
addLevelMemberSql(SqlQuery sqlQuery,
RolapLevel level,
RolapCube baseCube,
SqlTupleReader.WhichSelect whichSelect,
AggStar aggStar)
Generates the SQL statement to access members of level . |
(package private) AggStar |
chooseAggStar(Evaluator evaluator)
Obtains the AggStar instance which corresponds to an aggregate table which can be used to support the member constraint. |
(package private) String |
generateSelectForLevels(DataSource dataSource,
RolapCube baseCube,
SqlTupleReader.WhichSelect whichSelect)
Generates the SQL string corresponding to the levels referenced. |
(package private) Collection<RolapCube> |
getBaseCubeCollection(Query query)
|
Object |
getCacheKey()
Returns an object that uniquely identifies the Result that this TupleReader would return. |
int |
getEnumTargetCount()
|
protected Evaluator |
getEvaluator(TupleConstraint constraint)
Obtains the evaluator used to find an aggregate table to support the Tuple constraint. |
(package private) int |
getMaxRows()
|
protected boolean |
isLevelCollapsed(AggStar aggStar,
RolapCubeLevel level)
Determine if the given aggregate table has the dimension level specified within in (AggStar.FactTable) it, aka collapsed, or associated with foreign keys (AggStar.DimTable) |
protected boolean |
levelContainsMultipleColumns(RolapLevel level)
Determine if a level contains more than a single column for its data, such as an ordinal column or property column |
(package private) String |
makeLevelMembersSql(DataSource dataSource)
|
protected void |
prepareTuples(DataSource dataSource,
List<List<RolapMember>> partialResult,
List<List<RolapMember>> newPartialResult)
|
List<RolapMember> |
readMembers(DataSource dataSource,
List<List<RolapMember>> partialResult,
List<List<RolapMember>> newPartialResult)
Performs the read. |
List<RolapMember[]> |
readTuples(DataSource jdbcConnection,
List<List<RolapMember>> partialResult,
List<List<RolapMember>> newPartialResult)
Performs the read. |
(package private) void |
setMaxRows(int maxRows)
|
(package private) String |
sqlForEmptyTuple(DataSource dataSource,
Collection<RolapCube> baseCubes)
|
(package private) boolean |
targetIsOnBaseCube(TargetBase target,
RolapCube baseCube)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final TupleConstraint constraint
List<TargetBase> targets
int maxRows
Constructor Detail |
---|
public SqlTupleReader(TupleConstraint constraint)
Method Detail |
---|
public void addLevelMembers(RolapLevel level, TupleReader.MemberBuilder memberBuilder, List<RolapMember> srcMembers)
TupleReader
addLevelMembers
in interface TupleReader
level
- level that the members correspond tomemberBuilder
- used to build new members for this levelsrcMembers
- if set, array of enumerated members that make up
this levelpublic Object getCacheKey()
TupleReader
TupleReader
would return. Clients may use this as a key for
caching the result.
getCacheKey
in interface TupleReader
public int getEnumTargetCount()
protected void prepareTuples(DataSource dataSource, List<List<RolapMember>> partialResult, List<List<RolapMember>> newPartialResult)
public List<RolapMember> readMembers(DataSource dataSource, List<List<RolapMember>> partialResult, List<List<RolapMember>> newPartialResult)
TupleReader
readMembers
in interface TupleReader
dataSource
- source for reading tuplespartialResult
- partially cached result that should be used
instead of executing sql querynewPartialResult
- if non-null, return the result of the read;
note that this is a subset of the full return list
public List<RolapMember[]> readTuples(DataSource jdbcConnection, List<List<RolapMember>> partialResult, List<List<RolapMember>> newPartialResult)
TupleReader
readTuples
in interface TupleReader
String makeLevelMembersSql(DataSource dataSource)
Collection<RolapCube> getBaseCubeCollection(Query query)
String sqlForEmptyTuple(DataSource dataSource, Collection<RolapCube> baseCubes)
String generateSelectForLevels(DataSource dataSource, RolapCube baseCube, SqlTupleReader.WhichSelect whichSelect)
dataSource
- jdbc connection that they query will execute againstbaseCube
- this is the cube object for regular cubes, and the
underlying base cube for virtual cubeswhichSelect
- Position of this select statement in a union
boolean targetIsOnBaseCube(TargetBase target, RolapCube baseCube)
protected void addLevelMemberSql(SqlQuery sqlQuery, RolapLevel level, RolapCube baseCube, SqlTupleReader.WhichSelect whichSelect, AggStar aggStar)
level
. For
example, accesses the "City" level of the "Customers" hierarchy. Note that:SELECT "country", "state_province", "city" FROM "customer" GROUP BY "country", "state_province", "city", "init", "bar" ORDER BY "country", "state_province", "city"
"country", "state_province"
are the parent keys;"city"
is the level key;"init", "bar"
are member properties.
sqlQuery
- the query object being constructedlevel
- level to be added to the sql querybaseCube
- this is the cube object for regular cubes, and the
underlying base cube for virtual cubeswhichSelect
- describes whether this select belongs to a largeraggStar
- aggregate star if available
select containing unions or this is a non-union selectprotected Evaluator getEvaluator(TupleConstraint constraint)
constraint
-
protected boolean levelContainsMultipleColumns(RolapLevel level)
level
- the level to check
protected boolean isLevelCollapsed(AggStar aggStar, RolapCubeLevel level)
aggStar
- aggregate star if existslevel
- level
AggStar chooseAggStar(Evaluator evaluator)
evaluator
- the current evaluator to obtain the cube and members to
be queried
int getMaxRows()
void setMaxRows(int maxRows)
|
|
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |