From 4166c090088e7ad836e0ea867bfcdb2092312014 Mon Sep 17 00:00:00 2001
From: Ajit Joglekar
MondrianProperties
contains the properties which determine the
* behavior of a mondrian instance.
- *
+ *
* There is a method for property valid in a
* mondrian.properties
file. Although it is possible to retrieve
* properties using the inherited {@link Properties#getProperty(String)}
* method, we recommend that you use methods in this class.
- *
mondrian.properties
file checked into
* source control, with a description of the property and its default
* value.Similarly if you update or delete a property. * * @author jhyde @@ -100,7 +100,7 @@ public boolean triggersAreEnabled() { public interface PropertySource { /** * Opens an input stream from the source. - *
+ * *Also checks the 'last modified' time, which will determine whether * {@link #isStale()} returns true. * @@ -303,7 +303,7 @@ private void load(final PropertySource source) { /** * Returns a list of every {@link org.eigenbase.util.property.Property}. - *
+ * *todo: Move to base class, {@link TriggerableProperties}, and rename
* base method {@link TriggerableProperties#getProperties()}}.
*
@@ -331,7 +331,7 @@ public List todo: Move to base class, {@link TriggerableProperties}.
*
* @param path Name of the property
@@ -350,7 +350,7 @@ public Property getPropertyDefinition(String path) {
/**
* Maximum number of simultaneous queries the system will allow.
- * Oracle fails if you try to run more than the 'processes' parameter in
* init.ora, typically 150. The throughput of Oracle and other databases
* will probably reduce long before you get to their limit. If trace level is above 0, SQL tracing will be enabled and logged as
* per the Example:
* {@link #DebugOutFile mondrian.debug.out.file}
* property below. This is separate from Log4j logging.
@@ -435,10 +435,9 @@ public Property getPropertyDefinition(String path) {
* This is the name of the class which either implements
* junit.framework.Test
or has a method
* public [static] junit.framework.Test suite()
.
- *
- * mondrian.test.Class=mondrian.test.FoodMartTestCase
When storing collections of cell values, Mondrian has to choose
* between a sparse and a dense representation, based upon the
* possible
and actual
number of values.
* The density
is actual / possible
.
- *
We use a sparse representation if
* (possible -
* {@link #SparseSegmentCountThreshold countThreshold}) *
* {@link #SparseSegmentDensityThreshold densityThreshold} >
* actual
- *
For example, at the default values
* ({@link #SparseSegmentCountThreshold countThreshold} = 1000,
* {@link #SparseSegmentDensityThreshold} = 0.5),
@@ -539,10 +538,10 @@ public Property getPropertyDefinition(String path) {
* a pattern for which test XML files to run. Pattern has to
* match a file name of the form:
* querywhatever.xml
in the directory.
- *
Example: *
mondrian.test.QueryFilePattern=queryTest_fec[A-Za-z0-9_]*.xml
- *
+ *
*/
public transient final StringProperty QueryFilePattern =
new StringProperty(
@@ -626,11 +625,11 @@ public Property getPropertyDefinition(String path) {
/**
* Boolean property that controls whether Mondrian uses aggregate tables.
- *
+ *
* If true, then Mondrian uses aggregate tables. This property is * queried prior to each aggregate query so that changing the value of this * property dynamically (not just at startup) is meaningful. - *
+ * *Aggregates can be read from the database using the * {@link #ReadAggregates} property but will not be used unless this * property is set to true. @@ -642,7 +641,7 @@ public Property getPropertyDefinition(String path) { /** * Boolean property which determines whether Mondrian should read aggregate * tables. - *
+ * *If set to true, then Mondrian scans the database for aggregate tables. * Unless mondrian.rolap.aggregates.Use is set to true, the aggregates * found will not be used. @@ -655,7 +654,7 @@ public Property getPropertyDefinition(String path) { /** * Boolean property that controls whether aggregate tables * are ordered by their volume or row count. - *
+ * *If true, Mondrian uses the aggregate table with the smallest volume * (number of rows multiplied by number of columns); if false, Mondrian * uses the aggregate table with the fewest rows. @@ -668,10 +667,10 @@ public Property getPropertyDefinition(String path) { * String property containing the name of the file which defines the rules * for recognizing an aggregate table. Can be either a resource in the * Mondrian jar or a URL. - *
+ * *The default value is "/DefaultRules.xml", which is in the * mondrian.rolap.aggmatcher package in Mondrian.jar. - *
+ * *Normally, this property is not set by a user. */ public transient final StringProperty AggregateRules = @@ -680,7 +679,7 @@ public Property getPropertyDefinition(String path) { /** * String property which is the AggRule element's tag value. - *
+ * *Normally, this property is not set by a user. */ public transient final StringProperty AggregateRuleTag = @@ -690,7 +689,7 @@ public Property getPropertyDefinition(String path) { /** * Boolean property which controls whether to print the SQL code * generated for aggregate tables. - *
+ * *If set, then as each aggregate request is processed, both the lost * and collapsed dimension create and insert sql code is printed. * This is for use in the CmdRunner allowing one to create aggregate table @@ -716,7 +715,7 @@ public Property getPropertyDefinition(String path) { /** * Boolean property that controls whether to notify the Mondrian system * when a {@link MondrianProperties property value} changes. - *
+ * *This allows objects dependent on Mondrian properties to react (that
* is, reload), when a given property changes via, say,
* MondrianProperties.instance().populate(null)
or
@@ -774,12 +773,12 @@ public Property getPropertyDefinition(String path) {
/**
* Integer property which controls whether to test operators' dependencies,
* and how much time to spend doing it.
- *
If this property is positive, Mondrian's test framework allocates an * expression evaluator which evaluates each expression several times, and * makes sure that the results of the expression are independent of * dimensions which the expression claims to be independent of. - *
+ * *The default is 0. */ public transient final IntegerProperty TestExpDependencies = @@ -788,16 +787,16 @@ public Property getPropertyDefinition(String path) { /** * Seed for random number generator used by some of the tests. - *
- * + * + * * Any value besides 0 or -1 gives deterministic behavior. * The default value is 1234: most users should use this. * Setting the seed to a different value can increase coverage, and * therefore may uncover new bugs. - * + * *If you set the value to 0, the system will generate its own * pseudo-random seed. - *
+ * *If you set the value to -1, Mondrian uses the next seed from an * internal random-number generator. This is a little more deterministic * than setting the value to 0. @@ -808,11 +807,11 @@ public Property getPropertyDefinition(String path) { /** * Name of locale property file. - *
+ * *Used for the {@link mondrian.i18n.LocalizingDynamicSchemaProcessor}; * see Internationalization * for more details. - *
+ * *Default value is null. */ public transient final StringProperty LocalePropFile = @@ -853,21 +852,21 @@ public Property getPropertyDefinition(String path) { * enabled but not supported for that function's usage in a particular * query. (No alert is ever raised in cases where native evaluation would * definitely have been wasted effort.) - *
- * - * + * + * + * * Recognized actions: - * + * *OFF
: do nothing (default action, also used if
* unrecognized action is specified)
- *
+ *
* WARN
: log a warning to RolapUtil logger
- *
+ *
* ERROR
: throw an instance of
* {@link NativeEvaluationUnsupportedException}
- *
+ *
* This value may be variant among database prodcuts and their runtime * settings. Oracle, for example, gives the error "ORA-01795: maximum * number of expressions in a list is 1000". - *
+ * *Recommended values:
If evaluation exceeds this depth (for example, while evaluating a * very complex calculated member), Mondrian will throw an error. */ @@ -1000,7 +999,7 @@ public Property getPropertyDefinition(String path) { /** * Property which defines * the name of the class used as a memory monitor. - *
+ * *If the value is
* non-null, it is used by the MemoryMonitorFactory
* to create the implementation.
@@ -1012,7 +1011,7 @@ public Property getPropertyDefinition(String path) {
/**
* Property which defines
* the name of the class used to compile scalar expressions.
- *
If the value is
* non-null, it is used by the ExpCompiler.Factory
* to create the implementation.
@@ -1023,7 +1022,7 @@ public Property getPropertyDefinition(String path) {
/**
* Property which defines
* when to apply the crossjoin optimization algorithm.
- *
If a crossjoin input list's size is larger than this property's * value and the axis has the "NON EMPTY" qualifier, then * the crossjoin non-empty optimizer is applied. @@ -1040,7 +1039,7 @@ public Property getPropertyDefinition(String path) { /** * Property which defines * the behavior of division if the denominator evaluates to zero. - *
+ * *If a division has a non-null numerator and a null denominator,
* it evaluates to "Infinity", which conforms to MSAS behavior. However,
* the old semantics of evaluating this to NULL (non MSAS-conforming), is
@@ -1055,7 +1054,7 @@ public Property getPropertyDefinition(String path) {
* Property which defines
* whether to generate SQL queries using the GROUPING SETS
* construct for rollup. By default it is not enabled.
- *
Ignored on databases which do not support the
* GROUPING SETS
construct (see
* {@link mondrian.rolap.sql.SqlQuery.Dialect#supportsGroupingSets}).