RolapConnection.memoryUsageNotification(query, buf.toString());
}
}
Listener listener = new Listener(query);
MemoryMonitor mm = MemoryMonitorFactory.getMemoryMonitor();
long currId = -1;
try {
mm.addListener(listener);
// Check to see if we must punt
query.checkCancelOrTimeout();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(Util.unparse(query));
}
if (RolapUtil.MDX_LOGGER.isDebugEnabled()) {
currId = executeCount++;
RolapUtil.MDX_LOGGER.debug(currId + ": " + Util.unparse(query));
}
query.setQueryStartTime();
Result result = new RolapResult(query, true);
for (int i = 0; i < query.axes.length; i++) {
QueryAxis axis = query.axes[i];
if (axis.isNonEmpty()) {
result = new NonEmptyResult(result, query, i);
}
}
/* It will not work with HighCardinality.
if (LOGGER.isDebugEnabled()) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
result.print(pw);
pw.flush();
LOGGER.debug(sw.toString());
}
*/
query.setQueryEndExecution();
return result;
} catch (ResultLimitExceededException e) {
// query has been punted
throw e;
} catch (Exception e) {
String queryString;
query.setQueryEndExecution();
try {
queryString = Util.unparse(query);
} catch (Exception e1) {
queryString = "?";
}
throw Util.newError(
e,
"Error while executing query [" + queryString + "]");
} finally {
mm.removeListener(listener);
if (RolapUtil.MDX_LOGGER.isDebugEnabled()) {
RolapUtil.MDX_LOGGER.debug(
currId + ": exec: "
+ (System.currentTimeMillis() - query.getQueryStartTime())
+ " ms");