diff --git a/doc/olap4j_fs.html b/doc/olap4j_fs.html index 6fb20fe..1698fff 100644 --- a/doc/olap4j_fs.html +++ b/doc/olap4j_fs.html @@ -1,11 +1,11 @@ - +
+ - - -The Open Source community has been developing a taste for OLAP. First there was Mondrian, an open-source OLAP server; then there was JPivot, a client which first spoke to Mondrian, then also @@ -252,21 +261,29 @@
At this point, you may be saying: what about XML/A? XML/A was here first, is an open standard, and is supported by a number of servers. Is olap4j an attempt to replace XML/A? Isn't XML/A good enough for everyone?
-olap4j certainly has some similarities with XML/A. Both APIs allow an application to execute OLAP queries, and to browse the metadata of an OLAP schema. But XML/A is a -low-level web-services API which leaves a lot of work to the application writer. -(Witness the fact that the majority of successful XML/A applications run only on -Windows, where the ADOMD.NET is a high-level interface to XML/A servers.) +
olap4j certainly has some similarities with XML/A. Both APIs allow +an application to execute OLAP queries, and to browse the metadata of +an OLAP schema. But XML/A is a +low-level web-services API which leaves a lot of work to the +application writer. +(Witness the fact that the majority of successful XML/A applications +run only on +Windows, where the ADOMD.NET is a high-level interface to XML/A +servers.) The APIs are mostly complementary, because olap4j can be easily -added to an XML/A back-end, and provides features which would be difficult or -impossible to provide via a web-services API. These are functions for parsing MDX, building and transforming MDX query models, and mapping result sets into +added to an XML/A back-end, and provides features which would be +difficult or +impossible to provide via a web-services API. These are functions for +parsing MDX, building and transforming MDX query models, and mapping +result sets into graphical layouts such as pivot tables.
If a web-services based application needs these functions, it can use the @@ -326,20 +343,20 @@
olap4j requires JDK 1.5 or higher, in particular because it uses the generics +
olap4j requires JDK 1.5 or higher, in particular because it uses the generics and enum features introduced in JDK 1.5.0.
JDK 1.4 compability will be available on demand, using the
-Retroweaver utility. This will
-consist of a retrowoven JAR file, olap4j-jdk1.4.jar
and
+Retroweaver utility. This will
+consist of a retrowoven JAR file, olap4j-jdk1.4.jar
and
retroweaver's runtime library retroweaver-rt-1.2.4.jar
. (See
design note.)
jdbc is consistent with JDBC version 3.0 (which was introduced in JDK 1.4 and +
jdbc is consistent with JDBC version 3.0 (which was introduced in JDK 1.4 and is also in JDK 1.5).
-JDBC version 4.0 is expected to be introduced in JDK 1.6.0. We expect JDBC -4.0 will add new methods to existing JDBC classes, and therefore compatibility +
JDBC version 4.0 is expected to be introduced in JDK 1.6.0. We expect JDBC +4.0 will add new methods to existing JDBC classes, and therefore compatibility with JDBC 4.0 will require a new release of olap4j.
We now describe the olap4j API in more detail, by breaking it down into a set of functional areas.
-olap4j shares JDBC's driver management facilities. This allows olap4j clients to leverage the support for JDBC such as @@ -369,7 +387,7 @@
Same functionality as JDBC.
Here is an example of registering an olap4j driver:
Same functionality as JDBC.
Where possible, olap4j uses JDBC's session management facility. olap4j defines extensions to -JDBC interfaces Connection and Statement.
+JDBC interfaces Connection and Statement.For example, the following code registers a driver, connects to Mondrian and executes a statement:
@@ -424,7 +442,7 @@Package name: org.olap4j
-OlapConnection (extends @@ -434,13 +452,14 @@
Look again at the code samples in the previous section. One would expect that it would be safe to downcast the result of a factory +
Look again at the code samples in the previous section. One would
+expect that it would be safe to downcast the result of a factory
method to the desired result. For example, if you invoke an OlapConnection
's
createStatement()
method, the result should be an
OlapStatement
.
But if you you are using a connection-pooling -library (common examples of which include Jakarta Commons DBCP +library (common examples of which include Jakarta Commons DBCP and C3P0), this is not so. Every connection-pooling library tracks connections by wrapping them in another class, @@ -451,7 +470,7 @@
If you are using a connection-pooling library, olap4j provides a helper class to access the object underneath a wrapped connection, statement, prepared statement or result set. For instance,
-The
-Olap4j.convert(Connection) method returns an OlapConnection
. It
-works with common connection pools, and the resulting object is instrumented so
-that any statements or prepared statements created from that connection also
+Olap4j.convert(Connection) method returns an OlapConnection
. It
+works with common connection pools, and the resulting object is instrumented so
+that any statements or prepared statements created from that connection also
work with the connection pool.
The problem does not just affect connections: some connection pools also wrap
Statement
, PreparedStatement
, ResultSet
-and DatabaseMetaData
objects, so there are convert()
+and DatabaseMetaData
objects, so there are convert()
methods for these too.
Hopefully this problem will only be temporary. As olap4j gains popularity, we -expect connection pools to add support for the extended interfaces, and it will +
Hopefully this problem will only be temporary. As olap4j gains popularity, we +expect connection pools to add support for the extended interfaces, and it will be sufficient merely to cast the objects returned from factory methods.
Package name: org.olap4j.mdx
@@ -619,7 +638,8 @@Here are some examples:
Expression | Type | [Store].[USA].Children(2) |
Member<dimension=[Store], hierarchy=[Store], level=[Store].[State]> | +
---|
Since MDX is a late-binding language, some expressions will have unknown @@ -651,7 +672,7 @@
will have type Level<dimension=[Store], level=unknown>
. The
validator knows that the <hierarchy>.Levels(<string expr>)
function
@@ -671,28 +692,31 @@
NumericType
) represents a fixed-point numeric expression. It
is a subclass of NumericType
, and has precision and scale. An
integer expression would have scale 0.
- ASC
+ ASC
keyword in the expression Order(Gender.MEMBERS, Measures.[Unit Sales],
ASC)
is a symbol. Symbol types are rarely used except if you are
manipulating a parse tree.Metadata types:
A metadata type may be constrained to a particular part of the schema. For
example, LevelType(hierarchy=[Time])
indicates that the expression
@@ -841,7 +865,8 @@
XML for Analysis schema rowset | OlapDatabaseMetaData method |
---|
The rows returned in the result set returned from the metadata methods are structured according to the result set column layouts detailed in this @@ -961,8 +986,8 @@
Column heading | +|
---|---|
Column heading | Contents |
[Need to clean up data types in the following tables. Types should all be JDBC types.]
[Need to clean up column names in the following tables. Columns should be @@ -1012,7 +1037,7 @@
The returned result set contains the following columns.
Column name | Type | Description | @@ -1055,7 +1080,7 @@Yes | string |
The name of the provider behind the data source. -Example: Example: |
Yes | @@ -1109,7 +1134,7 @@No | -
---|
The returned result set contains the following columns.
Column name | Type | Description | @@ -1184,7 +1209,7 @@Yes |
---|
[Is VALUE a JDBC reserved word? If so, change it.]
@@ -1195,7 +1220,7 @@The returned result set contains the following columns.
Column name | Type | Description | @@ -1218,7 +1243,7 @@No | @@ -1266,7 +1291,7 @@Yes |
---|
The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -1379,7 +1404,7 @@DBTYPE_WSTR | (Optional) A set of notes, in XML format. |
---|
The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME.
@@ -1391,7 +1416,7 @@The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -1490,8 +1515,10 @@IS_READWRITE | DBTYPE_BOOL | A Boolean that indicates whether the dimension
- is write-enabled. TRUE if the dimension is - write-enabled. |
+ is write-enabled.
+
+
---|---|---|---|---|---|
DIMENSION_UNIQUE_SETTINGS | @@ -1515,7 +1542,7 @@DBTYPE_BOOL | Always TRUE. |
The result set is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_NAME.
@@ -1528,7 +1555,7 @@The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -1570,7 +1597,7 @@DBTYPE_WSTR | The name of the interface for user-defined
functions The group name for Multidimensional - Expressions (MDX) functions. |
+ Expressions (MDX) functions.
---|---|---|---|---|
LIBRARY_NAME | @@ -1583,7 +1610,7 @@DBTYPE_WSTR | (Optional) The name of the assembly that
implements the user-defined function. Returns - VT_NULL for MDX functions. |
+ VT_NULL for MDX functions.
||
HELP_FILE | @@ -1591,7 +1618,7 @@(Optional) The name of the file that contains
the help documentation for the user-defined
function. Returns VT_NULL for MDX - functions. |
+ functions.
|||
HELP_CONTEXT | @@ -1605,16 +1632,16 @@(Optional) The generic name of the object class
to which a property applies. For example, the rowset
corresponding to the <level_name>.Members function
- returns "Level". Returns VT_NULL for + returns "Level". Returns VT_NULL for user-defined functions, or non-property MDX - functions. |
+ functions.
|||
CAPTION | DBTYPE_WSTR | The display caption for the function. |
The rowset is sorted on ORIGIN, INTERFACE_NAME, FUNCTION_NAME.
@@ -1626,7 +1653,7 @@The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -1756,7 +1783,7 @@A Boolean that indicates whether the Write Back
to dimension column is enabled. Returns TRUE if the Write Back to dimension column that - represents this hierarchy is enabled. |
+ represents this hierarchy is enabled.
---|---|---|---|
DIMENSION_UNIQUE_SETTINGS | @@ -1792,7 +1819,7 @@DBTYPE_BOOL | A Boolean that indicates whether the hieararchy
is visible. Returns TRUE if the hierarchy - is visible; otherwise, FALSE. |
+ is visible; otherwise, FALSE.
|
HIERARCHY_ORIGIN | @@ -1810,7 +1837,7 @@|||
HIERARCHY_DISPLAY_FOLDER | @@ -1834,7 +1861,7 @@
The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_UNIQUE_NAME, @@ -1845,7 +1872,7 @@
Specified by the MDSCHEMA_LEVELS
XML for Analysis method.
The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -2006,7 +2033,7 @@A Boolean that indicates whether the level is
visible. Always returns True. If the level is not visible, it will not be included in the schema - rowset. |
+ rowset.
---|---|---|---|
LEVEL_ORDERING_PROPERTY | @@ -2020,7 +2047,7 @@The DBTYPE enumeration of the member key
column that is used for the level attribute. Null if concatenated keys are used as the member key - column. |
+ column.
||
LEVEL_MASTER_UNIQUE_NAME | @@ -2072,7 +2099,7 @@
The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_UNIQUE_NAME, @@ -2083,7 +2110,7 @@
Specified by the MDSCHEMA_MEASURES
XML for Analysis method.
The returned result set contains the following columns.
Column name | Type indicator | Length | @@ -2092,7 +2119,7 @@|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CATALOG_NAME | DBTYPE_WSTR | -+ | The name of the catalog to which this measure belongs. NULL if the provider does not support catalogs. | @@ -2100,7 +2127,7 @@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SCHEMA_NAME | DBTYPE_WSTR | -+ | The name of the schema to which this measure belongs. NULL if the provider does not support schemas. | @@ -2108,20 +2135,20 @@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CUBE_NAME | DBTYPE_WSTR | -+ | The name of the cube to which this measure belongs. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEASURE_NAME | DBTYPE_WSTR | -+ | The name of the measure. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEASURE_UNIQUE_NAME | DBTYPE_WSTR | -+ | The Unique name of the measure. For providers that generate unique names by qualification, each component of this name is delimited. | @@ -2129,7 +2156,7 @@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEASURE_CAPTION | DBTYPE_WSTR | -+ | A label or caption associated with the measure. Used primarily for display purposes. If a caption does not exist, MEASURE_NAME is returned. | @@ -2137,13 +2164,13 @@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEASURE_GUID | DBTYPE_GUID | -+ | Not supported. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEASURE_AGGREGATOR | DBTYPE_I4 | -+ | An enumeration that identifies how a measure was
derived. Can be one of the following values:
2.6.3.9. getMeasuresDATA_TYPE |
DBTYPE_UI2 |
- |
+ |
The data type of the measure. |
NUMERIC_PRECISION |
DBTYPE_UI2 |
- |
+ |
The maximum precision of the property if the
measure object's data type is exact numeric. NULL
for all other property types. |
@@ -2184,7 +2211,7 @@ 2.6.3.9. getMeasuresNUMERIC_SCALE |
DBTYPE_I2 |
- |
+ |
The number of digits to the right of the decimal
point if the measure object's type indicator is
DBTYPE_NUMERIC or DBTYPE_DECIMAL.
@@ -2193,26 +2220,26 @@ | 2.6.3.9. getMeasuresMEASURE_UNITS |
DBTYPE_WSTR |
- |
+ |
Not supported |
DESCRIPTION |
DBTYPE_WSTR |
- |
+ |
A human-readable description of the measure.
NULL if no description exists. |
EXPRESSION |
DBTYPE_WSTR |
- |
+ |
An expression for the member. |
MEASURE_IS_VISIBLE |
DBTYPE_BOOL |
- |
+ |
A Boolean that always returns True. If the
measure is not visible, it will not be included in
the schema rowset. |
@@ -2220,34 +2247,34 @@ 2.6.3.9. getMeasuresLEVELS_LIST |
DBTYPE_WSTR |
- |
+ |
A string that always returns NULL. |
MEASURE_NAME_SQL_COLUMN_NAME |
DBTYPE_WSTR |
- |
+ |
The name of the column in the SQL query that
corresponds to the measure's name. |
MEASURE_UNQUALIFIED_CAPTION |
DBTYPE_WSTR |
- |
+ |
The name of the measure, not qualified with the
measure group name. |
MEASUREGROUP_NAME |
DBTYPE_WSTR |
- |
+ |
The name of the measure group to which the
measure belongs. |
MEASURE_DISPLAY_FOLDER |
DBTYPE_WSTR |
- |
+ |
The path to be used when displaying the measure
in the user interface. Folder names will be
separated by a semicolon. Nested folders are
@@ -2256,10 +2283,10 @@ | 2.6.3.9. getMeasuresDEFAULT_FORMAT_STRING |
DBTYPE_WSTR |
- |
+ |
The default format string for the measure. |
|
The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, MEASURE_NAME.
@@ -2270,7 +2297,7 @@The returned result set contains the following columns.
Column name | Type indicator | Length | @@ -2279,74 +2306,74 @@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CATALOG_NAME | DBTYPE_WSTR | -+ | The name of the database to which this member belongs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SCHEMA_NAME | DBTYPE_WSTR | -+ | The name of the schema to which this member belongs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CUBE_NAME | DBTYPE_WSTR | -+ | The name of the cube to which this member belongs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DIMENSION_UNIQUE_NAME | DBTYPE_WSTR | -+ | The unique name of the dimension to which this member belongs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HIERARCHY_UNIQUE_NAME | DBTYPE_WSTR | -+ | The unique name of the hierarchy to which this member belongs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LEVEL_UNIQUE_NAME | DBTYPE_WSTR | -+ | The unique name of the level to which this member belongs. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LEVEL_NUMBER | DBTYPE_UI4 | -+ | The distance of the member from the root of the hierarchy. The root level is zero (0). | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEMBER_ORDINAL | DBTYPE_UI4 | -+ | (Deprecated) Always returns 0. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEMBER_NAME | DBTYPE_WSTR | -+ | The name of the member. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEMBER_UNIQUE_NAME | DBTYPE_WSTR | -+ | The unique name of the member. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MEMBER_TYPE | DBTYPE_I4 | -+ | The type of the member:
2.6.3.10. getMembersMEMBER_GUID |
DBTYPE_GUID |
- |
+ |
The GUID of the member. NULL if no GUID
exists. |
MEMBER_CAPTION |
DBTYPE_WSTR |
- |
+ |
A label or caption associated with the member.
Used primarily for display purposes. If a caption
does not exist, MEMBER_NAME is returned. |
@@ -2380,7 +2407,7 @@ 2.6.3.10. getMembersCHILDREN_CARDINALITY |
DBTYPE_UI4 |
- |
+ |
The number of children that the member has. This
can be an estimate, so consumers should not rely on
this to be the exact count. Providers should return
@@ -2389,7 +2416,7 @@ | 2.6.3.10. getMembersPARENT_LEVEL |
DBTYPE_UI4 |
- |
+ |
The distance of the member's parent from the
root level of the hierarchy. The root level is zero
(0). |
@@ -2397,69 +2424,73 @@ 2.6.3.10. getMembersPARENT_UNIQUE_NAME |
DBTYPE_WSTR |
- |
+ |
The unique name of the member's parent. NULL
is returned for any members at the root level. |
PARENT_COUNT |
DBTYPE_UI4 |
- |
+ |
The number of parents that this member has. |
DESCRIPTION |
DBTYPE_WSTR |
- |
+ |
Always returns NULL. |
EXPRESSION |
DBTYPE_WSTR |
- |
+ |
The expression for calculations, if the member
is of type MDMEMBER_TYPE_FORMULA. |
MEMBER_KEY |
DBTYPE_WSTR |
- |
+ |
The value of the member's key column. Returns
NULL if the member has a composite key. |
IS_PLACEHOLDERMEMBER |
DBTYPE_BOOL |
- |
+ |
A Boolean that indicates whether a member is a
placeholder member for an empty position in a
dimension hierarchy. |
+
It is valid only if the MDX Compatibility property has been set to 1. - IS_DATAMEMBER |
DBTYPE_BOOL |
- |
+ |
A Boolean that indicates whether the member is a
- data member. |
+ data member.
+
+ Returns True if the member is a data - member. Returns True if the member is a data + member. Zero or more additional columns |
DBTYPE_UI2 |
- |
+ |
No properties are returned if the members could
be returned from multiple levels. For example, if
the Tree operator is PARENT and SELF
for a non-parent child hierarchy, no member
- properties are returned. |
+ requested).
This applies to ragged + properties are returned. + + This applies to ragged hierarchies where tree operators could return members from different levels (for example, if the prior level contains holes and parent on members is - requested). |
The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_UNIQUE_NAME, @@ -2473,7 +2504,7 @@
The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -2576,32 +2607,39 @@CHARACTER_MAXIMUM_LENGTH | DBTYPE_UI4 | The maximum possible length of the property, if
- it is a character, binary, or bit type. Zero - indicates there is no defined maximum length. -Returns NULL for all other data types. |
+ it is a character, binary, or bit type.
+
+
---|---|---|---|---|---|
CHARACTER_OCTET_LENGTH | DBTYPE_UI4 | The maximum possible length (in bytes) of the
- property, if it is a character or binary type. - Zero indicates there is no defined maximum length. -Returns NULL for all other data types. |
+ property, if it is a character or binary type.
+
+ |||
NUMERIC_PRECISION | DBTYPE_UI2 | The maximum precision of the property, if it is
- a numeric data type. Returns NULL for all - other data types. |
+ a numeric data type.
+
+ |||
NUMERIC_SCALE | DBTYPE_I2 | The number of digits to the right of the decimal
point, if it is a DBTYPE_NUMERIC or
- DBTYPE_DECIMAL type. Returns NULL for - all other data types. |
+ DBTYPE_DECIMAL type.
+
+ |||
DESCRIPTION | @@ -2735,10 +2773,12 @@PROPERTY_IS_VISIBLE | DBTYPE_BOOL | A Boolean that indicates whether the property is
- visible. TRUE if the property is visible; - otherwise, FALSE. |
+ visible.
+
+
This schema rowset is not sorted.
@@ -2749,7 +2789,7 @@The returned result set contains the following columns.
Column name | Type indicator | Description | @@ -2815,17 +2855,15 @@
---|
The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME.
--
Method | Description | getMdxKeywords() |
Returns | -
---|
OlapDatabaseMetaData extends
Classes:
@@ -2856,7 +2894,6 @@
Transformations can only modify a query within a cube - it cannot be used to +change the cube that the query is against or to join two cubes. Similarly, the +transform package only supports modifying a MDX query model. For example, a +"drill" transform can not be used to produce a SQL query that returns data +outside of the cube.
+Package name: org.olap4j.transform
-Classes: TBD
+Classes: (incomplete)
+This section should probably be moved into Section 2.4
+ +The MDX query language uses a data model based on cubes, dimensions, tuples +and sets. The transformation package allows direct manipulation of a query +exploring a cube.
+ +A tuple is a multidimensional member. It is a combination of members from one +or more dimensions, with the limitation that only one member can be used from each +dimension. A set is an ordered collection of tuples. An MDX query selects +zero or more axes using a data slicer. (The axes loosely correspond to the "SELECT" +clause in a SQL query, and the slicer to the "WHERE".) + +
The defined set of navigations can be divided into four categories: Slicing, +Restructuring, Drilling, Scoping.
+ +Restructuring navigations change the axes of the returned cube.
+ +Navigations that allow a user to move through the levels in a hierarchy. All +drill navigations operate on a single Axis.
+Navigations that allow a user to expand/collapse sections of a result set. +All scoping navigations operate on single Axis.
+Axis Operations
+Set Operations
+Tuple Operations
+"One thing we found about XMLA was that our users wanted all roles to be -defined, stored, modified, and accessed though the same mechanism. With a large -application with many areas that can be permissioned, it is important that -olap4j let an application builder manage roles externally and apply them as part -of an individual's execution context."
+"One thing we found about XMLA was that our users wanted all roles to be +defined, stored, modified, and accessed though the same mechanism. With a large +application with many areas that can be permissioned, it is important that +olap4j let an application builder manage roles externally and apply them as part +of an individual's execution context."
These issues will be voted upon at the next meeting. If they are accepted, +
These issues will be voted upon at the next meeting. If they are accepted, they will generally be put into the spec.
(No issues are currently open.)
@@ -3006,7 +3166,7 @@JDK. We are targeting JDK 1.5, and running retroweaver for backward compatibility for JDK 1.4. See forum thread: - + olap4j, JDK 1.5 and generics.
1. XMLA: XML for Analysis Specification, version 1.1
-