# Setup
--disable_warnings
DROP TABLE IF EXISTS test.t1;
--enable_warnings
CREATE TABLE test.t1(id INT);

# Test one insert inside transaction

START TRANSACTION;
INSERT INTO test.t1 VALUES (1);
COMMIT;

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

# Test multiple inserts inside transaction

START TRANSACTION;
INSERT INTO test.t1 VALUES (1);
INSERT INTO test.t1 VALUES (2);
INSERT INTO test.t1 VALUES (3);
COMMIT;

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

# Test multi-value insert inside transaction

START TRANSACTION;
INSERT INTO test.t1 VALUES (1), (2), (3);
COMMIT;

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

# Test non-transaction inserts

INSERT INTO test.t1 VALUES (1);

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

INSERT INTO test.t1 VALUES (1);
INSERT INTO test.t1 VALUES (2);
INSERT INTO test.t1 VALUES (3);

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

# Test different tables in inserts inside transactions

--disable_warnings
DROP TABLE IF EXISTS test.t2;
--enable_warnings
CREATE TABLE test.t2(id int);

START TRANSACTION;
INSERT INTO test.t1 VALUES (1);
--disable_abort_on_error
INSERT INTO test.t2 VALUES (1);
--enable_abort_on_error
COMMIT;

SELECT COUNT(*) FROM test.t2;
DROP TABLE test.t2;

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

# Test inserts to different tables with selects between them inside a transaction

CREATE TABLE test.t2(id int);

START TRANSACTION;
INSERT INTO test.t1 VALUES (1);
SELECT 1;
INSERT INTO test.t2 VALUES (1);
COMMIT;

SELECT COUNT(*) FROM test.t2;
DROP TABLE test.t2;

SHOW STATUS LIKE 'COM_INSERT';
SHOW STATUS LIKE 'COM_LOAD';
SELECT COUNT(*) FROM test.t1;
DELETE FROM test.t1;
FLUSH STATUS;

# Cleanup
DROP TABLE test.t1;
