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