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()
TupleReaderincrementEmptySets in interface TupleReaderpublic void addLevelMembers(RolapLevel level, TupleReader.MemberBuilder memberBuilder, List<RolapMember> srcMembers)
TupleReaderaddLevelMembers in interface TupleReaderlevel - 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()
TupleReaderTupleReader would return. Clients may use this as a key for
 caching the result.getCacheKey in interface TupleReaderpublic 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)
TupleReaderreadMembers in interface TupleReaderdataSource - 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)
TupleReaderreadTuples in interface TupleReaderjdbcConnection - 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 © 2017 Hitachi Vantara. All rights reserved.