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("");
+ xmlEncode(buf, 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("");
- xmlEncode(buf, 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);