public class SegmentLoader extends Object
The SegmentLoader
queries database and loads the data into
the given set of segments.
It reads a segment of measure
, where columns
are constrained to values
. Each entry in values
can be null, meaning don't constrain, or can have several values. For
example, getSegment({Unit_sales}, {Region, State, Year}, {"West"},
{"CA", "OR", "WA"}, null})
returns sales in states CA, OR and WA
in the Western region, for all years.
It will also look at the MondrianProperties.SegmentCache
property
and make usage of the SegmentCache provided as an SPI.
Modifier and Type | Class and Description |
---|---|
protected static class |
SegmentLoader.RowList
Collection of rows, each with a set of columns of type Object, double, or
int.
|
(package private) class |
SegmentLoader.SegmentRollupWrapper
This is a private abstraction wrapper to perform
rollups.
|
Constructor and Description |
---|
SegmentLoader(SegmentCacheManager cacheMgr)
Creates a SegmentLoader.
|
Modifier and Type | Method and Description |
---|---|
(package private) SqlStatement |
createExecuteSql(int cellRequestCount,
GroupingSetsList groupingSetsList,
List<StarPredicate> compoundPredicateList)
Creates and executes a SQL statement to retrieve the set of cells
specified by a GroupingSetsList.
|
(package private) SortedSet<Comparable>[] |
getDistinctValueWorkspace(int arity) |
(package private) BitKey |
getRollupBitKey(int arity,
ResultSet rowList,
int k)
Generates bit key representing roll up columns
|
void |
load(int cellRequestCount,
List<GroupingSet> groupingSets,
List<StarPredicate> compoundPredicateList,
List<Future<Map<Segment,SegmentWithData>>> segmentFutures)
Loads data for all the segments of the GroupingSets.
|
(package private) ResultSet |
loadData(SqlStatement stmt,
GroupingSetsList groupingSetsList) |
(package private) SegmentLoader.RowList |
processData(SqlStatement stmt,
boolean[] axisContainsNull,
SortedSet<Comparable>[] axisValueSets,
GroupingSetsList groupingSetsList) |
(package private) boolean |
useSparse(boolean sparse,
int n,
SegmentLoader.RowList rows) |
(package private) static boolean |
useSparse(double possibleCount,
double actualCount)
Decides whether to use a sparse representation for this segment, using
the formula described
here . |
public SegmentLoader(SegmentCacheManager cacheMgr)
cacheMgr
- Cache managerpublic void load(int cellRequestCount, List<GroupingSet> groupingSets, List<StarPredicate> compoundPredicateList, List<Future<Map<Segment,SegmentWithData>>> segmentFutures)
Dialect.supportsGroupingSets()
then
grouping sets list should always have only one element in it.
For example, if list has 2 grouping sets with columns A, B, C and B, C respectively, then the SQL will be "GROUP BY GROUPING SETS ((A, B, C), (B, C))".
Else if the list has only one grouping set then sql would be without grouping sets.
The groupingSets
list should be topological order, with
more detailed higher-level grouping sets occurring first. In other words,
the first element of the list should always be the detailed grouping
set (default grouping set), followed by grouping sets which can be
rolled-up on this detailed grouping set.
In the example (A, B, C) is the detailed grouping set and (B, C) is
rolled-up using the detailed.
Grouping sets are removed from the groupingSets
list as they
are loaded.
cellRequestCount
- Number of missed cells that led to this requestgroupingSets
- List of grouping sets whose segments are loadedcompoundPredicateList
- Compound predicatessegmentFutures
- List of futures wherein each statement will place
a list of the segments it has loaded, when it
completesboolean useSparse(boolean sparse, int n, SegmentLoader.RowList rows)
SqlStatement createExecuteSql(int cellRequestCount, GroupingSetsList groupingSetsList, List<StarPredicate> compoundPredicateList)
This method may be overridden in tests.
cellRequestCount
- Number of missed cells that led to this requestgroupingSetsList
- GroupingcompoundPredicateList
- Compound predicate listSegmentLoader.RowList processData(SqlStatement stmt, boolean[] axisContainsNull, SortedSet<Comparable>[] axisValueSets, GroupingSetsList groupingSetsList) throws SQLException
SQLException
BitKey getRollupBitKey(int arity, ResultSet rowList, int k) throws SQLException
SQLException
ResultSet loadData(SqlStatement stmt, GroupingSetsList groupingSetsList) throws SQLException
SQLException
SortedSet<Comparable>[] getDistinctValueWorkspace(int arity)
static boolean useSparse(double possibleCount, double actualCount)
here
.possibleCount
- Number of values in the space.actualCount
- Actual number of values.