From e8d3567bc0c948a0bc2ff4bebe6a14f5146332a3 Mon Sep 17 00:00:00 2001 From: Luc Boudreau Date: Mon, 28 Jul 2008 20:10:36 +0000 Subject: [PATCH] Temporary fix for 2027796. This makes sure that XmlaOlap4jMembers are 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 --- .../olap4j/driver/xmla/XmlaOlap4jCube.java | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jCube.java b/src/org/olap4j/driver/xmla/XmlaOlap4jCube.java index b8604b2..a1f3229 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jCube.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jCube.java @@ -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 memberUniqueNames, Map memberMap) throws OlapException { - final XmlaOlap4jConnection.Context context = - new XmlaOlap4jConnection.Context( - XmlaOlap4jCube.this, null, null, null); List memberList = new ArrayList(); - 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); + } } }