#
--source include/have_debug_sync.inc
--source include/not_embedded.inc

# Save the initial number of concurrent sessions.
--source include/count_sessions.inc

--echo #
--echo # Bug#18591145 - SOME MONOTONICALLY INCREASING STATUS VARIABLES DECREASES UNEXPECTEDLY
--echo #

--enable_connect_log
show variables like "show_COMPATIBILITY_56";
let $compatibility_mode=`select @@global.show_compatibility_56`;

# Information Schema will work only server is running in 5.6 compatiability
# mode.  Else information_schema will return empty set.
set global SHOW_COMPATIBILITY_56 = 1;

CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(64), val VARCHAR(1024));
--echo # Insert 1 tuple to increment com_insert status.
INSERT INTO t1(name, val) VALUES ('dummy', 0);

connect (con1, localhost, root,,);
SET DEBUG_SYNC='before_preparing_global_status_array SIGNAL change_user WAIT_FOR continue';
SET DEBUG_SYNC='after_preparing_global_status_array SIGNAL continue_change_user';
--SEND INSERT INTO t1(name, val) SELECT * FROM INFORMATION_SCHEMA.global_status WHERE variable_name='com_insert';

CONNECTION default;
SET DEBUG_SYNC='now WAIT_FOR change_user';
SET DEBUG_SYNC='thd_cleanup_start SIGNAL continue WAIT_FOR continue_change_user';
--change_user root,,test

CONNECTION con1;
--REAP

SET DEBUG_SYNC='RESET';
CONNECTION default;
INSERT INTO t1(name, val)
  SELECT * FROM INFORMATION_SCHEMA.global_status WHERE variable_name='com_insert';

--echo # With fix, difference of com_insert status should be "0" here.
SELECT (SELECT val FROM t1 WHERE id = 2) - (SELECT val FROM t1 WHERE id = 3);

--echo # Testing the same scenario with performance_schema.
# Make sure we are not running in 5.6 compatiability mode.  Else
# performance_schema will return empty set.
set global SHOW_COMPATIBILITY_56 = 0;
truncate t1;

--echo # Insert 1 tuple to increment com_insert status.
INSERT INTO t1(name, val) VALUES ('dummy', 0);

CONNECTION con1;
SET DEBUG_SYNC='before_materialize_global_status_array SIGNAL change_user WAIT_FOR continue';
SET DEBUG_SYNC='after_materialize_global_status_array SIGNAL continue_change_user';
--SEND INSERT INTO t1(name, val) SELECT * FROM performance_schema.global_status WHERE variable_name='Handler_commit';

CONNECTION default;
SET DEBUG_SYNC='now WAIT_FOR change_user';
SET DEBUG_SYNC='thd_cleanup_start SIGNAL continue WAIT_FOR continue_change_user';
--change_user root,,test

CONNECTION con1;
--REAP

SET DEBUG_SYNC='RESET';
CONNECTION default;
INSERT INTO t1(name, val) SELECT * FROM performance_schema.global_status WHERE variable_name='Handler_commit';

--echo # With fix, Handler_commit status should be 1 (select insert during switch user).
SELECT (SELECT val FROM t1 WHERE id = 3) - (SELECT val FROM t1 WHERE id = 2);

# Cleanup
eval set global SHOW_COMPATIBILITY_56=$compatibility_mode;
DISCONNECT con1;
DROP TABLE t1;

--disable_connect_log


--echo #
--echo # Bug#29836204:  P_S TABLE ACCESS HANGS WHILE IN LOCK TABLES MODE
--echo #

SET @saved_show_compatibility_56= @@global.show_compatibility_56;
--echo # Ensures that the P_S is used for the SHOW command.
SET GLOBAL show_compatibility_56= OFF;
CREATE TABLE t1(fld1 int) ENGINE=MYISAM;
LOCK TABLE t1 WRITE;
ALTER TABLE t1 DISABLE KEYS;

--echo # Without patch, the SHOW command hangs.
SHOW SESSION VARIABLES LIKE 'FOREIGN_KEY_CHECKS';

--echo # Wihout patch, the SELECT from P_S hangs.
SELECT * FROM performance_schema.global_variables WHERE variable_name="read_only";

--echo # Test added for coverage (Querying from I_S)
SET GLOBAL show_compatibility_56= @saved_show_compatibility_56;
SHOW SESSION VARIABLES LIKE 'FOREIGN_KEY_CHECKS';

--echo # Clean up.
UNLOCK TABLES;
DROP TABLE t1;


# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc
