Skip to content

Commit

Permalink
MONDRIAN: Fourth round of integration for Mondrian 3.0.4, including c…
Browse files Browse the repository at this point in the history
…hanges that don't impact APIs, includes changes:

11230: Test case for issue described in Pentaho forum post 'wrong unique name for default member when hasAll=false'
11232: Only clean jars in 'clean-deep'
11233: Fix NullPointerException when apply partial-rollup to parent-child hierarchy.
11234: Fix bug 1951916, "getCaption() does not return cube caption".
           Also fix quoting of connect string parameters that contain single-quotes;
           and add TestContext.getOlapConnection(), to make it easier to write olap4j-based tests.
11256: Enable tests on PostgreSQL. Document PostgreSQL installation procedure.
       Obsolete enum checker method Util.isValid(Class, E): it's expensive and unnecessary.
       Fix SchemaTest for JDBC 3 and lower.
11257: Fix bug 1967378, "Connecting : JdbcPassword parameter ignored" and add unit test. Mondrian was creating data sources but forgetting to include JdbcUser and JdbcPassword parameters in the data source properties. Some data sources (in particular connection pooling ones) can only give out connections with one particular user and password.
           Also, validate JDBC credentials early, on establishing a mondrian connection, in order to give a more predictable error message.
11258: Fix RolapConnectionTest for Access.
11264: If connecting to Derby, run a dummy statement so that connection errors are detected early. Fixes RolapConnectionTest for Derby.

[git-p4: depot-paths = "//open/mondrian-release/3.0/": change = 11279]
  • Loading branch information
Will Gorman committed Jul 8, 2008
1 parent 5782451 commit 44665ad
Show file tree
Hide file tree
Showing 16 changed files with 836 additions and 246 deletions.
35 changes: 29 additions & 6 deletions bin/loadFoodMart.sh
Expand Up @@ -7,9 +7,11 @@ Linux) PS=: ;;
*) PS=\; ;;
esac

export CP="lib/mondrian.jar${PS}lib/log4j.jar${PS}lib/eigenbase-properties.jar${PS}lib/eigenbase-xom.jar${PS}lib/eigenbase-resgen.jar"

oracle() {
#export ORACLE_HOME=G:/oracle/product/10.1.0/Db_1
java -cp "lib/mondrian.jar${PS}lib/log4j.jar${PS}lib/eigenbase-properties.jar${PS}lib/eigenbase-xom.jar${PS}lib/eigenbase-resgen.jar${PS}${ORACLE_HOME}/jdbc/lib/ojdbc14.jar" \
java -cp "${CP}${PS}${ORACLE_HOME}/jdbc/lib/ojdbc14.jar" \
mondrian.test.loader.MondrianFoodMartLoader \
-verbose -aggregates -tables -data -indexes \
-jdbcDrivers=oracle.jdbc.OracleDriver \
Expand All @@ -18,16 +20,37 @@ oracle() {
}

mysql() {
java -cp "lib/mondrian.jar${PS}lib/log4j.jar${PS}lib/eigenbase-properties.jar${PS}lib/eigenbase-xom.jar${PS}lib/eigenbase-resgen.jar${PS}/usr/local/mysql-connector-java-3.1.12/mysql-connector-java-3.1.12-bin.jar" \
java -cp "${CP}${PS}/usr/local/mysql-connector-java-3.1.12/mysql-connector-java-3.1.12-bin.jar" \
mondrian.test.loader.MondrianFoodMartLoader \
-verbose -aggregates -tables -data -indexes \
-jdbcDrivers=com.mysql.jdbc.Driver \
-inputFile=demo/FoodMartCreateData.sql \
-outputJdbcURL="jdbc:mysql://localhost/foodmart?user=foodmart&password=foodmart"
}

# Load PostgreSQL.
#
# To install postgres and its JDBC driver on ubuntu:
# $ sudo apt-get install postgresql libpg-java
# Then change postgres password, create a user and database:
# $ sudo -u postgres psql postgres
# # ALTER USER postgres WITH ENCRYPTED PASSWORD '<password>';
# # \q
# $ sudo -u postgres createuser -D -A -P foodmart
# $ sudo -u postgres createdb -O foodmart foodmart
postgresql() {
java -verbose -cp "${CP}${PS}/usr/share/java/postgresql.jar" \
mondrian.test.loader.MondrianFoodMartLoader \
-verbose -tables -data -indexes \
-jdbcDrivers="org.postgresql.Driver" \
-inputFile=demo/FoodMartCreateData.sql \
-outputJdbcURL="jdbc:postgresql://localhost/foodmart" \
-outputJdbcUser=foodmart \
-outputJdbcPassword=foodmart
}

farrago() {
java -cp "lib/mondrian.jar${PS}lib/log4j.jar${PS}lib/eigenbase-xom.jar${PS}lib/eigenbase-resgen.jar${PS}lib/eigenbase-properties.jar${PS}../farrago/classes" \
java -cp "${CP}${PS}../farrago/classes" \
mondrian.test.loader.MondrianFoodMartLoader \
-verbose -aggregates -tables -data -indexes \
-jdbcDrivers=net.sf.farrago.client.FarragoVjdbcClientDriver \
Expand All @@ -40,7 +63,7 @@ farrago() {
# Note that we do not use '-aggregates'; we plan to use aggregate
# join indexes instead of explicit aggregate tables.
teradata() {
java -cp "lib/mondrian.jar${PS}lib/log4j.jar${PS}lib/eigenbase-xom.jar${PS}lib/eigenbase-resgen.jar${PS}lib/eigenbase-properties.jar${PS}drivers/terajdbc4.jar${PS}drivers/tdgssjava.jar${PS}drivers/tdgssconfig.jar" \
java -cp "${CP}${PS}drivers/terajdbc4.jar${PS}drivers/tdgssjava.jar${PS}drivers/tdgssconfig.jar" \
mondrian.test.loader.MondrianFoodMartLoader \
-verbose -tables -data -indexes \
-jdbcDrivers=com.ncr.teradata.TeraDriver \
Expand All @@ -50,7 +73,7 @@ teradata() {
-outputJdbcPassword="tduser"
}

cd $(dirname $0)
teradata
cd $(dirname $0)/..
postgresql

# End loadFoodMart
2 changes: 1 addition & 1 deletion build.xml
Expand Up @@ -363,13 +363,13 @@ demo/access/MondrianFoodMart.mdb"/>
<fileset dir="${testclasses-jdk14.dir}" />
<fileset dir="${testsrc.dir}" includes="**/*.log.xml"/>
<fileset dir="${testsrc.dir}" includes="**/*JUnit.java"/>
<fileset dir="${lib.dir}" includes="*.jar,*.war" excludes="xml-apis.jar"/>
<fileset dir="${wb.plugins.dir}" includes="*.jar"/>
</delete>
</target>

<target name="clean-deep">
<delete includeEmptyDirs="true" quiet="true">
<fileset dir="${lib.dir}" includes="*.jar,*.war" excludes="xml-apis.jar"/>
<fileset dir="${classes.dir}"/>
<fileset dir="${testclasses.dir}"/>
</delete>
Expand Down
96 changes: 29 additions & 67 deletions doc/install.html
Expand Up @@ -5,7 +5,7 @@
== Agreement, available at the following URL:
== http://www.opensource.org/licenses/cpl.html.
== Copyright (C) 2001-2002 Kana Software, Inc.
== Copyright (C) 2002-2007 Julian Hyde and others
== Copyright (C) 2002-2008 Julian Hyde and others
== All Rights Reserved.
== You must accept the terms of that agreement to use this software.
-->
Expand Down Expand Up @@ -49,10 +49,10 @@
<li><a href="#8_Compatibility_issues">Compatibility issues</a></li>
<ol>
<li><a href="#8_1_Weblogic_6_1_and_Xerces">Weblogic 6.1 and Xerces</a></li>
<li><a href="#8_2_Xalan_and_Tomcat">Xalan and Tomcat</a></li>
<li><a href="#8_3_Log4j_and_Tomcat">Log4j and Tomcat</a></li>
<li><a href="#8_2_Log4j_and_Tomcat">Log4j and Tomcat</a></li>
</ol>
</ol>

<h2>1. Introduction<a name="1_Introduction">&nbsp;</a></h2>
<p>The core of Mondrian is a JAR that acts as "JDBC for OLAP":
providing connections and executing SQL against underlying relational
Expand Down Expand Up @@ -277,7 +277,7 @@ <h5>Example 1. Loading MySQL from a file on Linux</h5>

<blockquote>
<code><b><i>$</i></b> java -cp
"/mondrian/lib/mondrian.jar:/mondrian/lib/log4j-1.2.9.jar:/mondrian/lib/eigenbase-xom.jar:/mondrian/lib/eigenbase-resgen.jar:/mondrian/lib/eigenbase-properties.jar:/usr/local/mysql/mysql-connector-java-5.0.5-bin.jar"<br>
"/mondrian/lib/mondrian.jar:/mondrian/lib/log4j.jar:/mondrian/lib/eigenbase-xom.jar:/mondrian/lib/eigenbase-resgen.jar:/mondrian/lib/eigenbase-properties.jar:/usr/local/mysql/mysql-connector-java-5.0.5-bin.jar"<br>
&nbsp;&nbsp;&nbsp;&nbsp; mondrian.test.loader.MondrianFoodMartLoader<br>
&nbsp;&nbsp;&nbsp;&nbsp; -verbose -tables -data -indexes<br>
&nbsp;&nbsp;&nbsp;&nbsp; -jdbcDrivers=com.mysql.jdbc.Driver<br>
Expand All @@ -293,7 +293,7 @@ <h5>Example 2. Loading PostgreSQL from Access on Windows</h5>

<blockquote>
<code><i><b>C:\mondrian&gt;</b></i> java -cp
"C:\mondrian\lib\mondrian.jar;C:\mondrian\lib\log4j-1.2.9.jar; C:\mondrian\lib\eigenbase-xom.jar; C:\mondrian\lib\eigenbase-resgen.jar; C:\mondrian\lib\eigenbase-properties.jar; C:\mondrian\lib\postgres-jdbc.jar"<br>
"C:\mondrian\lib\mondrian.jar;C:\mondrian\lib\log4j.jar; C:\mondrian\lib\eigenbase-xom.jar; C:\mondrian\lib\eigenbase-resgen.jar; C:\mondrian\lib\eigenbase-properties.jar; C:\mondrian\lib\postgres-jdbc.jar"<br>
&nbsp;&nbsp;&nbsp;&nbsp; mondrian.test.loader.MondrianFoodMartLoader<br>
&nbsp;&nbsp;&nbsp;&nbsp; -verbose -tables -data -indexes<br>
&nbsp;&nbsp;&nbsp;&nbsp; -jdbcDrivers="org.postgresql.Driver,sun.jdbc.odbc.JdbcOdbcDriver"<br>
Expand Down Expand Up @@ -505,6 +505,27 @@ <h3>General database tips</h3>
<code><a href="http://p4web.eigenbase.org/open/mondrian/mondrian.properties">mondrian.properties</a></code>. There are are sample connect
strings for most databases in there.</p>

<h3>PostgreSQL</h3>

<p>To install PostgreSQL 8.2 and its JDBC driver on Ubuntu, I typed:</p>

<blockquote><code>$ sudo apt-get install postgresql libpg-java</code></blockquote>

<p>The JDBC driver can be found at <code>/usr/share/java/postgresql.jar</code>.</p>

<p>Change password:</p>

<blockquote><code>
$ sudo -u postgres psql postgres<br/>
# ALTER USER postgres WITH ENCRYPTED PASSWORD ' <***password***> ';<br/>
# \q</code></blockquote>

<p>Create a user and a database:</p>

<blockquote><code>
$ sudo -u postgres createuser -D -A -P foodmart<br/>
$ sudo -u postgres createdb -O foodmart foodmart</code></blockquote>

<h3>Ingres</h3>
<p>Andy Grimm writes:</p>
<blockquote>
Expand Down Expand Up @@ -560,66 +581,7 @@ <h3>8.1. Weblogic 6.1 and Xerces<a name="8_1_Weblogic_6_1_and_Xerces">&nbsp;</a>
note</a>
describes how to change Weblogic's default XML parser.</p>

<h3>8.2. JDK, Xalan and Tomcat<a name="8_2_Xalan_and_Tomcat">&nbsp;</a></h3>

<p>Mondrian binaries, as shipped, require JDK 1.4.x, Xalan 2.6.0, and
Tomcat
5.0.25 or later. Things work better that way.</p>
<p>If you are running JDK 1.3.<i>x</i>, you will need some extra JAR
files, because JDK 1.3 does
not include the an XML parser. Copy <code> xalan.jar</code> and <code>xml-apis.jar</code>
to <code><i>TOMCAT_HOME</i>/common/lib</code>. (or <code><i>TOMCAT_HOME</i>/common/endorsed</code>,
if your version of Tomcat has one). If you get the configuration wrong,
a typical error is</p>
<blockquote>
<code>java.lang.VerifyError: Cannot inherit from final class<br>
&nbsp; at java.lang.ClassLoader.defineClass0(Native Method)<br>
&nbsp; at java.lang.ClassLoader.defineClass(ClassLoader.java:502)<br>
&nbsp; at
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)<br>
&nbsp; at
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1664)<br>
&nbsp; at
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:953)<br>
&nbsp; at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1394)<br>
&nbsp; at
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1274)<br>
&nbsp; at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)<br>
&nbsp; at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.createContentDispatcher(Unknown
Source)<br>
&nbsp; at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.&lt;init&gt;(XMLDocumentFragmentScannerImpl.java:249)<br>
&nbsp; at
org.apache.xerces.impl.XMLDocumentScannerImpl.&lt;init&gt;(XMLDocumentScannerImpl.java:245)<br>
&nbsp; at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.&lt;init&gt;(Unknown
Source)<br>
&nbsp; at
org.apache.xerces.parsers.IntegratedParserConfiguration.createDocumentScanner(Unknown
Source)<br>
&nbsp; at
org.apache.xerces.parsers.DTDConfiguration.&lt;init&gt;(DTDConfiguration.java:367)<br>
&nbsp; at
org.apache.xerces.parsers.StandardParserConfiguration.&lt;init&gt;(StandardParserConfiguration.java:198)<br>
&nbsp; at
org.apache.xerces.parsers.IntegratedParserConfiguration.&lt;init&gt;(Unknown
Source)<br>
&nbsp; at
org.apache.xerces.parsers.IntegratedParserConfiguration.&lt;init&gt;(Unknown
Source)<br>
&nbsp; at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method)</code>
</blockquote>
<p>This error occurred under JDK 1.3.1, Tomcat 4.1.18, Xalan 2.4.1. The
solutions to the error were (a) move to JDK 1.4 and remove <code>xml-apis.jar</code>
and
<code>xercesImpl.jar</code> from <code>mondrian.war</code>, or (b)
revert to Xalan 2.3.1.<br>
</p>

<h3>8.3. Log4j and Tomcat<a name="8_3_Log4j_and_Tomcat">&nbsp;</a></h3>
<h3>8.2. Log4j and Tomcat<a name="8_2_Log4j_and_Tomcat">&nbsp;</a></h3>

<p>The Mondrian WARs come packaged with a version of log4j.jar. This
may conflict with your app server, such as JBoss, and cause errors in
Expand All @@ -630,11 +592,11 @@ <h3>8.3. Log4j and Tomcat<a name="8_3_Log4j_and_Tomcat">&nbsp;</a></h3>
<hr>

<p>
Author: Julian Hyde and others; last updated October, 2006.<br/>
Author: Julian Hyde and others; last updated July, 2008.<br/>
Version: $Id$
(<a href="http://p4web.eigenbase.org/open/mondrian/doc/install.html?ac=22">log</a>)<br/>
Copyright (C) 2001-2002 Kana Software, Inc.<br/>
Copyright (C) 2002-2007 Julian Hyde
Copyright (C) 2002-2008 Julian Hyde and others
</p>

<br/>
Expand Down
2 changes: 0 additions & 2 deletions src/main/mondrian/olap/RoleImpl.java
Expand Up @@ -292,13 +292,11 @@ public Access getAccess(Level level) {
* </ol>
*
* @pre member != null
* @pre Access.instance().isValid(access)
* @pre isMutable()
* @pre getAccess(member.getHierarchy()) == Access.CUSTOM
*/
public void grant(Member member, Access access) {
Util.assertPrecondition(member != null, "member != null");
assert Util.isValid(Access.class, access);
assert isMutable();
assert getAccess(member.getHierarchy()) == Access.CUSTOM;
HierarchyAccessImpl hierarchyAccess = hierarchyGrants.get(member.getHierarchy());
Expand Down
57 changes: 25 additions & 32 deletions src/main/mondrian/olap/Util.java
Expand Up @@ -82,6 +82,14 @@ public class Util extends XOMUtil {
public static final boolean PreJdk15 =
System.getProperty("java.version").startsWith("1.4");

/**
* What version of JDBC? Returns 4 in JDK 1.6 and higher, 3 otherwise.
*/
public static final int JdbcVersion =
System.getProperty("java.version").compareTo("1.6") >= 0
? 4
: 3;

/**
* Whether the code base has re-engineered using retroweaver.
* If this is the case, some functionality is not available.
Expand All @@ -91,6 +99,7 @@ public class Util extends XOMUtil {
"com.rc.retroweaver.runtime.Enum_");

private static final UtilCompatible compatible;

static {
String className;
if (PreJdk15 || Retrowoven) {
Expand Down Expand Up @@ -1667,22 +1676,24 @@ public String toString() {
if (right == null) {
sb.append("'null'");
} else {
/*
* Quote a property value if is has a semi colon in it
* 'xxx;yyy';
*/
if (right.indexOf(';') >= 0 && right.charAt(0) != '\'') {
sb.append("'");
}

sb.append(right);

if (right.indexOf(';') >= 0 && right.charAt(
right.length() - 1) != '\'') {
sb.append("'");
// Quote a property value if is has a semi colon in it
// 'xxx;yyy'. Escape any single-quotes by doubling them.
final int needsQuote = right.indexOf(';');
if (needsQuote >= 0) {
// REVIEW: This logic leaves off the leading/trailing
// quote if the property value already has a
// leading/trailing quote. Doesn't seem right to me.
if (right.charAt(0) != '\'') {
sb.append("'");
}
sb.append(replace(right, "'", "''"));
if (right.charAt(right.length() - 1) != '\'') {
sb.append("'");
}
} else {
sb.append(right);
}
}

}
return sb.toString();
}
Expand Down Expand Up @@ -2174,24 +2185,6 @@ public static <T> List<T> cast(List<?> list) {
return (List<T>) list;
}

/**
* Returns whether an enumeration value is a valid not-null value of a given
* enumeration class.
*
* @param clazz Enumeration class
* @param e Enumeration value
* @return Whether t is a value of enum clazz
*/
public static <E extends Enum<E>> boolean isValid(Class<E> clazz, E e) {
E[] enumConstants = clazz.getEnumConstants();
for (E enumConstant : enumConstants) {
if (e == enumConstant) {
return true;
}
}
return false;
}

/**
* Looks up an enumeration by name, returning null if not valid.
*/
Expand Down

0 comments on commit 44665ad

Please sign in to comment.