BEGIN DECLARE v_output LONGTEXT DEFAULT '{}'; DECLARE v_msg_text TEXT DEFAULT ''; DECLARE v_signal_msg TEXT DEFAULT ''; DECLARE v_mysql_errno INT; DECLARE v_max_output_len BIGINT; DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 v_msg_text = MESSAGE_TEXT, v_mysql_errno = MYSQL_ERRNO;  IF v_mysql_errno = 1260 THEN SET v_signal_msg = CONCAT('{ "error": "Trx info truncated: ', v_msg_text, '" }'); ELSE SET v_signal_msg = CONCAT('{ "error": "', v_msg_text, '" }'); END IF;  RETURN v_signal_msg; END;  IF (@sys.ps_thread_trx_info.max_length IS NULL) THEN SET @sys.ps_thread_trx_info.max_length = sys.sys_get_config('ps_thread_trx_info.max_length', 65535); END IF;  IF (@sys.ps_thread_trx_info.max_length != @@session.group_concat_max_len) THEN SET @old_group_concat_max_len = @@session.group_concat_max_len; SET v_max_output_len = (@sys.ps_thread_trx_info.max_length - 5); SET SESSION group_concat_max_len = v_max_output_len; END IF;  SET v_output = ( SELECT CONCAT('[', IFNULL(GROUP_CONCAT(trx_info ORDER BY event_id), ''), '
]') AS trx_info FROM (SELECT trxi.thread_id,  trxi.event_id, GROUP_CONCAT( IFNULL( CONCAT('
  {
', '    "time": "', IFNULL(sys.format_time(trxi.timer_wait), ''), '",
', '    "state": "', IFNULL(trxi.state, ''), '",
', '    "mode": "', IFNULL(trxi.access_mode, ''), '",
', '    "autocommitted": "', IFNULL(trxi.autocommit, ''), '",
', '    "gtid": "', IFNULL(trxi.gtid, ''), '",
', '    "isolation": "', IFNULL(trxi.isolation_level, ''), '",
', '    "statements_executed": [', IFNULL(s.stmts, ''), IF(s.stmts IS NULL, ' ]
', '
    ]
'), '  }' ),  '')  ORDER BY event_id) AS trx_info  FROM ( (SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level FROM performance_schema.events_transactions_current WHERE thread_id = in_thread_id AND end_event_id IS NULL) UNION (SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level FROM performance_schema.events_transactions_history WHERE thread_id = in_thread_id) ) AS trxi LEFT JOIN (SELECT thread_id, nesting_event_id, GROUP_CONCAT( IFNULL( CONCAT('
      {
', '        "sql_text": "', IFNULL(sys.format_statement(REPLACE(sql_text, '\', '\\')), ''), '",
', '        "time": "', IFNULL(sys.format_time(timer_wait), ''), '",
', '        "schema": "', IFNULL(current_schema, ''), '",
', '        "rows_examined": ', IFNULL(rows_examined, ''), ',
', '        "rows_affected": ', IFNULL(rows_affected, ''), ',
', '        "rows_sent": ', IFNULL(rows_sent, ''), ',
', '        "tmp_tables": ', IFNULL(created_tmp_tables, ''), ',
', '        "tmp_disk_tables": ', IFNULL(created_tmp_disk_tables, ''), ',
', '        "sort_rows": ', IFNULL(sort_rows, ''), ',
', '        "sort_merge_passes": ', IFNULL(sort_merge_passes, ''), '
', '      }'), '') ORDER BY event_id) AS stmts FROM performance_schema.events_statements_history WHERE sql_text IS NOT NULL AND thread_id = in_thread_id GROUP BY thread_id, nesting_event_id ) AS s  ON trxi.thread_id = s.thread_id  AND trxi.event_id = s.nesting_event_id WHERE trxi.thread_id = in_thread_id GROUP BY trxi.thread_id, trxi.event_id ) trxs GROUP BY thread_id );  IF (@old_group_concat_max_len IS NOT NULL) THEN SET SESSION group_concat_max_len = @old_group_concat_max_len; END IF;  RETURN v_output; END