config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/perfschema/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/perfschema/t/transaction.test

############# suite/perfschema/t/transaction.test ####################
#                                                                    #
# Test processing of transaction events by the Performance Schema,   #
# including explicit/implicit transactions, access modes, isolation  #
# levels, statement counts and state transitions.                    #
#                                                                    #
#                                                                    #
######################################################################

--source include/have_perfschema.inc
--source include/not_embedded.inc
--source include/have_innodb.inc
--source include/no_protocol.inc
--disable_query_log
--source ../include/transaction_setup.inc
--enable_query_log

--echo
--echo ========================================================================
--echo STEP 1 - SETUP
--echo ========================================================================

--echo
--echo # Control thread
--echo
--connection default
SET SESSION AUTOCOMMIT= 1;
eval $get_thread_id;
let $default_thread_id= `SELECT @my_thread_id`;

--echo
--echo # Connection 1
--echo
connect(con1, localhost, root,,);
--disable_query_log
eval $get_thread_id;
let $con1_thread_id= `SELECT @my_thread_id`;
--enable_query_log
SET SESSION AUTOCOMMIT= 0;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE;

--disable_parsing
--echo
--echo # Connection 2
--echo
connect(con2, localhost, root,,);
--disable_query_log
eval $get_thread_id;
let $con2_thread_id= `SELECT @my_thread_id`;
--enable_query_log
SET SESSION AUTOCOMMIT= 0;
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ WRITE;
--enable_parsing

--connection default
--disable_query_log
eval SET @con1_thread_id= $con1_thread_id;
#eval SET @con2_thread_id= $con2_thread_id;
--enable_query_log

--echo
--echo # Create test tables, one transactional and one non-transactional
--echo
--connection default

--disable_warnings
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS nt1;
--enable_warnings
CREATE TABLE t1 (s1 int, s2 varchar(64)) ENGINE=INNODB;
CREATE TABLE nt1 (s1 int, s2 varchar(64)) ENGINE=MYISAM;

--echo
--echo # Disable all events from the control thread
--echo
--disable_query_log
UPDATE performance_schema.threads
  SET instrumented='NO' WHERE processlist_id = CONNECTION_ID();
--enable_query_log

--echo
--echo # Clear transaction tables
--echo
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 2 - BASIC TRANSACTION
--echo ========================================================================
--echo
--connection con1
SELECT @@global.tx_isolation;
SELECT @@global.autocommit;
SELECT @@global.binlog_format;
SELECT @@tx_isolation;
SELECT @@autocommit;
SELECT @@binlog_format;

--echo
--echo # STEP 2.1 - START/COMMIT
--echo
START TRANSACTION;
INSERT INTO t1 VALUES (101, 'COMMITTED');
COMMIT;

--echo
--echo # STEP 2.2 - ROLLBACK
--echo
START TRANSACTION;
INSERT INTO t1 VALUES (102, 'ROLLED BACK');
ROLLBACK;

--echo
--echo ## Expect 1 committed and 1 rolled back transaction
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED',   0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo # STEP 2.3 - COMMIT AND CHAIN
--echo
--connection con1
START TRANSACTION; 
INSERT INTO t1 VALUES (103, 'COMMIT AND CHAIN');
COMMIT AND CHAIN;
INSERT INTO t1 VALUES (104, 'COMMIT AND CHAIN');
COMMIT;

--echo
--echo ## Expect 2 committed transactions
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 2);
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 3 - ISOLATION LEVEL
--echo ========================================================================
--echo
--echo connection con1
--connection con1
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
START TRANSACTION;
INSERT INTO t1 VALUES (301, 'SERIALIZABLE');
COMMIT;

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
INSERT INTO t1 VALUES (302, 'REPEATABLE READ');
COMMIT;

## NOTE - InnoDB requires binlog_format = ROW for READ COMMITTED/UNCOMMITTED
SELECT @@binlog_format INTO @binlog_save;
SET SESSION BINLOG_FORMAT=ROW;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
INSERT INTO t1 VALUES (303, 'READ COMMITTED');
COMMIT;

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
START TRANSACTION;
INSERT INTO t1 VALUES (304, 'READ UNCOMMITTED');
COMMIT;

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET binlog_format= @binlog_save;

--echo
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'SERIALIZABLE', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'READ COMMITTED', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', 'READ UNCOMMITTED', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 4 - ACCESS MODE
--echo ========================================================================
--echo #
--echo # STEP 4.1 - READ ONLY, TIMING ENABLED
--echo #
--echo
--echo connection con1
--connection con1
SET SESSION TRANSACTION READ WRITE;
START TRANSACTION;
INSERT INTO t1 VALUES (410, 'READ ONLY');
INSERT INTO t1 VALUES (411, 'READ ONLY');
INSERT INTO t1 VALUES (412, 'READ ONLY');
INSERT INTO t1 VALUES (413, 'READ ONLY');
COMMIT;

SET SESSION TRANSACTION READ ONLY;
START TRANSACTION;
SELECT * FROM t1 ORDER BY s1;
COMMIT;

--echo
--echo ## Expect 1 read only, committed transaction in events_transactions_history
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ ONLY', 'REPEATABLE READ', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo #
--echo # STEP 4.2 - READ ONLY, TIMING DISABLED
--echo #
--echo
--echo ## Disable timing stats for 'transaction'
UPDATE performance_schema.setup_instruments SET timed = 'NO' WHERE name = 'transaction';
--echo
TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;

--echo connection con1
--connection con1
START TRANSACTION;
SELECT * FROM t1 ORDER BY s1;
COMMIT;
--echo
SET SESSION TRANSACTION READ WRITE;

--connection default
--echo
--echo ## Expect 1 event, 0 stats
SELECT * FROM performance_schema.events_transactions_summary_global_by_event_name;
--echo
--echo ## Restore setup_instruments
UPDATE performance_schema.setup_instruments SET enabled = 'YES' WHERE name = 'transaction';

--echo
--echo ========================================================================
--echo # STEP 5 - IMPLICIT START
--echo ========================================================================
--echo # When AUTOCOMMIT is disabled, the first statement following a committed
--echo # transaction marks the start of a new transaction. Subsequent statements will
--echo # be part of the transaction until it is committed.
--echo
--connection con1
SET SESSION AUTOCOMMIT = 0;
INSERT INTO t1 VALUES (501, 'IMPLICIT START');

--echo
--echo ## Expect 1 active transaction in events_transactions_current
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

--connection con1
INSERT INTO t1 VALUES (502, 'IMPLICIT START');
COMMIT;

--echo
--echo ## Expect one committed transaction in events_transactions_current and history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 6 - IMPLICIT COMMIT (DDL, ETC)
--echo ========================================================================
--echo # Transactions are implicitly ended by DDL statements, locking statements
--echo # and server administration commands.
--echo
--connection con1
SET SESSION AUTOCOMMIT = 0;
INSERT INTO t1 VALUES (601, 'IMPLICIT COMMIT');

--echo
--echo ## Expect one active transaction in events_transactions_current, zero events in history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', 'NO', 0, 0, 0, 0);

--connection con1
INSERT INTO t1 VALUES (602, 'IMPLICIT COMMIT');

--echo ## Issue a DDL statement to force a commmit
CREATE TABLE t2 (s1 INT, s2 VARCHAR(64)) ENGINE=INNODB;

--echo
--echo ## Expect 0 active transactions, 1 committed transaction
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE',    0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 0);
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();
DROP TABLE test.t2;

--echo
--echo ========================================================================
--echo STEP 7 - XA TRANSACTIONS
--echo ========================================================================
--echo #
--echo # STEP 7.1 - XA START
--echo #
--connection con1
XA START 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;

--echo
--echo ## Expect 1 active XA transaction, state ACTIVE
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'ACTIVE', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

--echo
--echo # STEP 7.2 - XA END
--echo
--connection con1
INSERT INTO t1 VALUES (701, 'XA');
XA END 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;

--echo
--echo ## Expect 1 active XA transaction, state IDLE
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'IDLE', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

--echo
--echo #
--echo # STEP 7.3 - XA PREPARE
--echo #
--connection con1
XA PREPARE 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;

--echo
--echo ## Expect 1 active XA transaction, state PREPARED
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'PREPARED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

--echo
--echo #
--echo # STEP 7.4 - XA COMMIT
--echo #
--connection con1
XA COMMIT 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 1234567890;

--echo
--echo ## Expect 1 committed XA transaction, state COMMITTED in current and history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'XA_CON1_GTRID_001', 'XA_CON1_BQUAL_001', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

CALL clear_transaction_tables();

--echo
--echo #
--echo # STEP 7.5 - XA ROLLBACK
--echo #
--connection con1
XA START 'XA_CON1_002';
INSERT INTO t1 VALUES (702, 'XA');
XA END 'XA_CON1_002';
XA PREPARE 'XA_CON1_002';

--echo
--echo ## Expect 1 active XA transaction, state PREPARED
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, 'XA_CON1_002', '', 'PREPARED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

--connection con1
XA ROLLBACK 'XA_CON1_002';

--echo
--echo ## Expect 1 XA transaction, state ROLLBACK ONLY in current and history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, 'XA_CON1_002', '', 'ROLLBACK ONLY', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, 'XA_CON1_002', '', 'ROLLBACK ONLY', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();
SELECT * FROM performance_schema.events_transactions_current ORDER BY event_id;

--echo #
--echo # STEP 7.6 - XA TRANSACTION - LONG GTRID AND BQUAL
--echo #
--connection con1
XA START   'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
INSERT INTO t1 VALUES (703, 'XA LONG');
XA END     'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
XA PREPARE 'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;
XA COMMIT  'GTRID_6789012345678901234567890123456789012345678901234567890123','BQUAL_6789012345678901234567890123456789012345678901234567890123',1234567890;

--echo
--echo ## Expect 1 committed XA transaction, state COMMITTED in current and history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', 'BQUAL_6789012345678901234567890123456789012345678901234567890123', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', 'BQUAL_6789012345678901234567890123456789012345678901234567890123', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo #
--echo # STEP 7.7 - XA TRANSACTION - LONG GTRID AND BINARY BQUAL
--echo #
--connection con1
XA START   'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
INSERT INTO t1 VALUES (704, 'XA LONG/BINARY');
XA END     'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
XA PREPARE 'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
XA COMMIT  'GTRID_6789012345678901234567890123456789012345678901234567890123',0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233,1234567890;
--echo
--echo ## Expect 1 committed XA transaction, state COMMITTED in current and history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', '0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 1234567890, 'GTRID_6789012345678901234567890123456789012345678901234567890123', '0x425155414C5FA5A53839303132333435363738393031323334353637383930313233343536373839303132333435363738393031323334353637383930313233', 'COMMITTED', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 8 - TRANSACTIONAL AND NON-TRANSACTIONAL TABLES
--echo ========================================================================
--echo

## Statements that work with non-transactional engines have no effect on the
## transaction state of the connection. For implicit transactions,
## the transaction event begins with the first statement that uses a
## transactional engine. This means that statements operating exclusively on
## non-transactional tables will be ignored, even following START TRANSACTION.

--connection con1
SET SESSION AUTOCOMMIT = 0;
SELECT * FROM performance_schema.events_transactions_current ORDER BY event_id;

--echo
--echo #
--echo # STEP 8.1 - UPDATE NON-TRANSACTIONAL TABLE
--echo #
INSERT INTO nt1 VALUES (801, 'NON-TRANSACTIONAL');

--echo
--echo ## Expect 0 transactions in events_transactions_current
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);

--connection con1
COMMIT;

--echo
--echo ## Expect 0 transactions in events_transactions_history
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);

--echo
--echo #
--echo # STEP 8.2 - UPDATE TRANSACTIONAL AND NON-TRANSACTIONAL TABLES
--echo #
--echo
--echo ## First non-transactional...
--echo
--connection con1
INSERT INTO nt1 VALUES (802, 'NON-TRANSACTIONAL');

--echo
--echo ## Expect 0 transactions in events_transactions_current
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);

--echo
--echo ## Now transactional. Transaction should be started.
--connection con1
INSERT INTO t1 VALUES (802, 'TRANSACTIONAL');

--echo
--echo ## Expect 1 transaction in events_transactions_current
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

## Commit
--echo
--connection con1
COMMIT;

--echo
--echo ## Expect 1 committed transaction in events_transactions_current and history
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 9 - SAVEPOINTS
--echo ========================================================================
--echo #
--echo # STEP 9.1 - SAVEPOINT 1
--echo #
--connection con1
START TRANSACTION;
INSERT INTO t1 VALUES (901, 'SAVEPOINT');
SAVEPOINT SVP001;

--echo
--echo ## Expect 1 active transaction with 1 savepoint
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 1, 0, 0, 1);

--echo
--echo #
--echo # STEP 9.2 - SAVEPOINTS 2 and 3
--echo #
--connection con1
INSERT INTO t1 VALUES (902, 'SAVEPOINT');
SAVEPOINT SVP002;
INSERT INTO t1 VALUES (903, 'SAVEPOINT');
SAVEPOINT SVP003;
INSERT INTO t1 VALUES (904, 'SAVEPOINT');
SELECT COUNT(*) FROM t1 WHERE s1 > 900;

--echo
--echo #
--echo # STEP 9.3 - ROLLBACK TO SAVEPOINT 2
--echo #
--connection con1
ROLLBACK TO SVP002;

--echo
--echo ## Expect 1 active transaction with 3 savepoints, 1 rollback to savepoint
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 0, 1);

--echo
--echo #
--echo # STEP 9.4 - RELEASE SAVEPOINT 1
--echo #
--connection con1
RELEASE SAVEPOINT SVP001;

--echo
--echo ## Expect 1 active transaction with 3 savepoints, 1 rollback to savepoint, 1 release savepoint
--connection default
CALL transaction_verifier(0, @con1_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 1, 1);

--echo #
--echo # STEP 9.5 - COMMIT
--echo #
--connection con1
COMMIT;

--echo
--echo ## Expect 1 committed transaction with 3 savepoints, 1 rollback to savepoint, 1 release savepoint
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', 'READ WRITE', '', 'NO', 3, 1, 1, 1);
CALL clear_transaction_tables();

--echo
--echo ========================================================================
--echo # STEP 10 - GTIDs
--echo ========================================================================
--echo GTIDs are tested in transaction_gtid.test.

--echo
--echo ========================================================================
--echo # STEP 11 - MISCELLANY
--echo ========================================================================
--echo #
--echo # STEP 11.1 - TRUNCATE DURING ACTIVE TRANSACTION
--echo #
--echo
--echo # Verify that truncating events_transactions_current during an active transaction
--echo # does not leave an orphaned transaction event, and that the row index to
--echo # events_transactions_history is reset to 0.
--echo
--connection con1
START TRANSACTION;
INSERT INTO t1 VALUES (1110, 'INSERT 1110');
--connection default
TRUNCATE performance_schema.events_transactions_current;
--connection con1
--echo
COMMIT;
--echo
START TRANSACTION;
INSERT INTO t1 VALUES (1111, 'INSERT 1111');
COMMIT;

--echo
--echo ## Expect 1 transaction for connection 1
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', '', '', '', 0, 0, 0, 1);
CALL clear_transaction_tables();

--echo
--echo #
--echo # STEP 11.2 - DISABLE THREAD INSTRUMENTATION
--echo #
--connection default
UPDATE performance_schema.setup_consumers
  SET enabled = 'NO'
  WHERE name = 'thread_instrumentation';
--echo
TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;

--connection con1
--echo
START TRANSACTION;
INSERT INTO t1 VALUES (1120, 'INSERT 1120');
COMMIT;

--connection default
--echo
--echo ## Expect 1 event with non-zero summary stats
--replace_column 3 sum_timer_wait 4 min_timer_wait 5 avg_timer_wait
SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, COUNT_READ_WRITE
  FROM performance_schema.events_transactions_summary_global_by_event_name
  WHERE count_star = 1 and sum_timer_wait != 0;

--echo
--echo ## Disable timing stats for 'transaction'
UPDATE performance_schema.setup_instruments SET timed = 'NO' WHERE name = 'transaction';
--echo
TRUNCATE performance_schema.events_transactions_summary_global_by_event_name;

--connection default
--echo
START TRANSACTION;
INSERT INTO t1 VALUES (1121, 'INSERT 1121');
COMMIT;

--connection default
--echo
--echo ## Expect 1 event, 0 stats
SELECT * FROM performance_schema.events_transactions_summary_global_by_event_name;

--echo
--echo ## Restore setup_consumers and setup_instruments
UPDATE performance_schema.setup_consumers SET enabled = 'YES' WHERE name = 'thread_instrumentation';
UPDATE performance_schema.setup_instruments SET enabled = 'YES' WHERE name = 'transaction';
--echo
DELETE FROM t1;
CALL clear_history();

--echo
--echo #
--echo # STEP 11.3 - STATEMENT ROLLBACK - AUTOCOMMIT OFF - BINLOG FORMAT 'STATEMENT'
--echo #
--connection con1
SET SESSION binlog_format = STATEMENT;
SET SESSION AUTOCOMMIT = 0;

# A transaction with a rolled back statement should not show as rolled back.
#
# Force a statement rollback by attempting to update a transactional table
# and a non-replicatable table with binlog_format = STATEMENT.

--echo
START TRANSACTION;
INSERT INTO t1 VALUES (1130, 'INSERT 1130');
--echo
--echo ## Expect binlog statement mode error
--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
UPDATE t1, performance_schema.setup_instruments pfs
  SET t1.s1 = 1, pfs.timed = 'NO';
--echo
COMMIT;
--echo
SET SESSION AUTOCOMMIT = 1;

--echo
--echo ## Expect 1 committed transaction
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'COMMITTED', 0, '', '', '', '', '', '', 'NO', 0, 0, 0, 1);
--echo
DELETE FROM t1;
CALL clear_history();

--echo
--echo #
--echo # STEP 11.4 - STATEMENT ROLLBACK - AUTOCOMMIT ON - BINLOG FORMAT 'STATEMENT'
--echo #
--connection con1
SET SESSION binlog_format = STATEMENT;
SET SESSION AUTOCOMMIT = 1;

# A rolled back autocommit statement should be recorded as a rolled back transaction
#
# Force a statement rollback by attempting to update a transactional table
# and a non-replicatable table with binlog_format = STATEMENT.
--echo
--echo ## Expect binlog statement mode error
--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
UPDATE t1, performance_schema.setup_instruments pfs
  SET t1.s1 = 1, pfs.timed = 'NO';

--echo
--echo ## Expect 1 rolled back transaction
--connection default
CALL transaction_verifier(1, @con1_thread_id, 'transaction', 'ROLLED BACK', 0, '', '', '', '', '', '', 'YES', 0, 0, 0, 1);
CALL clear_history();

--disable_parsing
# TODO: Add wait timer 
--echo
--echo #
--echo # STEP 11.5 - DROPPED CONNECTION DURING TRANSACTION
--echo #
--connection con2
START TRANSACTION;
INSERT INTO t1 VALUES (1150, 'DROP CONNECTION');
--echo
--echo ## Expect 1 active transaction for connection 2
--connection default
CALL transaction_verifier(0, @con2_thread_id, 'transaction', 'ACTIVE', 0, '', '', '', '', 'READ WRITE', '', 'NO', 0, 0, 0, 1);

--echo
--echo ## Drop connection
--connection con2
--disconnect con2
--source include/wait_until_disconnected.inc
--connection default

--echo
--echo ## Expect 0 transactions for connection 2
CALL transaction_verifier(0, @con2_thread_id, '', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);
CALL transaction_verifier(1, @con2_thread_id, '', '', 0, '', '', '', '', '', '', '', 0, 0, 0, 0);
CALL clear_transaction_tables();

--enable_parsing

--echo
--echo ========================================================================
--echo # CLEAN UP
--echo ========================================================================
--echo

--disconnect con1
##--disconnect con2

--connection default
DROP TABLE t1;
DROP TABLE nt1;

--source ../include/transaction_cleanup.inc

Man Man