Skip to content

Commit

Permalink
Merge pull request pentaho#1083 from cravobranco/MONDRIAN-2640
Browse files Browse the repository at this point in the history
[MONDRIAN-2640] - SqlMemberSource.getMemberChildren queries fired dow…
  • Loading branch information
mkambol authored Nov 19, 2018
2 parents 0a6bfe7 + 93800d7 commit 937109c
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
// http://www.eclipse.org/legal/epl-v10.html.
// You must accept the terms of that agreement to use this software.
//
// Copyright (c) 2002-2017 Hitachi Vantara.. All rights reserved.
// Copyright (c) 2002-2018 Hitachi Vantara.. All rights reserved.
*/
package mondrian.rolap;

Expand All @@ -17,15 +17,17 @@
import mondrian.olap.Role.HierarchyAccess;
import mondrian.olap.Schema;
import mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember;
import mondrian.rolap.sql.MemberChildrenConstraint;
import mondrian.test.FoodMartTestCase;

import junit.framework.Assert;

import org.mockito.Mockito;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;

public class RestrictedMemberReaderTest extends FoodMartTestCase {

Expand Down Expand Up @@ -296,5 +298,36 @@ private Cube findCubeByName(Cube[] cc, String cn) {
}
return null;
}

public void testProcessMemberChildren() {

MemberReader delegateMemberReader = Mockito.mock(MemberReader.class);
MemberChildrenConstraint constraint = Mockito.mock(MemberChildrenConstraint.class);
Role role = Mockito.mock(Role.class);
Schema schema = Mockito.mock(Schema.class);
Dimension dimension = Mockito.mock(Dimension.class);
RolapHierarchy hierarchy = Mockito.mock(RolapHierarchy.class);

Level[] hierarchyAccessLevels = new Level[] { null };

Mockito.doReturn(schema).when(dimension).getSchema();
Mockito.doReturn(dimension).when(hierarchy).getDimension();
Mockito.doReturn(hierarchyAccessLevels).when(hierarchy).getLevels();
Mockito.doReturn(true).when(hierarchy).isRagged();
Mockito.doReturn(hierarchy).when(delegateMemberReader).getHierarchy();

List<RolapMember> children = new ArrayList<>();
children.add(mockMember());

List<RolapMember> fullChildren = new ArrayList<>();
fullChildren.add(mockMember());
fullChildren.add(mockMember());

rmr = new RestrictedMemberReader(delegateMemberReader, role);
final Map<RolapMember, Access> testResult = rmr.processMemberChildren(fullChildren, children, constraint);

Assert.assertEquals(2, testResult.size());
Assert.assertTrue(testResult.containsValue(Access.ALL));
}
}
// End RestrictedMemberReaderTest.java
19 changes: 9 additions & 10 deletions mondrian/src/main/java/mondrian/rolap/RestrictedMemberReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
// You must accept the terms of that agreement to use this software.
//
// Copyright (C) 2003-2005 Julian Hyde
// Copyright (C) 2005-2017 Hitachi Vantara
// Copyright (C) 2005-2018 Hitachi Vantara
// All Rights Reserved.
*/
package mondrian.rolap;
Expand Down Expand Up @@ -121,7 +121,7 @@ public Map<? extends Member, Access> getMemberChildren(
return processMemberChildren(fullChildren, children, constraint);
}

private Map<RolapMember, Access> processMemberChildren(
Map<RolapMember, Access> processMemberChildren(
List<RolapMember> fullChildren,
List<RolapMember> children,
MemberChildrenConstraint constraint)
Expand All @@ -134,15 +134,8 @@ private Map<RolapMember, Access> processMemberChildren(
RolapMember member = fullChildren.get(i);

// If a child is hidden (due to raggedness)
// or doesn't have access include its children.
// This must be done before applying access-control.
final Access access;
if (hierarchyAccess != null) {
access = hierarchyAccess.getAccess(member);
} else {
access = Access.ALL;
}
if ((ragged && member.isHidden()) || access.equals(Access.NONE)) {
if ((ragged && member.isHidden())) {
// Replace this member with all of its children.
// They might be hidden too, but we'll get to them in due
// course. They also might be access-controlled; that's why
Expand All @@ -164,6 +157,12 @@ private Map<RolapMember, Access> processMemberChildren(

// Filter out children which are invisible because of
// access-control.
final Access access;
if (hierarchyAccess != null) {
access = hierarchyAccess.getAccess(member);
} else {
access = Access.ALL;
}
switch (access) {
case NONE:
break;
Expand Down

0 comments on commit 937109c

Please sign in to comment.