Class RolapStar

java.lang.Object
mondrian.rolap.RolapStar

public class RolapStar extends Object
A RolapStar is a star schema. It is the means to read cell values.

todo: Move this class into a package that specializes in relational aggregation, doesn't know anything about hierarchies etc.

Since:
12 August, 2001
Author:
jhyde
  • Method Details

    • getCellFromCache

      public Object getCellFromCache(CellRequest request, RolapAggregationManager.PinSet pinSet)
      Retrieves the value of the cell identified by a cell request, if it can be found in the local cache of the current statement (thread).

      If it is not in the local cache, returns null. The client's next step will presumably be to request a segment that contains the cell from the global cache, external cache, or by issuing a SQL statement.

      Returns Util.nullValue if a segment contains the cell and the cell's value is null.

      If pinSet is not null, pins the segment that holds it into the local cache. pinSet ensures that a segment is only pinned once.

      Parameters:
      request - Cell request
      pinSet - Set into which to pin the segment; or null
      Returns:
      Cell value, or Util.nullValue if the cell value is null, or null if the cell is not in any segment in the local cache.
    • getCellFromAllCaches

      public Object getCellFromAllCaches(CellRequest request)
    • register

      public void register(SegmentWithData segment)
    • getStatisticsCache

      public RolapStatisticsCache getStatisticsCache()
    • cloneRelation

      protected MondrianDef.RelationOrJoin cloneRelation(MondrianDef.Relation rel, String possibleName)
    • getUniqueRelation

      public MondrianDef.RelationOrJoin getUniqueRelation(MondrianDef.RelationOrJoin rel, String factForeignKey, String primaryKey, String primaryKeyTable)
      Generates a unique relational join to the fact table via re-aliasing MondrianDef.Relations currently called in the RolapCubeHierarchy constructor. This should eventually be phased out and replaced with RolapStar.Table and RolapStar.Column references
      Parameters:
      rel - the relation needing uniqueness
      factForeignKey - the foreign key of the fact table
      primaryKey - the join key of the relation
      primaryKeyTable - the join table of the relation
      Returns:
      if necessary a new relation that has been re-aliased
    • getColumnCount

      public int getColumnCount()
      Returns this RolapStar's column count. After a star has been created with all of its columns, this is the number of columns in the star.
    • prepareToLoadAggregates

      public void prepareToLoadAggregates()
      Place holder in case in the future we wish to be able to reload aggregates. In that case, if aggregates had already been loaded, i.e., this star has some aggstars, then those aggstars are cleared.
    • addAggStar

      public void addAggStar(AggStar aggStar)
      Adds an AggStar to this star.

      Internally the AggStars are added in sort order, smallest row count to biggest, so that the most efficient AggStar is encountered first; ties do not matter.

    • reOrderAggStarList

      public void reOrderAggStarList()
      Reorder the list of aggregate stars. This should be called if the algorithm used to order the AggStars has been changed.
    • getAggStars

      public List<AggStar> getAggStars()
      Returns this RolapStar's aggregate table AggStars, ordered in ascending order of size.
    • getFactTable

      public RolapStar.Table getFactTable()
      Returns the fact table at the center of this RolapStar.
      Returns:
      fact table
    • getSqlQuery

      public SqlQuery getSqlQuery()
      Clones an existing SqlQuery to create a new one (this cloning creates one with an empty sql query).
    • getSqlQueryDialect

      public Dialect getSqlQueryDialect()
      Returns this RolapStar's SQL dialect.
    • lookupOrCreateAggregation

      public Aggregation lookupOrCreateAggregation(AggregationKey aggregationKey)
      Looks up an aggregation or creates one if it does not exist in an atomic (synchronized) operation.

      When a new aggregation is created, it is marked as thread local.

      Parameters:
      aggregationKey - this is the constrained column bitkey
    • lookupSegment

      public Aggregation lookupSegment(AggregationKey aggregationKey)
      Looks for an existing aggregation over a given set of columns, in the local segment cache, returning null if there is none.

      Must be called from synchronized context.

      See Also:
    • setDataSource

      public void setDataSource(DataSource dataSource)
      For testing purposes only.
    • getDataSource

      public DataSource getDataSource()
      Returns the DataSource used to connect to the underlying DBMS.
      Returns:
      DataSource
    • getStarMeasure

      public static RolapStar.Measure getStarMeasure(Member member)
      Retrieves the RolapStar.Measure in which a measure is stored.
    • lookupColumns

      public RolapStar.Column[] lookupColumns(String tableAlias, String columnName)
      Retrieves a named column, returns null if not found.
    • lookupColumn

      public RolapStar.Column lookupColumn(String tableAlias, String columnName)
      This is used by TestAggregationManager only.
    • getBitKey

      public BitKey getBitKey(String[] tableAlias, String[] columnName)
    • getAliasList

      public List<String> getAliasList()
      Returns a list of all aliases used in this star.
    • collectColumns

      public static void collectColumns(Collection<RolapStar.Column> columnList, RolapStar.Table table, MondrianDef.Column joinColumn)
      Collects all columns in this table and its children. If joinColumn is specified, only considers child tables joined by the given column.
    • getColumn

      public RolapStar.Column getColumn(int bitPos)
      Look up the column at the given bit position.
      Parameters:
      bitPos - bit position to look up
      Returns:
      column at the given position
    • getSchema

      public RolapSchema getSchema()
    • generateSql

      public String generateSql(List<RolapStar.Column> columnList, List<String> columnNameList)
      Generates a SQL statement to read all instances of the given attributes.

      The SQL statement is of the form SELECT ... FROM ... JOIN ... GROUP BY .... It is useful for populating an aggregate table.

      Parameters:
      columnList - List of columns (attributes and measures)
      columnNameList - List of column names (must have same cardinality as columnList)
      Returns:
      SQL SELECT statement
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • print

      public void print(PrintWriter pw, String prefix, boolean structure)
      Prints the state of this RolapStar
      Parameters:
      pw - Writer
      prefix - Prefix to print at the start of each line
      structure - Whether to print the structure of the star
    • getChangeListener

      public DataSourceChangeListener getChangeListener()
      Returns the listener for changes to this star's underlying database.
      Returns:
      Returns the Data source change listener.
    • setChangeListener

      public void setChangeListener(DataSourceChangeListener changeListener)
      Sets the listener for changes to this star's underlying database.
      Parameters:
      changeListener - The Data source change listener to set