From df09ddaced71af470a23f882dc03621490810e1b Mon Sep 17 00:00:00 2001 From: Patrick Crews Date: Tue, 24 Feb 2009 16:20:00 +0200 Subject: [PATCH] Bug#40178: Test main.completion_type_func does not clean up / needs to be rewritten Revised the test to include a test of completion_type = 1 as well as making the test more readable / worthwhile Removed the master.opt file as it was redundant / unnecessary. mysql-test/suite/sys_vars/t/completion_type_func-master.opt: Removed as redundant. Test uses include/have_innodb.inc. --- .../sys_vars/r/completion_type_func.result | 161 +++++++++++++++--- .../t/completion_type_func-master.opt | 1 - .../sys_vars/t/completion_type_func.test | 144 ++++++++++++---- 3 files changed, 243 insertions(+), 63 deletions(-) delete mode 100644 mysql-test/suite/sys_vars/t/completion_type_func-master.opt diff --git a/mysql-test/suite/sys_vars/r/completion_type_func.result b/mysql-test/suite/sys_vars/r/completion_type_func.result index daee738c10d..f3ddcd287b6 100644 --- a/mysql-test/suite/sys_vars/r/completion_type_func.result +++ b/mysql-test/suite/sys_vars/r/completion_type_func.result @@ -2,76 +2,187 @@ DROP TABLE IF EXISTS t1; ## Creating new table ## CREATE TABLE t1 ( -id INT NOT NULL AUTO_INCREMENT, +id INT NOT NULL, PRIMARY KEY (id), name VARCHAR(30) ) ENGINE = INNODB; -'#--------------------FN_DYNVARS_017_01-------------------------#' -## Creating new connection ## -INSERT INTO t1(name) VALUES('Record_1'); -SET @@autocommit = 0; +## Creating new connections test_con1, test_con2 ## +######################################################### +# Setting initial value of completion_type to zero # +######################################################### +INSERT INTO t1 VALUES(1,'Record_1'); SELECT * FROM t1; id name 1 Record_1 ## Setting value of variable to 0 ## SET @@session.completion_type = 0; ## Here commit & rollback should work normally ## +## test commit ## START TRANSACTION; -SELECT * FROM t1; -id name -1 Record_1 -INSERT INTO t1(name) VALUES('Record_2'); -INSERT INTO t1(name) VALUES('Record_3'); +INSERT INTO t1 VALUES(2,'Record_2'); +INSERT INTO t1 VALUES(3,'Record_3'); SELECT * FROM t1; id name 1 Record_1 2 Record_2 3 Record_3 -DELETE FROM t1 WHERE id = 2; +Switching to connection test_con1 +## Don't expect to see id's 2 and 3 in the table w/o COMMIT ## SELECT * FROM t1; id name 1 Record_1 +Switching to default connection +COMMIT; +## test rollback ## +START TRANSACTION; +INSERT INTO t1 VALUES(4,'Record_4'); +INSERT INTO t1 VALUES(5,'Record_5'); +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 3 Record_3 +4 Record_4 +5 Record_5 +Switching to connection test_con1 +## Don't expect to see id's 4 and 5 here ## +## Expect to see 3, Record_3 ## +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +Switching to connection default; +ROLLBACK; +## Don't expect to see id's 4 and 5 now ## +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 + +######################################################### +# Setting initial value of completion_type to one # +######################################################### +Switching to connection test_con1; +SET @@session.completion_type = 1; START TRANSACTION; SELECT * FROM t1; id name 1 Record_1 +2 Record_2 3 Record_3 -INSERT INTO t1(name) VALUES('Record_4'); -INSERT INTO t1(name) VALUES('Record_5'); +INSERT INTO t1 VALUES(6,'Record_6'); +INSERT INTO t1 VALUES(7,'Record_7'); COMMIT; -'#--------------------FN_DYNVARS_017_02-------------------------#' +## Expect to immediately have a new transaction ## +INSERT INTO t1 VALUES(8,'Record_8'); +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +6 Record_6 +7 Record_7 +8 Record_8 +switching to test_con2 +## Do not expect to see 8, Record_8 as no COMMIT has occurred ## +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +6 Record_6 +7 Record_7 +switch to connection test_con1 +## Testing ROLLBACK behavior +START TRANSACTION; +INSERT INTO t1 VALUES(9, 'Record_9'); +INSERT INTO t1 VALUES(10, 'Record_10'); +## Expect to see id's 8, 9, 10 here ## +## 8, Record_8 COMMITted with the start of this transaction ## +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +6 Record_6 +7 Record_7 +8 Record_8 +9 Record_9 +10 Record_10 +ROLLBACK; +## id's 9 and 10 are gone now due to ROLLBACK ## +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +6 Record_6 +7 Record_7 +8 Record_8 +## Expect a new transaction ## +INSERT INTO t1 VALUES(9, 'Record_9'); +Switching to connection test_con2 +## Don't expect to see 9, Record_9 due to no COMMIT yet ## +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +6 Record_6 +7 Record_7 +8 Record_8 +Switching to connection test_con1 +ROLLBACK; +## Don't expect to see 9, Record_9 +SELECT * FROM t1; +id name +1 Record_1 +2 Record_2 +3 Record_3 +6 Record_6 +7 Record_7 +8 Record_8 +######################################################### +# Setting initial value of completion_type to 2 # +######################################################### SET @@session.completion_type = 2; ## Here commit should work as COMMIT RELEASE ## START TRANSACTION; SELECT * FROM t1; id name 1 Record_1 +2 Record_2 3 Record_3 -4 Record_4 -5 Record_5 -INSERT INTO t1(name) VALUES('Record_6'); -INSERT INTO t1(name) VALUES('Record_7'); +6 Record_6 +7 Record_7 +8 Record_8 +INSERT INTO t1 VALUES(9,'Record_9'); +INSERT INTO t1 VALUES(10,'Record_10'); COMMIT; ## Inserting rows should give error here because connection should ## ## disconnect after using COMMIT ## -INSERT INTO t1(name) VALUES('Record_4'); +INSERT INTO t1 VALUES(4,'Record_4'); Got one of the listed errors -## Creating new connection test_con2 ## +switch to connection test_con2 SET @@session.completion_type = 2; ## Inserting rows and using Rollback which should Rollback & release ## START TRANSACTION; SELECT * FROM t1; id name 1 Record_1 +2 Record_2 3 Record_3 -4 Record_4 -5 Record_5 6 Record_6 7 Record_7 -INSERT INTO t1(name) VALUES('Record_8'); -INSERT INTO t1(name) VALUES('Record_9'); +8 Record_8 +9 Record_9 +10 Record_10 +INSERT INTO t1 VALUES(11,'Record_11'); +INSERT INTO t1 VALUES(12,'Record_12'); ROLLBACK; -INSERT INTO t1(name) VALUES('Record_4'); +## Expect a failure due to COMMIT/ROLLBACK AND RELEASE behavior ## +INSERT INTO t1 VALUES(4,'Record_4'); Got one of the listed errors DROP TABLE t1; diff --git a/mysql-test/suite/sys_vars/t/completion_type_func-master.opt b/mysql-test/suite/sys_vars/t/completion_type_func-master.opt deleted file mode 100644 index 627becdbfb5..00000000000 --- a/mysql-test/suite/sys_vars/t/completion_type_func-master.opt +++ /dev/null @@ -1 +0,0 @@ ---innodb diff --git a/mysql-test/suite/sys_vars/t/completion_type_func.test b/mysql-test/suite/sys_vars/t/completion_type_func.test index ed0f04c37b4..8e363ed2a7d 100644 --- a/mysql-test/suite/sys_vars/t/completion_type_func.test +++ b/mysql-test/suite/sys_vars/t/completion_type_func.test @@ -1,4 +1,4 @@ -############## mysql-test\t\completion_type_func.test ########################## +############## mysql-test/suite/sys_vars/t/completion_type_func.test ########### # # # Variable Name: completion_type # # Scope: GLOBAL & SESSION # @@ -25,84 +25,154 @@ DROP TABLE IF EXISTS t1; --enable_warnings -######################### -# Creating new table # -######################### +############################## +# Setup: Table + connections # +############################## --echo ## Creating new table ## CREATE TABLE t1 ( -id INT NOT NULL AUTO_INCREMENT, +id INT NOT NULL, PRIMARY KEY (id), name VARCHAR(30) ) ENGINE = INNODB; ---echo '#--------------------FN_DYNVARS_017_01-------------------------#' -######################################################### -# Setting initial value of completion_type to zero # -######################################################### - ---echo ## Creating new connection ## +--echo ## Creating new connections test_con1, test_con2 ## connect (test_con1,localhost,root,,); -connection test_con1; +connect (test_con2,localhost,root,,); -INSERT INTO t1(name) VALUES('Record_1'); -SET @@autocommit = 0; +connection default; + +--echo ######################################################### +--echo # Setting initial value of completion_type to zero # +--echo ######################################################### + +INSERT INTO t1 VALUES(1,'Record_1'); SELECT * FROM t1; --echo ## Setting value of variable to 0 ## SET @@session.completion_type = 0; --echo ## Here commit & rollback should work normally ## +--echo ## test commit ## START TRANSACTION; -SELECT * FROM t1; -INSERT INTO t1(name) VALUES('Record_2'); -INSERT INTO t1(name) VALUES('Record_3'); -SELECT * FROM t1; -DELETE FROM t1 WHERE id = 2; +INSERT INTO t1 VALUES(2,'Record_2'); +INSERT INTO t1 VALUES(3,'Record_3'); SELECT * FROM t1; - -START TRANSACTION; +--echo Switching to connection test_con1 +connection test_con1; +--echo ## Don't expect to see id's 2 and 3 in the table w/o COMMIT ## SELECT * FROM t1; -INSERT INTO t1(name) VALUES('Record_4'); -INSERT INTO t1(name) VALUES('Record_5'); + +--echo Switching to default connection +connection default; COMMIT; +--echo ## test rollback ## +START TRANSACTION; +INSERT INTO t1 VALUES(4,'Record_4'); +INSERT INTO t1 VALUES(5,'Record_5'); +SELECT * FROM t1; ---echo '#--------------------FN_DYNVARS_017_02-------------------------#' -######################################################### -# Setting initial value of completion_type to 2 # -######################################################### +--echo Switching to connection test_con1 +connection test_con1; +--echo ## Don't expect to see id's 4 and 5 here ## +--echo ## Expect to see 3, Record_3 ## +SELECT * FROM t1; + +--echo Switching to connection default; +connection default; + + +ROLLBACK; +--echo ## Don't expect to see id's 4 and 5 now ## +SELECT * FROM t1; + +--echo +--echo ######################################################### +--echo # Setting initial value of completion_type to one # +--echo ######################################################### + +--echo Switching to connection test_con1; +connection test_con1; +SET @@session.completion_type = 1; + +START TRANSACTION; +SELECT * FROM t1; +INSERT INTO t1 VALUES(6,'Record_6'); +INSERT INTO t1 VALUES(7,'Record_7'); +COMMIT; + +--echo ## Expect to immediately have a new transaction ## +INSERT INTO t1 VALUES(8,'Record_8'); +SELECT * FROM t1; + +connection test_con2; +--echo switching to test_con2 +--echo ## Do not expect to see 8, Record_8 as no COMMIT has occurred ## +SELECT * FROM t1; + +--echo switch to connection test_con1 +connection test_con1; + +--echo ## Testing ROLLBACK behavior +START TRANSACTION; +INSERT INTO t1 VALUES(9, 'Record_9'); +INSERT INTO t1 VALUES(10, 'Record_10'); +--echo ## Expect to see id's 8, 9, 10 here ## +--echo ## 8, Record_8 COMMITted with the start of this transaction ## +SELECT * FROM t1; +ROLLBACK; +--echo ## id's 9 and 10 are gone now due to ROLLBACK ## +SELECT * FROM t1; + +--echo ## Expect a new transaction ## +INSERT INTO t1 VALUES(9, 'Record_9'); + +--echo Switching to connection test_con2 +connection test_con2; +--echo ## Don't expect to see 9, Record_9 due to no COMMIT yet ## +SELECT * FROM t1; + +--echo Switching to connection test_con1 +connection test_con1; +ROLLBACK; +--echo ## Don't expect to see 9, Record_9 +SELECT * FROM t1; + +--echo ######################################################### +--echo # Setting initial value of completion_type to 2 # +--echo ######################################################### SET @@session.completion_type = 2; --echo ## Here commit should work as COMMIT RELEASE ## START TRANSACTION; SELECT * FROM t1; -INSERT INTO t1(name) VALUES('Record_6'); -INSERT INTO t1(name) VALUES('Record_7'); +INSERT INTO t1 VALUES(9,'Record_9'); +INSERT INTO t1 VALUES(10,'Record_10'); COMMIT; --echo ## Inserting rows should give error here because connection should ## --echo ## disconnect after using COMMIT ## ---Error 2006,2013,1053 -INSERT INTO t1(name) VALUES('Record_4'); +--Error 2006,2013,ER_SERVER_SHUTDOWN +INSERT INTO t1 VALUES(4,'Record_4'); ---echo ## Creating new connection test_con2 ## -connect (test_con2,localhost,root,,); +--echo switch to connection test_con2 connection test_con2; SET @@session.completion_type = 2; --echo ## Inserting rows and using Rollback which should Rollback & release ## START TRANSACTION; SELECT * FROM t1; -INSERT INTO t1(name) VALUES('Record_8'); -INSERT INTO t1(name) VALUES('Record_9'); +INSERT INTO t1 VALUES(11,'Record_11'); +INSERT INTO t1 VALUES(12,'Record_12'); ROLLBACK; ---Error 2006,2013,1053 -INSERT INTO t1(name) VALUES('Record_4'); +--echo ## Expect a failure due to COMMIT/ROLLBACK AND RELEASE behavior ## +--Error 2006,2013,ER_SERVER_SHUTDOWN, +INSERT INTO t1 VALUES(4,'Record_4'); connection default; disconnect test_con1;