lib/mondrian/olap/error.rb in mondrian-olap-1.2.0 vs lib/mondrian/olap/error.rb in mondrian-olap-1.3.0
- old
+ new
@@ -37,11 +37,11 @@
profiling_handler.timing if profiling_handler
end
def profiling_timing_string
if profiling_timing && (timing_string = profiling_timing.toString)
- timing_string.gsub("\r\n", "\n")
+ timing_string.gsub("\r\n", "\n").sub(Mondrian::OLAP::Result::QUERY_TIMING_CUMULATIVE_REGEXP, '')
end
end
private
@@ -74,10 +74,18 @@
if statement = options[:profiling_statement]
f = Java::mondrian.olap4j.MondrianOlap4jStatement.java_class.declared_field("openCellSet")
f.accessible = true
if cell_set = f.value(statement)
cell_set.close
- @profiling_handler = statement.getProfileHandler
+ # Starting from Mondrian 9.2 query plan was not available in case of error, need to get it explicitly.
+ if (@profiling_handler = statement.getProfileHandler) && !@profiling_handler.timing
+ query = statement.getQuery
+ string_writer = Java::java.io.StringWriter.new
+ print_writer = Java::java.io.PrintWriter.new(string_writer)
+ query.explain(print_writer)
+ print_writer.close
+ @profiling_handler.explain(string_writer.toString, cell_set.getQueryTiming)
+ end
end
end
end
end