public class SqlTupleReader extends Object implements TupleReader
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, RolapCube, mondrian.rolap.aggmatcher.AggStar, 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.TupleReader.MemberBuilder
Modifier and Type | Field and Description |
---|---|
protected TupleConstraint |
constraint |
Constructor and Description |
---|
SqlTupleReader(TupleConstraint constraint) |
Modifier and Type | Method and Description |
---|---|
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,
mondrian.rolap.SqlTupleReader.WhichSelect whichSelect,
AggStar aggStar)
Generates the SQL statement to access members of
level . |
protected List<Member> |
bumpNullMember(List<Member> members) |
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.
|
void |
incrementEmptySets()
Indicates that there was an empty argument somewhere in the tuple.
|
boolean |
isAllowHints() |
protected void |
prepareTuples(DataSource dataSource,
TupleList partialResult,
List<List<RolapMember>> newPartialResult,
List<TargetBase> targetGroup) |
TupleList |
readMembers(DataSource dataSource,
TupleList partialResult,
List<List<RolapMember>> newPartialResult)
Performs the read.
|
TupleList |
readTuples(DataSource jdbcConnection,
TupleList partialResult,
List<List<RolapMember>> newPartialResult)
Performs the read.
|
void |
setAllowHints(boolean allowHints) |
protected final TupleConstraint constraint
public SqlTupleReader(TupleConstraint constraint)
public boolean isAllowHints()
public void setAllowHints(boolean allowHints)
public void incrementEmptySets()
TupleReader
incrementEmptySets
in interface TupleReader
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, TupleList partialResult, List<List<RolapMember>> newPartialResult, List<TargetBase> targetGroup)
public TupleList readMembers(DataSource dataSource, TupleList 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 listpublic TupleList readTuples(DataSource jdbcConnection, TupleList partialResult, List<List<RolapMember>> newPartialResult)
TupleReader
readTuples
in interface TupleReader
jdbcConnection
- Data sourcepartialResult
- List of rows from previous passnewPartialResult
- Populated with a new list of rowsprotected void addLevelMemberSql(SqlQuery sqlQuery, RolapLevel level, RolapCube baseCube, mondrian.rolap.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 availableprotected Evaluator getEvaluator(TupleConstraint constraint)
constraint
- ConstraintCopyright © 2019 Hitachi Vantara. All rights reserved.