# ==== Purpose ====
#
# Test verifies that when applier thread tries to access 'variable_name' of
# INFORMATION_SCHEMA.SESSION_VARIABLES table through triggers it successfully
# retrieves all the session variables.
#
# ==== Implementation ====
#
# Steps:
#    0 - Create two tables t1 and t2.
#    1 - Create a trigger such that it reads the names of all session variables
#        from INFORMATION_SCHEMA.SESSION_VARIABLES table and populates one of the
#        tables.
#    2 - Do a DML on master and wait for it to be replicated and ensure that
#        slave is in sync with master and it is up and running.
#
# ==== References ====
#
# MDEV-14784: Slave crashes in show_status_array upon running a trigger with
# select from I_S

--source include/master-slave.inc
--source include/have_binlog_format_mixed.inc
--enable_connect_log
CREATE USER test_user@localhost;
SET PASSWORD FOR test_user@localhost = password('PWD');
GRANT ALL ON *.* TO test_user@localhost WITH GRANT OPTION;
connect(conn_test,localhost,test_user,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK);

--connection conn_test
CREATE TABLE t1 (f1 INT);
CREATE TABLE t2 (f2 VARCHAR(64));
CREATE TRIGGER tr_before BEFORE INSERT ON t1 FOR EACH ROW INSERT INTO t2 SELECT variable_name FROM INFORMATION_SCHEMA.SESSION_VARIABLES;
CREATE DEFINER='root'@'localhost' TRIGGER tr_after AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 SELECT variable_name FROM INFORMATION_SCHEMA.SESSION_VARIABLES;

INSERT INTO t1 VALUES (1);
--disable_connect_log
# Cleanup
--connection master
DROP USER 'test_user'@'localhost';
DROP TABLE t1, t2;
--source include/rpl_end.inc
