From d65a89ed9e3ec3dfe265e068a14dd00aacdf0353 Mon Sep 17 00:00:00 2001 From: Julian Hyde Date: Sun, 18 Nov 2007 01:13:26 +0000 Subject: [PATCH] Specify thread-safety, timeout, statement cancel; Specify compliance levels; Specify access control; Specify internationalization; add OlapConnection.get/setLocale. Add diagram of object model to spec; Ensure that every public class and method has a full javadoc description. Implement timeout and cancel in mondrian driver; and test. Implement drill-through in mondrian driver; and test. Make CellSetAxis implement Iterable. Remove some unneeded methods from org.olap4j.type package. Rename SLICER to FILTER. git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@40 c6a108a4-781c-0410-a6c6-c2d559e19af0 --- doc/olap4j-arch.vsd | Bin 118784 -> 131072 bytes doc/olap4j-metadata.png | Bin 0 -> 18730 bytes doc/olap4j_fs.html | 354 ++++++++++------ doc/tasks.txt | 7 - src/mondrian/olap4j/Factory.java | 3 +- src/mondrian/olap4j/FactoryJdbc3Impl.java | 11 +- src/mondrian/olap4j/FactoryJdbc4Impl.java | 9 +- src/mondrian/olap4j/MondrianOlap4jCell.java | 29 +- .../olap4j/MondrianOlap4jCellSet.java | 118 +++++- .../olap4j/MondrianOlap4jCellSetAxis.java | 42 +- .../MondrianOlap4jCellSetAxisMetaData.java | 101 +++++ .../olap4j/MondrianOlap4jCellSetMetaData.java | 96 ++--- .../olap4j/MondrianOlap4jConnection.java | 24 +- .../olap4j/MondrianOlap4jStatement.java | 53 ++- src/org/olap4j/Axis.java | 16 +- src/org/olap4j/Cell.java | 4 +- src/org/olap4j/CellSet.java | 28 ++ src/org/olap4j/CellSetAxis.java | 38 +- src/org/olap4j/CellSetAxisMetaData.java | 13 +- src/org/olap4j/CellSetMetaData.java | 10 +- src/org/olap4j/OlapConnection.java | 24 +- src/org/olap4j/Position.java | 2 + .../olap4j/driver/xmla/XmlaOlap4jCellSet.java | 10 +- .../xmla/XmlaOlap4jCellSetMetaData.java | 6 +- .../driver/xmla/XmlaOlap4jConnection.java | 15 +- src/org/olap4j/mdx/AxisNode.java | 12 +- src/org/olap4j/mdx/DimensionNode.java | 8 +- src/org/olap4j/mdx/HierarchyNode.java | 6 + src/org/olap4j/mdx/IdentifierNode.java | 29 +- src/org/olap4j/mdx/LevelNode.java | 8 +- src/org/olap4j/mdx/LiteralNode.java | 34 +- src/org/olap4j/mdx/MemberNode.java | 6 + src/org/olap4j/mdx/ParseRegion.java | 77 ++-- src/org/olap4j/mdx/ParseTreeVisitor.java | 80 +++- src/org/olap4j/mdx/PropertyValueNode.java | 11 + src/org/olap4j/mdx/SelectNode.java | 54 ++- src/org/olap4j/mdx/Syntax.java | 7 + src/org/olap4j/mdx/WithMemberNode.java | 9 +- src/org/olap4j/mdx/WithSetNode.java | 2 +- .../olap4j/mdx/parser/MdxParseException.java | 20 + .../mdx/parser/impl/DefaultMdxParser.cup | 42 +- .../mdx/parser/impl/DefaultMdxParserImpl.java | 2 +- src/org/olap4j/metadata/Cube.java | 7 +- src/org/olap4j/metadata/Hierarchy.java | 2 - src/org/olap4j/metadata/Member.java | 48 ++- src/org/olap4j/metadata/Property.java | 8 +- src/org/olap4j/query/Query.java | 8 +- src/org/olap4j/type/BooleanType.java | 8 +- src/org/olap4j/type/DecimalType.java | 4 + src/org/olap4j/type/DimensionType.java | 8 - src/org/olap4j/type/HierarchyType.java | 3 +- src/org/olap4j/type/NullType.java | 7 +- testsrc/org/olap4j/ConnectionTest.java | 383 +++++++++++++++--- testsrc/org/olap4j/OlapTest.java | 4 +- testsrc/org/olap4j/test/ParserTest.java | 6 +- testsrc/org/olap4j/test/TestContext.java | 2 +- 56 files changed, 1476 insertions(+), 442 deletions(-) create mode 100755 doc/olap4j-metadata.png create mode 100644 src/mondrian/olap4j/MondrianOlap4jCellSetAxisMetaData.java diff --git a/doc/olap4j-arch.vsd b/doc/olap4j-arch.vsd index eed1617bfa29280abd13d9390f568f1c8639b369..507b3be5c28b671fb21f1a0eef2e8d14295446d0 100755 GIT binary patch delta 19974 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 EAL*0V7ytkO diff --git a/doc/olap4j-metadata.png b/doc/olap4j-metadata.png new file mode 100755 index 0000000000000000000000000000000000000000..05d32ae5eb52119632446b3c3499c3be5f42b49e GIT binary patch literal 18730 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 -olap4j Functional Specification + +olap4j Specification