class Isolator::ActiveSupportSubscriber::Subscriber

def extract_connection_id(payload)

def extract_connection_id(payload)
  payload[:connection_id] || payload[:connection]&.object_id || 0
end

def finish(event, id, payload)

def finish(event, id, payload)
  return unless finish_event?(payload[:sql])
  connection_id = extract_connection_id(payload)
  Isolator.decr_transactions!(connection_id)
end

def finish_event?(sql)

def finish_event?(sql)
  FINISH_PATTERN.match?(sanitize_query(sql))
end

def sanitize_query(sql)

Prevents "ArgumentError: invalid byte sequence in UTF-8" by replacing invalid byte sequence with "?"
def sanitize_query(sql)
  sql.encode("UTF-8", "binary", invalid: :replace, undef: :replace, replace: "?")
end

def start(event, id, payload)

def start(event, id, payload)
  return unless start_event?(payload[:sql])
  connection_id = extract_connection_id(payload)
  Isolator.incr_transactions!(connection_id)
end

def start_event?(sql)

def start_event?(sql)
  START_PATTERN.match?(sanitize_query(sql))
end