Package mondrian.olap

Class Query


public class Query extends QueryPart
Query is an MDX query.

It is created by calling Connection.parseQuery(java.lang.String), and executed by calling Connection.execute(mondrian.olap.Query), to return a Result.

Query control

Most queries are model citizens, executing quickly (often using cached results from previous queries), but som queries take more time, or more database resources, or more results, than is reasonable. Mondrian offers three ways to control rogue queries:

Author:
jhyde, 20 January, 1999
  • Field Details

    • axes

      public QueryAxis[] axes
      public-private: This must be public because it is still accessed in rolap.RolapConnection
    • axisCalcs

      public Calc[] axisCalcs
    • slicerCalc

      public Calc slicerCalc
  • Constructor Details

  • Method Details

    • setQueryTimeoutMillis

      public void setQueryTimeoutMillis(long queryTimeoutMillis)
      Deprecated.
      This method will be removed in mondrian-4.0
      Sets the timeout in milliseconds of this Query.

      Zero means no timeout.

      Parameters:
      queryTimeoutMillis - Timeout in milliseconds
    • hasCellProperty

      public boolean hasCellProperty(String propertyName)
      Checks whether the property name is present in the query.
    • isCellPropertyEmpty

      public boolean isCellPropertyEmpty()
      Checks whether any cell property present in the query
    • addFormula

      public void addFormula(Id id, Exp exp)
      Adds a new formula specifying a set to an existing query.
    • addFormula

      public void addFormula(Id id, Exp exp, MemberProperty[] memberProperties)
      Adds a new formula specifying a member to an existing query.
      Parameters:
      id - Name of member
      exp - Expression for member
      memberProperties - Properties of member
    • addFormula

      public void addFormula(Formula formula)
      Adds a new formula specifying a member or a set to an existing query; resolve is called after the formula has been added.
      Parameters:
      formula - Formula to add to query
    • addFormulas

      public void addFormulas(Formula... additions)
      Adds some number of new formulas specifying members or sets to an existing query; resolve is only called once, after all the new members have been added to the query.
      Parameters:
      additions - Formulas to add to query
    • createValidator

      public Validator createValidator()
      Creates a validator for this query.
      Returns:
      Validator
    • createValidator

      public Validator createValidator(Map<QueryPart,QueryPart> resolvedIdentifiers)
    • createValidator

      public Validator createValidator(FunTable functionTable, boolean alwaysResolveFunDef)
      Creates a validator for this query that uses a given function table and function validation policy.
      Parameters:
      functionTable - Function table
      alwaysResolveFunDef - Whether to always resolve function definitions (see Validator.alwaysResolveFunDef())
      Returns:
      Validator
    • createValidator

      public Validator createValidator(FunTable functionTable, boolean alwaysResolveFunDef, Map<QueryPart,QueryPart> resolvedIdentifiers)
    • safeClone

      public Query safeClone()
      Deprecated.
      Please use clone(); this method will be removed in mondrian-4.0
    • clone

      public Query clone()
      Overrides:
      clone in class Object
    • getConnection

      public Connection getConnection()
    • cancel

      public void cancel()
      Deprecated.
      This method is deprecated and will be removed in mondrian-4.0
      Issues a cancel request on this Query object. Once the thread running the query detects the cancel request, the query execution will throw an exception. See BasicQueryTest.testCancel for an example of usage of this method.
    • checkCancelOrTimeout

      public void checkCancelOrTimeout()
      Deprecated.
      This method will be removed in mondrian-4.0
      Checks if either a cancel request has been issued on the query or the execution time has exceeded the timeout value (if one has been set). Exceptions are raised if either of these two conditions are met. This method should be called periodically during query execution to ensure timely detection of these events, particularly before/after any potentially long running operations.
    • getQueryStartTime

      public long getQueryStartTime()
      Deprecated.
      Use Execution.getStartTime(). This method is deprecated and will be removed in mondrian-4.0
      Gets the query start time
      Returns:
      start time
    • shouldAlertForNonNative

      public boolean shouldAlertForNonNative(FunDef funDef)
      Determines whether an alert for non-native evaluation needs to be posted.
      Parameters:
      funDef - function type to alert for
      Returns:
      true if alert should be raised
    • resolve

      public void resolve()
      Performs type-checking and validates internal consistency of a query, using the default resolver.

      This method is called automatically when a query is created; you need to call this method manually if you have modified the query's expression tree in any way.

    • ignoreInvalidMembers

      public boolean ignoreInvalidMembers()
      Returns:
      true if the relevant property for ignoring invalid members is set to true for this query's environment (a different property is checked depending on whether environment is schema load vs query validation)
    • setResultStyle

      public void setResultStyle(ResultStyle resultStyle)
      A Query's ResultStyle can only be one of the following: ResultStyle.ITERABLE ResultStyle.LIST ResultStyle.MUTABLE_LIST
    • getResultStyle

      public ResultStyle getResultStyle()
    • resolve

      public void resolve(Validator validator)
      Performs type-checking and validates internal consistency of a query.
      Parameters:
      validator - Validator
    • explain

      public void explain(PrintWriter pw)
      Description copied from class: QueryPart
      Returns the plan that Mondrian intends to use to execute this query.
      Overrides:
      explain in class QueryPart
      Parameters:
      pw - Print writer
    • unparse

      public void unparse(PrintWriter pw)
      Description copied from class: QueryPart
      Writes a string representation of this parse tree node to the given writer.
      Overrides:
      unparse in class QueryPart
      Parameters:
      pw - writer
    • toString

      public String toString()
      Returns the MDX query string.
      Overrides:
      toString in class Object
    • getChildren

      public Object[] getChildren()
      Overrides:
      getChildren in class QueryPart
    • getSlicerAxis

      public QueryAxis getSlicerAxis()
    • setSlicerAxis

      public void setSlicerAxis(QueryAxis axis)
    • addLevelToAxis

      public void addLevelToAxis(AxisOrdinal axis, Level level)
      Adds a level to an axis expression.
    • setParameter

      public void setParameter(String parameterName, Object value)
      Assigns a value to the parameter with a given name.
      Throws:
      RuntimeException - if there is not parameter with the given name
    • swapAxes

      public void swapAxes()
      Swaps the x- and y- axes. Does nothing if the number of axes != 2.
    • getParameters

      public Parameter[] getParameters()
      Returns the parameters defined in this query.
    • getCube

      public Cube getCube()
    • getSchemaReader

      public SchemaReader getSchemaReader(boolean accessControlled)
      Returns a schema reader.
      Parameters:
      accessControlled - If true, schema reader returns only elements which are accessible to the statement's current role
      Returns:
      schema reader
    • lookupMemberFromCache

      public Member lookupMemberFromCache(String memberUniqueName)
      Looks up a member whose unique name is memberUniqueName from cache. If the member is not in cache, returns null.
    • createScopedNamedSet

      public Query.ScopedNamedSet createScopedNamedSet(String name, QueryPart scope, Exp expr)
      Creates a named set defined by an alias.
    • getFormulas

      public Formula[] getFormulas()
      Returns an array of the formulas used in this query.
    • getAxes

      public QueryAxis[] getAxes()
      Returns an array of this query's axes.
    • removeFormula

      public void removeFormula(String uniqueName, boolean failIfUsedInQuery)
      Remove a formula from the query. If failIfUsedInQuery is true, checks and throws an error if formula is used somewhere in the query.
    • canRemoveFormula

      public boolean canRemoveFormula(String uniqueName)
      Returns whether a formula can safely be removed from the query. It can be removed if the member or set it defines it not used anywhere else in the query, including in another formula.
      Parameters:
      uniqueName - Unique name of the member or set defined by the formula
      Returns:
      whether the formula can safely be removed
    • findFormula

      public Formula findFormula(String uniqueName)
      Looks up a calculated member or set defined in this Query.
      Parameters:
      uniqueName - Unique name of calculated member or set
      Returns:
      formula defining calculated member, or null if not found
    • renameFormula

      public void renameFormula(String uniqueName, String newName)
      Finds formula by name and renames it to new name.
    • setAxisShowEmptyCells

      public void setAxisShowEmptyCells(int axis, boolean showEmpty)
      Finds axis by index and sets flag to show empty cells on that axis.
    • getMdxHierarchiesOnAxis

      public Hierarchy[] getMdxHierarchiesOnAxis(AxisOrdinal axis)
      Returns Hierarchy[] used on axis. It calls collectHierarchies(mondrian.olap.Exp).
    • compileExpression

      public Calc compileExpression(Exp exp, boolean scalar, ResultStyle resultStyle)
      Compiles an expression, using a cached compiled expression if available.
      Parameters:
      exp - Expression
      scalar - Whether expression is scalar
      resultStyle - Preferred result style; if null, use query's default result style; ignored if expression is scalar
      Returns:
      compiled expression
    • createCompiler

      public ExpCompiler createCompiler()
    • addMeasuresMembers

      public void addMeasuresMembers(OlapElement olapElement)
      Keeps track of references to members of the measures dimension
      Parameters:
      olapElement - potential measure member
    • getMeasuresMembers

      public Set<Member> getMeasuresMembers()
      Returns:
      set of members from the measures dimension referenced within this query
    • setVirtualCubeNonNativeCrossJoin

      public void setVirtualCubeNonNativeCrossJoin()
      Indicates that the query cannot use native cross joins to process this virtual cube
    • nativeCrossJoinVirtualCube

      public boolean nativeCrossJoinVirtualCube()
      Returns:
      true if the query can use native cross joins on a virtual cube
    • setBaseCubes

      public void setBaseCubes(List<RolapCube> baseCubes)
      Saves away the base cubes related to the virtual cube referenced in this query
      Parameters:
      baseCubes - set of base cubes
    • getBaseCubes

      public List<RolapCube> getBaseCubes()
      return the set of base cubes associated with the virtual cube referenced in this query
      Returns:
      set of base cubes
    • accept

      public Object accept(MdxVisitor visitor)
    • putEvalCache

      public void putEvalCache(String key, Object value)
      Put an Object value into the evaluation cache with given key. This is used by Calc's to store information between iterations (rather than re-generate each time).
      Parameters:
      key - the cache key
      value - the cache value
    • getEvalCache

      public Object getEvalCache(String key)
      Gets the Object associated with the value.
      Parameters:
      key - the cache key
      Returns:
      the cached value or null.
    • clearEvalCache

      public void clearEvalCache()
      Remove all entries in the evaluation cache
    • close

      public void close()
      Deprecated.
      This method will be removed in mondrian-4.0.
      Closes this query.

      Releases any resources held. Writes statistics to log if profiling is enabled.

      This method is idempotent.

    • getStatement

      public Statement getStatement()
    • setOwnStatement

      public void setOwnStatement(boolean ownStatement)
      Sets that the query owns its statement; therefore it will need to close it when the query is closed.
      Parameters:
      ownStatement - Whether the statement belongs to the query