Skip to content

Commit

Permalink
MONDRIAN: fix for BISERVER-1367. All Member naming regular expression…
Browse files Browse the repository at this point in the history
… issues with shared dimensions

[git-p4: depot-paths = "//open/mondrian/": change = 11093]
  • Loading branch information
Will Gorman committed May 21, 2008
1 parent dbbe6d9 commit 03bf0e3
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 6 deletions.
22 changes: 16 additions & 6 deletions src/main/mondrian/rolap/RolapCubeMember.java
Expand Up @@ -59,12 +59,22 @@ public RolapCubeMember(RolapCubeMember parent, RolapMember member,
if (member.isAll()) {
// this is a special case ...
// replace hierarchy name portion of all member with new name
// special case if we're dealing with a closure
String replacement =
level.getHierarchy().getName().replaceAll("\\$", "\\\\\\$");
rolapAllMemberCubeName = member.getName().replaceAll(
member.getLevel().getHierarchy().getName(),
replacement);
if (member.getLevel().getHierarchy().getName().equals(
level.getHierarchy().getName()
)) {
rolapAllMemberCubeName = member.getName();
} else {
// special case if we're dealing with a closure
String replacement =
level.getHierarchy().getName().replaceAll("\\$", "\\\\\\$");

// convert string to regular expression
String memberLevelName = member.getLevel().getHierarchy().getName().replaceAll("\\.", "\\\\.");

rolapAllMemberCubeName = member.getName().replaceAll(
memberLevelName,
replacement);
}
setUniqueName(rolapAllMemberCubeName);
} else {
rolapAllMemberCubeName = null;
Expand Down
73 changes: 73 additions & 0 deletions testsrc/main/mondrian/test/SchemaTest.java
Expand Up @@ -16,6 +16,8 @@
import mondrian.rolap.aggmatcher.AggTableManager;
import mondrian.olap.*;
import mondrian.util.Bug;
import mondrian.olap.Member;
import mondrian.olap.Position;

import java.io.StringWriter;
import java.util.List;
Expand Down Expand Up @@ -753,6 +755,45 @@ public void testMultipleDimensionUsages() {
"Row #0: 16,266\n"));
}

/**
* Test Multiple DimensionUsages on same Dimension.
* Alias the fact table to avoid issues with aggregation rules
* and multiple column names
*/
public void testMultipleDimensionHierarchyCaptionUsages() {
TestContext testContext = TestContext.create(
null,

"<Cube name=\"Sales Two Dimensions\">\n" +
" <Table name=\"sales_fact_1997\" alias=\"sales_fact_1997_mdu\"/>\n" +
" <DimensionUsage name=\"Time\" caption=\"TimeOne\" source=\"Time\" foreignKey=\"time_id\"/>\n" +
" <DimensionUsage name=\"Time2\" caption=\"TimeTwo\" source=\"Time\" foreignKey=\"product_id\"/>\n" +
" <DimensionUsage name=\"Store\" source=\"Store\" foreignKey=\"store_id\"/>\n" +
" <Measure name=\"Unit Sales\" column=\"unit_sales\" aggregator=\"sum\" "+
" formatString=\"Standard\"/>\n" +
" <Measure name=\"Store Cost\" column=\"store_cost\" aggregator=\"sum\"" +
" formatString=\"#,###.00\"/>\n" +
"</Cube>",
null, null, null, null);

String query = "select\n" +
" {[Time2].[1997]} on columns,\n" +
" {[Time].[1997].[Q3]} on rows\n" +
"From [Sales Two Dimensions]";

Result result = testContext.executeQuery(query);

// Time2.1997 Member
Member member1 = result.getAxes()[0].getPositions().iterator().next().iterator().next();

// NOTE: The caption is modified at the dimension, not the hierarchy
assertEquals("TimeTwo", member1.getLevel().getDimension().getCaption());

Member member2 = result.getAxes()[1].getPositions().iterator().next().iterator().next();
assertEquals("TimeOne", member2.getLevel().getDimension().getCaption());
}


/**
* This test verifies that the createDimension() API call is working correctly.
*/
Expand Down Expand Up @@ -1632,6 +1673,38 @@ public void testInvalidSchemaAccess() {
+ "Legal values: {all, custom, none, all_dimensions}");
}


public void testAllMemberNoStringReplace() {
TestContext testContext = TestContext.create(
null,
"<Cube name=\"Sales Special Time\">\n" +
" <Table name=\"sales_fact_1997\"/>\n" +
"<Dimension name=\"TIME\" foreignKey=\"time_id\" type=\"TimeDimension\">" +
"<Hierarchy name=\"CALENDAR\" hasAll=\"true\" allMemberName=\"All TIME(CALENDAR)\" primaryKey=\"time_id\">" +
" <Table name=\"time_by_day\"/>" +
" <Level name=\"Years\" column=\"the_year\" uniqueMembers=\"true\" levelType=\"TimeYears\"/>" +
" <Level name=\"Quarters\" column=\"quarter\" uniqueMembers=\"false\" levelType=\"TimeQuarters\"/>" +
" <Level name=\"Months\" column=\"month_of_year\" uniqueMembers=\"false\" levelType=\"TimeMonths\"/>" +
"</Hierarchy>"+
"</Dimension>" +
" <DimensionUsage name=\"Store\" source=\"Store\" foreignKey=\"store_id\"/>\n" +
" <Measure name=\"Unit Sales\" column=\"unit_sales\" aggregator=\"sum\" "+
" formatString=\"Standard\"/>\n" +
" <Measure name=\"Store Cost\" column=\"store_cost\" aggregator=\"sum\"" +
" formatString=\"#,###.00\"/>\n" +
"</Cube>",
null, null, null, null);


testContext.assertQueryReturns("select [TIME.CALENDAR].[All TIME(CALENDAR)] on rows from [Sales Special Time]",
fold(
"Axis #0:\n" +
"{}\n" +
"Axis #1:\n" +
"{[TIME.CALENDAR].[All TIME(CALENDAR)]}\n" +
"Row #0: 266,773\n"));
}

public void testUnionRole() {
final TestContext testContext = TestContext.create(
null, null, null, null, null,
Expand Down

0 comments on commit 03bf0e3

Please sign in to comment.