Skip to content

Commit

Permalink
MONDRIAN: expose Cutomized Parser support using the Connection interf…
Browse files Browse the repository at this point in the history
…ace.

[git-p4: depot-paths = "//open/mondrian/": change = 11154]
  • Loading branch information
Rushan Chen committed Jun 7, 2008
1 parent 4d57c77 commit 475ebc6
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 14 deletions.
5 changes: 5 additions & 0 deletions src/main/mondrian/olap/Connection.java
Expand Up @@ -79,6 +79,11 @@ public interface Connection {
*/
Query parseQuery(String s);

/**
* Parses a query, with specified function table
*/
Query parseQuery(String s, FunTable funTable);

/**
* Sets the privileges for the this connection.
*
Expand Down
34 changes: 25 additions & 9 deletions src/main/mondrian/olap/ConnectionBase.java
Expand Up @@ -56,10 +56,18 @@ public String getFullConnectString() {
}

public Query parseQuery(String s) {
return parseQuery(s, false);
return parseQuery(s, null, false);
}

public Query parseQuery(String s, boolean load) {
return parseQuery(s, null, load);
}

public Query parseQuery(String s, FunTable funTable) {
return parseQuery(s, funTable, false);
}

public Exp parseExpression(String s) {
boolean debug = false;
if (getLogger().isDebugEnabled()) {
//debug = true;
Expand All @@ -71,29 +79,37 @@ public Query parseQuery(String s, boolean load) {
try {
Parser parser = new Parser();
final FunTable funTable = getSchema().getFunTable();
Query q = parser.parseInternal(this, s, debug, funTable, load);
Exp q = parser.parseExpression(this, s, debug, funTable);
return q;
} catch (Throwable e) {
throw MondrianResource.instance().FailedToParseQuery.ex(s, e);
}
}

public Exp parseExpression(String s) {

private Query parseQuery(String query, FunTable cftab, boolean load) {
Parser parser = new Parser();
boolean debug = false;
final FunTable funTable;

if (cftab == null) {
funTable = getSchema().getFunTable();
} else {
funTable = cftab;
}

if (getLogger().isDebugEnabled()) {
//debug = true;
StringBuilder buf = new StringBuilder(256);
buf.append(Util.nl);
buf.append(s);
buf.append(query);
getLogger().debug(buf.toString());
}

try {
Parser parser = new Parser();
final FunTable funTable = getSchema().getFunTable();
Exp q = parser.parseExpression(this, s, debug, funTable);
Query q = parser.parseInternal(this, query, debug, funTable, load);
return q;
} catch (Throwable e) {
throw MondrianResource.instance().FailedToParseQuery.ex(s, e);
throw MondrianResource.instance().FailedToParseQuery.ex(query, e);
}
}
}
Expand Down
12 changes: 7 additions & 5 deletions testsrc/main/mondrian/olap/CustomizedParserTest.java
Expand Up @@ -45,16 +45,16 @@ private String wrapExpr(String expr) {
}

private void checkErrorMsg(Throwable e, String expectedErrorMsg) {
String actualMsg = e.getMessage();
if (e.getCause() != null) {
actualMsg = e.getCause().getMessage();
while (e.getCause() != null && !e.getCause().equals(e)) {
e = e.getCause();
}
String actualMsg = e.getMessage();
assertEquals(fold(expectedErrorMsg), actualMsg);
}

private Query getParsedQueryForExpr(CustomizedFunctionTable cftab, String expr) {
String mdx = wrapExpr(expr);
Query q = p.parseInternal(getConnection(), mdx, false, cftab, false);
Query q = getConnection().parseQuery(mdx, cftab);
return q;
}

Expand Down Expand Up @@ -215,7 +215,9 @@ public void testMeasureSlicerFail() {
try {
Query q =
getParsedQueryForExpr(cftab, "([Measures].[Store Cost], [Gender].[F])");
q.resolve(q.createValidator(cftab));
q.resolve(q.createValidator(cftab));
// Shouldn't reach here
fail();
} catch (Throwable e) {
checkErrorMsg(e,
"Mondrian Error:No function matches signature '(<Member>, <Member>)'");
Expand Down

0 comments on commit 475ebc6

Please sign in to comment.