Skip to content

Commit

Permalink
MONDRIAN: Make case insensitivity consistent and provide options or p…
Browse files Browse the repository at this point in the history
…laceholders where it can be configured.

[git-p4: depot-paths = "//open/mondrian/": change = 3449]
  • Loading branch information
ebb committed Apr 8, 2005
1 parent 7ab072b commit edb6f17
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 34 deletions.
6 changes: 4 additions & 2 deletions src/main/mondrian/olap/Query.java
Expand Up @@ -632,7 +632,8 @@ public Member lookupMemberFromCache(String s) {
Iterator definedMembers = getDefinedMembers().iterator();
while (definedMembers.hasNext()) {
Member mdxMember = (Member) definedMembers.next();
if (mdxMember.getUniqueName().equals(s)) {
// TODO: Add case sensitivity option
if (mdxMember.getUniqueName().equalsIgnoreCase(s)) {
return mdxMember;
}
}
Expand Down Expand Up @@ -1072,7 +1073,8 @@ public OlapElement getElementChild(OlapElement parent, String s) {
if (formula.isMember()) {
continue; // have already done these
}
if (formula.getNames()[0].equals(s)) {
// TODO: Add case sensitivity option
if (formula.getNames()[0].equalsIgnoreCase(s)) {
return formula.getMDXSet();
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/mondrian/olap/Util.java
Expand Up @@ -455,16 +455,16 @@ public static Member lookupMemberChildByName(
Member[] children = reader.getMemberChildren(member);
for (int i = 0; i < children.length; i++){
final Member child = children[i];
if (memberName.equals(child.getName())) {
// TODO: Add case sensitivity option
if (child.getName().equalsIgnoreCase(memberName)) {
return child;
}
}
return null;
}

/**
* @param member
* @return
* Finds the zero based ordinal of a Member among its siblings.
*/
public static int getMemberOrdinalInParent(SchemaReader reader,
Member member) {
Expand Down
33 changes: 21 additions & 12 deletions src/main/mondrian/rolap/RolapSchema.java
Expand Up @@ -401,7 +401,7 @@ public Cube createCube(String xml) {
* A collection of schemas, identified by their connection properties
* (catalog name, JDBC URL, and so forth).
*
* <p>To lookup a schema, call <code>Pool.instance().{@link #get}</code>.
* <p>To lookup a schema, call <code>Pool.instance().{@link #get(String, DataSource, Util.PropertyList)}</code>.
*/
static class Pool {
private static Pool pool = new Pool();
Expand Down Expand Up @@ -719,15 +719,24 @@ public Cube lookupCube(final String cube, final boolean failIfNotFound) {
* cube exists.
*/
protected Cube lookupCube(final String cubeName) {
return (Cube) mapNameToCube.get(cubeName);
return (Cube) mapNameToCube.get(isCaseSensitive() ? cubeName : cubeName.toUpperCase());
}

public Cube[] getCubes() {
return (Cube[]) mapNameToCube.values().toArray(new RolapCube[0]);
/**
* Adds a cube to the cube name map.
* @see #lookupCube(String)
*/
protected void addCube(final Cube cube) {
this.mapNameToCube.put(isCaseSensitive() ? cube.getName() : cube.getName().toUpperCase(), cube);
}

void addCube(final Cube cube) {
this.mapNameToCube.put(cube.getName(), cube);
private boolean isCaseSensitive() {
// TODO: Add case sensitivity option
return false;
}

public Cube[] getCubes() {
return (Cube[]) mapNameToCube.values().toArray(new RolapCube[0]);
}

public Hierarchy[] getSharedHierarchies() {
Expand Down Expand Up @@ -767,12 +776,12 @@ synchronized MemberReader createMemberReader(
if (false) mapSharedHierarchyToReader.put(sharedName, reader);
mapSharedHierarchyNameToHierarchy.put(sharedName, hierarchy);
} else {
final RolapHierarchy sharedHierarchy = (RolapHierarchy)
mapSharedHierarchyNameToHierarchy.get(sharedName);
final RolapDimension sharedDimension = (RolapDimension)
sharedHierarchy.getDimension();
final RolapDimension dimension =
(RolapDimension) hierarchy.getDimension();
// final RolapHierarchy sharedHierarchy = (RolapHierarchy)
// mapSharedHierarchyNameToHierarchy.get(sharedName);
// final RolapDimension sharedDimension = (RolapDimension)
// sharedHierarchy.getDimension();
// final RolapDimension dimension =
// (RolapDimension) hierarchy.getDimension();
// Util.assertTrue(
// dimension.getGlobalOrdinal() ==
// sharedDimension.getGlobalOrdinal());
Expand Down
43 changes: 26 additions & 17 deletions testsrc/main/mondrian/test/CompatibilityTest.java
Expand Up @@ -30,7 +30,7 @@ public CompatibilityTest(String name) {
/**
* Cube names are case insensitive.
*/
public void _testCubeCase() {
public void testCubeCase() {
String queryFrom = "select {[Measures].[Unit Sales]} on columns from ";
String result = "Axis #0:" + nl + "{}" + nl + "Axis #1:" + nl + "{[Measures].[Unit Sales]}"
+ nl + "Row #0: 266,773" + nl;
Expand All @@ -50,32 +50,26 @@ public void testCubeBrackets() {
+ nl + "Row #0: 266,773" + nl;

runQueryCheckResult(queryFrom + "Sales", result);
//case runQueryCheckResult(queryFrom + "SALES", result);
//case runQueryCheckResult(queryFrom + "sAlEs", result);
//case runQueryCheckResult(queryFrom + "sales", result);
runQueryCheckResult(queryFrom + "SALES", result);
runQueryCheckResult(queryFrom + "sAlEs", result);
runQueryCheckResult(queryFrom + "sales", result);
}

/**
* See how we are at diagnosing reserved words.
*/
public void testReservedWord() {
try {
runQueryCheckResult("with member [Measures].ordinal as '1'" + nl
+ " select {[Measures].ordinal} on columns from Sales", "x");
fail();
} catch (Exception e) {
// supposed to fail
}
assertAxisThrows("with member [Measures].ordinal as '1'" + nl
+ " select {[Measures].ordinal} on columns from Sales", "Syntax error");
runQueryCheckResult("with member [Measures].[ordinal] as '1'" + nl
+ " select {[Measures].[ordinal]} on columns from Sales", "Axis #0:" + nl + "{}"
+ nl + "Axis #1:" + nl + "{[Measures].[ordinal]}" + nl + "Row #0: 1" + nl);
// case problem: runQueryCheckResult("with member measures.[ordinal] as '1'" + nl + " select {measures.[ordinal]} on columns from Sales", "x");
}

/**
* Dimension names are case insensitive.
*/
public void _testDimensionCase() {
public void testDimensionCase() {
checkAxis("[Measures].[Unit Sales]", "[Measures].[Unit Sales]");
checkAxis("[Measures].[Unit Sales]", "[MEASURES].[Unit Sales]");
checkAxis("[Measures].[Unit Sales]", "[mEaSuReS].[Unit Sales]");
Expand Down Expand Up @@ -105,7 +99,7 @@ public void testDimensionBrackets() {
/**
* Member names are case insensitive.
*/
public void _testMemberCase() {
public void testMemberCase() {
checkAxis("[Measures].[Unit Sales]", "[Measures].[UNIT SALES]");
checkAxis("[Measures].[Unit Sales]", "[Measures].[uNiT sAlEs]");
checkAxis("[Measures].[Unit Sales]", "[Measures].[unit sales]");
Expand All @@ -126,6 +120,21 @@ public void _testMemberCase() {
checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].[mexico]");
}

/**
* Calculated member names are case insensitive.
*/
public void testCalculatedMemberCase() {
runQueryCheckResult("with member [Measures].[CaLc] as '1'" + nl
+ " select {[Measures].[CaLc]} on columns from Sales", "Axis #0:" + nl + "{}" + nl
+ "Axis #1:" + nl + "{[Measures].[CaLc]}" + nl + "Row #0: 1" + nl);
runQueryCheckResult("with member [Measures].[CaLc] as '1'" + nl
+ " select {[Measures].[cAlC]} on columns from Sales", "Axis #0:" + nl + "{}" + nl
+ "Axis #1:" + nl + "{[Measures].[CaLc]}" + nl + "Row #0: 1" + nl);
runQueryCheckResult("with member [mEaSuReS].[CaLc] as '1'" + nl
+ " select {[MeAsUrEs].[cAlC]} on columns from Sales", "Axis #0:" + nl + "{}" + nl
+ "Axis #1:" + nl + "{[Measures].[CaLc]}" + nl + "Row #0: 1" + nl);
}

/**
* Brackets around member names are optional.
*/
Expand All @@ -136,9 +145,9 @@ public void testMemberBrackets() {
checkAxis("[Measures].[Profit]", "[Measures].profit");

checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].Mexico");
//case checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].MEXICO");
//case checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].mExIcO");
//case checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].mexico");
checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].MEXICO");
checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].mExIcO");
checkAxis("[Customers].[All Customers].[Mexico]", "[Customers].[All Customers].mexico");
}

/**
Expand Down

0 comments on commit edb6f17

Please sign in to comment.