Skip to content

Commit

Permalink
Temporary fix for 2027796. This makes sure that XmlaOlap4jMembers are…
Browse files Browse the repository at this point in the history
… created because SSAS doesn't support multiple restraints at once on a members meta query. The solution has much space for optimization. See the bug thread for discussion at :

https://sourceforge.net/tracker/index.php?func=detail&aid=2027796&group_id=168953&atid=848534

or the forum thread at :

https://sourceforge.net/forum/message.php?msg_id=5120707

git-svn-id: https://olap4j.svn.sourceforge.net/svnroot/olap4j/trunk@103 c6a108a4-781c-0410-a6c6-c2d559e19af0
  • Loading branch information
lucboudreau committed Jul 28, 2008
1 parent bc26a47 commit e8d3567
Showing 1 changed file with 18 additions and 17 deletions.
35 changes: 18 additions & 17 deletions src/org/olap4j/driver/xmla/XmlaOlap4jCube.java
Original file line number Diff line number Diff line change
Expand Up @@ -424,29 +424,30 @@ public XmlaOlap4jMember lookupMemberByUniqueName(
}
}

/* (non-Javadoc)
* @see org.olap4j.driver.xmla.MetadataReader
* #lookupMembersByUniqueName(java.util.List, java.util.Map)
* TODO Optimize this process so we don't always send N requests for N members.
*/
public void lookupMembersByUniqueName(
List<String> memberUniqueNames,
Map<String, XmlaOlap4jMember> memberMap) throws OlapException
{
final XmlaOlap4jConnection.Context context =
new XmlaOlap4jConnection.Context(
XmlaOlap4jCube.this, null, null, null);
List<XmlaOlap4jMember> memberList =
new ArrayList<XmlaOlap4jMember>();
olap4jSchema.olap4jCatalog.olap4jDatabaseMetaData.olap4jConnection
.populateList(
memberList,
context,
XmlaOlap4jConnection.MetadataRequest.MDSCHEMA_MEMBERS,
new XmlaOlap4jConnection.MemberHandler(),
new Object[] {
"CATALOG_NAME", olap4jSchema.olap4jCatalog.getName(),
"SCHEMA_NAME", olap4jSchema.getName(),
"CUBE_NAME", getName(),
"MEMBER_UNIQUE_NAME", memberUniqueNames
});
for (XmlaOlap4jMember member : memberList) {
memberMap.put(member.getUniqueName(), member);
for (String currentMemberName : memberUniqueNames) {
memberList.add(
this.lookupMemberByUniqueName(currentMemberName));
}
// All members have been found without errors,
// we can populate the map.
for (XmlaOlap4jMember currentMember : memberList) {
if (currentMember != null &&
!memberMap.containsKey(currentMember.getUniqueName()))
{
memberMap.put(currentMember.getUniqueName(),
currentMember);
}
}
}

Expand Down

0 comments on commit e8d3567

Please sign in to comment.