diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jMember.java b/src/org/olap4j/driver/xmla/XmlaOlap4jMember.java index ec6fd69..cd44ce3 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jMember.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jMember.java @@ -243,9 +243,13 @@ static Object getPropertyValue( case PARENT_COUNT: return 1; case PARENT_LEVEL: - return member.getParentMember().getLevel().getDepth(); + return member.getParentMember() == null + ? 0 + : member.getParentMember().getLevel().getDepth(); case PARENT_UNIQUE_NAME: - return member.getParentMember().getUniqueName(); + return member.getParentMember() == null + ? null + : member.getParentMember().getUniqueName(); case SCHEMA_NAME: return member.getCube().olap4jSchema.getName(); case VALUE: diff --git a/testsrc/org/olap4j/ConnectionTest.java b/testsrc/org/olap4j/ConnectionTest.java index ac7225d..d66e4dd 100644 --- a/testsrc/org/olap4j/ConnectionTest.java +++ b/testsrc/org/olap4j/ConnectionTest.java @@ -1738,6 +1738,9 @@ public void testMetadata() throws Exception { assertNotNull(member); Member member2 = cube.lookupMember("Product", "All Products", "Food"); assertEquals(member, member2); + final Member bread = + cube.lookupMember("Product", "Food", "Baked Goods", "Bread"); + assertEquals("[Product].[Food]", member.getUniqueName()); assertEquals("Food", member.getName()); assertEquals( @@ -1794,6 +1797,27 @@ public void testMetadata() throws Exception { Olap4jUtil.enumSetOf(Property.TypeFlag.MEMBER), property.getType()); assertEquals(Datatype.STRING, property.getDatatype()); + // PARENT_LEVEL property + final Property parentLevelProperty = propertyList.get("PARENT_LEVEL"); + assertNotNull(parentLevelProperty); + assertEquals( + 0, allProductsMember.getPropertyValue(parentLevelProperty)); + assertEquals(0, member.getPropertyValue(parentLevelProperty)); + assertEquals(2, bread.getPropertyValue(parentLevelProperty)); + + // PARENT_UNIQUE_NAME property + final Property parentUniqueNameProperty = + propertyList.get("PARENT_UNIQUE_NAME"); + assertNotNull(parentUniqueNameProperty); + assertNull( + allProductsMember.getPropertyValue(parentUniqueNameProperty)); + assertEquals( + "[Product].[All Products]", + member.getPropertyValue(parentUniqueNameProperty)); + assertEquals( + "[Product].[Food].[Baked Goods]", + bread.getPropertyValue(parentUniqueNameProperty)); + // Measures int k = -1; Set measureNameSet = new HashSet();