def logging_query_plan # :nodoc:
      return yield unless logger

      threshold = auto_explain_threshold_in_seconds
      current   = Thread.current
      if threshold && current[:available_queries_for_explain].nil?
        begin
          queries = current[:available_queries_for_explain] = []
          start = Time.now
          result = yield
          logger.warn(exec_explain(queries)) if Time.now - start > threshold
          result
        ensure
          current[:available_queries_for_explain] = nil
        end
      else
        yield
      end
    end
def logging_query_plan # :nodoc:
      return yield unless logger

      threshold = auto_explain_threshold_in_seconds
      current   = Thread.current
      if threshold && current[:available_queries_for_explain].nil?
        begin
          queries = current[:available_queries_for_explain] = []
          start = Time.now
          result = yield
          logger.warn(exec_explain(queries)) if Time.now - start > threshold
          result
        ensure
          current[:available_queries_for_explain] = nil
        end
      else
        yield
      end
    end
If auto explain is enabled, this method triggers EXPLAIN logging for the
 queries triggered by the block if it takes more than the threshold as a
 whole. That is, the threshold is not checked against each individual
 query, but against the duration of the entire block. This approach is
 convenient for relations.

 The available_queries_for_explain thread variable collects the queries
 to be explained. If the value is nil, it means queries are not being
 currently collected. A false value indicates collecting is turned
 off. Otherwise it is an array of queries.