class SqlMemberSource extends Object implements MemberReader, TupleReader.MemberBuilder
SqlMemberSource reads members from a SQL database.
 It's a good idea to put a CacheMemberReader on top of this.
| Modifier and Type | Class and Description | 
|---|---|
static class  | 
SqlMemberSource.NullValuePoolFactory
Default  
SqlMemberSource.ValuePoolFactory
 implementation, used if
 MondrianProperties.SqlMemberSourceValuePoolFactoryClass
 is not set. | 
static interface  | 
SqlMemberSource.ValuePoolFactory
Interface definition for the pluggable factory used to decide
 which implementation of  
Map to use to pool
 reusable values. | 
static class  | 
SqlMemberSource.ValuePoolFactoryFactory
Creates the ValuePoolFactory which is in turn used
 to create property-value maps for member properties. 
 | 
| Constructor and Description | 
|---|
SqlMemberSource(RolapHierarchy hierarchy)  | 
| Modifier and Type | Method and Description | 
|---|---|
RolapMember | 
allMember()
Returns the 'all' member of the hierarchy. 
 | 
int | 
compare(RolapMember m1,
       RolapMember m2,
       boolean siblingsAreEqual)
Compares two members according to their order in a prefix ordered
 traversal. 
 | 
RolapMember | 
desubstitute(RolapMember member)
Returns the member which was substituted. 
 | 
RolapMember | 
getDefaultMember()  | 
RolapHierarchy | 
getHierarchy()
Returns the hierarchy that this source is reading for. 
 | 
RolapMember | 
getLeadMember(RolapMember member,
             int n)
Returns the member  
n after member in the same
 level (or before, if n is negative). | 
int | 
getLevelMemberCount(RolapLevel level)
Returns the number of members in this level. 
 | 
TupleReader.MemberBuilder | 
getMemberBuilder()  | 
RolapMember | 
getMemberByKey(RolapLevel level,
              List<Comparable> keyValues)
Looks up a member by its key value. 
 | 
MemberCache | 
getMemberCache()
Returns the  
MemberCache to look up members before
 creating them. | 
Object | 
getMemberCacheLock()
Returns the object which acts as the member cache
 synchronization lock. 
 | 
void | 
getMemberChildren(List<RolapMember> parentMembers,
                 List<RolapMember> children)
Returns all members which are a child of one of the members in
  
parentMembers, sorted by ordinal. | 
Map<? extends Member,Access> | 
getMemberChildren(List<RolapMember> parentMembers,
                 List<RolapMember> children,
                 MemberChildrenConstraint mcc)
Populates a list of the children of a given set of Members, optionally
 applying a constraint. 
 | 
void | 
getMemberChildren(RolapMember parentMember,
                 List<RolapMember> children)
Writes all children  
parentMember to children. | 
Map<? extends Member,Access> | 
getMemberChildren(RolapMember parentMember,
                 List<RolapMember> children,
                 MemberChildrenConstraint constraint)
Populates a list of the children of a Member, optionally applying a
 constraint. 
 | 
int | 
getMemberCount()
Returns an estimate of number of members in this hierarchy. 
 | 
RolapMember | 
getMemberParent(RolapMember member)  | 
void | 
getMemberRange(RolapLevel level,
              RolapMember startMember,
              RolapMember endMember,
              List<RolapMember> memberList)
Writes all members between  
startMember and
 endMember into list. | 
List<RolapMember> | 
getMembers()
Returns all members of this hierarchy, sorted by ordinal. 
 | 
List<RolapMember> | 
getMembersInLevel(RolapLevel level)
Returns all of the members in  
level whose ordinal lies
 between startOrdinal and endOrdinal. | 
List<RolapMember> | 
getMembersInLevel(RolapLevel level,
                 TupleConstraint constraint)
Returns the members in the given Level, optionally applying a constraint. 
 | 
List<RolapMember> | 
getRootMembers()
Returns all members of this hierarchy which do not have a parent,
 sorted by ordinal. 
 | 
static 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) 
 | 
static 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 
 | 
RolapMember | 
lookupMember(List<Id.Segment> uniqueNameParts,
            boolean failIfNotFound)
Finds a member based upon its unique name. 
 | 
(package private) Pair<String,List<SqlStatement.Type>> | 
makeChildMemberSql(RolapMember member,
                  DataSource dataSource,
                  MemberChildrenConstraint constraint)
Generates the SQL statement to access the children of
  
member. | 
RolapMember | 
makeMember(RolapMember parentMember,
          RolapLevel childLevel,
          Object value,
          Object captionValue,
          boolean parentChild,
          SqlStatement stmt,
          Object key,
          int columnOffset)
Creates a new member (together with its properties). 
 | 
boolean | 
setCache(MemberCache cache)
Sets the cache which this  
MemberSource will write to. | 
RolapMember | 
substitute(RolapMember member)
Substitutes a given member. 
 | 
SqlMemberSource(RolapHierarchy hierarchy)
public RolapHierarchy getHierarchy()
MemberSourcegetHierarchy in interface MemberSourcepublic boolean setCache(MemberCache cache)
MemberSourceMemberSource will write to.
 Cache-writeback is optional (for example, SqlMemberSource
 supports it, and ArrayMemberSource does not), and the return
 value from this method indicates whether this object supports it.
 
If this method returns true, the MemberSource.getMembers(),
 MemberSource.getRootMembers() and MemberSource.getMemberChildren(mondrian.rolap.RolapMember, java.util.List<mondrian.rolap.RolapMember>) methods must
 write to the cache, in addition to returning members as a return value.
setCache in interface MemberSourcecache - The MemberCache which the caller would like
   this MemberSource to write to.MemberSource supports cache-writeback.public int getMemberCount()
MemberSourcegetMemberCount in interface MemberSourcepublic RolapMember substitute(RolapMember member)
MemberReaderThis method is called whenever a member is returned from the wrapped member reader and is to be returned to the caller. You could say that it translates 'to caller space'.
substitute in interface MemberReadermember - Memberpublic RolapMember desubstitute(RolapMember member)
MemberReaderThis method is called whenever the caller passes a member into a method and needs to be passed to a method on the wrapped member reader. You could say that it translates 'from caller space'.
desubstitute in interface MemberReadermember - Memberpublic RolapMember getMemberByKey(RolapLevel level, List<Comparable> keyValues)
MemberReadergetMemberByKey in interface MemberReaderlevel - LevelkeyValues - Key valuespublic RolapMember lookupMember(List<Id.Segment> uniqueNameParts, boolean failIfNotFound)
MemberSourcelookupMember in interface MemberSourcepublic int getLevelMemberCount(RolapLevel level)
MemberReadergetLevelMemberCount in interface MemberReaderlevel - Levelpublic List<RolapMember> getMembers()
MemberSourceIf this object supports cache-writeaback, also
 writes these members to the cache.
getMembers in interface MemberSourcepublic List<RolapMember> getMembersInLevel(RolapLevel level)
MemberReaderlevel whose ordinal lies
 between startOrdinal and endOrdinal.
 If this object
 supports cache-writeback, also
 writes these members to the cache.
getMembersInLevel in interface MemberReaderList of RolapMemberpublic List<RolapMember> getMembersInLevel(RolapLevel level, TupleConstraint constraint)
MemberReadergetMembersInLevel in interface MemberReaderlevel - Levelconstraint - Constraintpublic MemberCache getMemberCache()
TupleReader.MemberBuilderMemberCache to look up members before
 creating them.getMemberCache in interface TupleReader.MemberBuilderpublic Object getMemberCacheLock()
TupleReader.MemberBuildergetMemberCacheLock in interface TupleReader.MemberBuilderpublic List<RolapMember> getRootMembers()
MemberSourceIf this object supports cache-writeback, also
 writes these members to the cache.
getRootMembers in interface MemberSourceList of RolapMembersPair<String,List<SqlStatement.Type>> makeChildMemberSql(RolapMember member, DataSource dataSource, MemberChildrenConstraint constraint)
member. For example, retrieves the children of the memberSELECT "city" FROM "customer" WHERE "country" = 'USA' AND "state_province" = 'BC' GROUP BY "city"
[Canada].[BC].
 Note that this method is never called in the context of virtual cubes, it is only called on regular cubes.
See also SqlTupleReader.makeLevelMembersSql(javax.sql.DataSource).
public static boolean levelContainsMultipleColumns(RolapLevel level)
level - the level to checkpublic static boolean isLevelCollapsed(AggStar aggStar, RolapCubeLevel level)
aggStar - aggregate star if existslevel - levelpublic void getMemberChildren(List<RolapMember> parentMembers, List<RolapMember> children)
MemberSourceparentMembers, sorted by ordinal.
 If this object supports cache-writeaback, also
 writes these members to the cache.
getMemberChildren in interface MemberSourcepublic Map<? extends Member,Access> getMemberChildren(List<RolapMember> parentMembers, List<RolapMember> children, MemberChildrenConstraint mcc)
MemberReadergetMemberChildren in interface MemberReaderparentMembers - List of members whose children to findchildren - List to populate with membersmcc - Constraintnull values.public void getMemberChildren(RolapMember parentMember, List<RolapMember> children)
MemberSourceparentMember to children.
 If this object supports cache-writeback, also
 writes these members to the cache.
getMemberChildren in interface MemberSourcepublic Map<? extends Member,Access> getMemberChildren(RolapMember parentMember, List<RolapMember> children, MemberChildrenConstraint constraint)
MemberReadergetMemberChildren in interface MemberReaderparentMember - Members whose children to findchildren - List to populate with membersconstraint - Constraintnull values.public RolapMember makeMember(RolapMember parentMember, RolapLevel childLevel, Object value, Object captionValue, boolean parentChild, SqlStatement stmt, Object key, int columnOffset) throws SQLException
TupleReader.MemberBuildermakeMember in interface TupleReader.MemberBuilderparentMember - Parent memberchildLevel - Child levelvalue - Member valuecaptionValue - CaptionparentChild - Whether a parent-child hierarchystmt - SQL statementkey - Member keycolumnOffset - Column ordinal (0-based)SQLException - on errorpublic RolapMember allMember()
TupleReader.MemberBuilderallMember in interface TupleReader.MemberBuilderpublic RolapMember getLeadMember(RolapMember member, int n)
MemberReadern after member in the same
 level (or before, if n is negative).
 Returns Hierarchy.getNullMember() if we run off the beginning or
 end of the level.getLeadMember in interface MemberReaderpublic void getMemberRange(RolapLevel level, RolapMember startMember, RolapMember endMember, List<RolapMember> memberList)
MemberReaderstartMember and
 endMember into list.getMemberRange in interface MemberReaderpublic int compare(RolapMember m1, RolapMember m2, boolean siblingsAreEqual)
MemberReadersiblingsAreEqual, then two members with the
 same parent will compare equal.compare in interface MemberReadersiblingsAreEqual and
         m1 and m2 have the same parentpublic TupleReader.MemberBuilder getMemberBuilder()
getMemberBuilder in interface MemberReaderpublic RolapMember getDefaultMember()
getDefaultMember in interface MemberReaderpublic RolapMember getMemberParent(RolapMember member)
getMemberParent in interface MemberReader