diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java b/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java index 1aaf7e7..ce3a6be 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jConnection.java @@ -126,7 +126,7 @@ abstract class XmlaOlap4jConnection implements OlapConnection { * calls as part of <PropertyList/>.
* Can be passed to connection via connection string properties. */ - private final Map databaseProperties; + private final Map databaseProperties; private boolean autoCommit; private boolean readOnly; @@ -186,7 +186,7 @@ abstract class XmlaOlap4jConnection implements OlapConnection { final Map map = parseConnectString(url, info); - this.databaseProperties = new HashMap(); + this.databaseProperties = new HashMap(); for (String infoKey : map.keySet()) { databaseProperties.put(infoKey, map.get(infoKey)); } @@ -313,6 +313,25 @@ static boolean acceptsURL(String url) { return url.startsWith(CONNECT_STRING_PREFIX); } + String makeConnectionPropertyList() { + StringBuilder buf = new StringBuilder(); + for (String prop : databaseProperties.keySet()) { + try { + XmlaOlap4jDriver.Property.valueOf(prop); + continue; + } catch (IllegalArgumentException e) { + buf.append(" <"); + xmlEncode(buf, prop); + buf.append(">"); + xmlEncode(buf, databaseProperties.get(prop)); + buf.append("\n"); + } + } + return buf.toString(); + } + public OlapStatement createStatement() { return factory.newStatement(this); } @@ -927,19 +946,15 @@ public String generateRequest( + " \n" + " \n"); - for (String prop : databaseProperties.keySet()) { - try { - XmlaOlap4jDriver.Property.valueOf(prop); - continue; - } catch (IllegalArgumentException e) { - buf.append(" <"); - xmlEncode(buf,prop); - buf.append(">"); - xmlEncode(buf, databaseProperties.get(prop)); - buf.append(""); - } + String conProperties = makeConnectionPropertyList(); + if (conProperties != null && !("".equals(conProperties))) { + buf.append(conProperties); + } + + if (roleName != null && !("".equals(roleName))) { + buf.append(" "); + xmlEncode(buf, roleName); + buf.append("\n"); } // Add the datasource node only if this request requires it. @@ -949,12 +964,6 @@ public String generateRequest( buf.append("\n"); } - if (roleName != null && !("".equals(roleName))) { - buf.append(" "); - xmlEncode(buf, roleName); - buf.append("\n"); - } - String requestCatalogName = null; if (restrictedCatalogName != null && restrictedCatalogName.length() > 0) diff --git a/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java b/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java index 752d0e9..b7b4b5e 100644 --- a/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java +++ b/src/org/olap4j/driver/xmla/XmlaOlap4jStatement.java @@ -285,6 +285,8 @@ public boolean isWrapperFor(Class iface) throws SQLException { public CellSet executeOlapQuery(String mdx) throws OlapException { final String catalog = olap4jConnection.getCatalog(); final String dataSourceInfo = olap4jConnection.getDatabase(); + final String roleName = olap4jConnection.getRoleName(); + final String propList = olap4jConnection.makeConnectionPropertyList(); StringBuilder buf = new StringBuilder( "\n" + "\n"); } + if (propList != null) { + buf.append(propList); + } + if (roleName != null && !("".equals(roleName))) { + buf.append(" "); + buf.append(roleName); + buf.append("\n"); + } if (dataSourceInfo != null) { buf.append(" "); buf.append(dataSourceInfo);