mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Post merge fixes. In sys_vars tests suite, whenever we use LOCK TABLE WRITE, adjust to lock the subject table indirecty via a view, to ensure that there the desired lock conflict in thr_lock.c is still taking place. If locked directly in LOCK TABLES list, thr_lock.c does not get involved. Adjust the thread wait state names in information_schema.processlist.
		
			
				
	
	
		
			169 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
############## mysql-test\t\concurrent_insert_basic.test #######################
 | 
						|
#                                                                              #
 | 
						|
# Variable Name: concurrent_insert                                             #
 | 
						|
# Scope: GLOBAL                                                                #
 | 
						|
# Access Type: Dynamic                                                         #
 | 
						|
# Data Type: Boolean & Numeric                                                 #
 | 
						|
# Default Value: 1                                                             #
 | 
						|
# Valid Values: 0,1 & 2                                                        #
 | 
						|
#                                                                              #
 | 
						|
#                                                                              #
 | 
						|
# Creation Date: 2008-03-07                                                    #
 | 
						|
# Author:  Salman Rawala                                                       #
 | 
						|
#                                                                              #
 | 
						|
# Modified: HHunger 2009-02-23 Inserted a wait condition right after the       #
 | 
						|
#                              "INSERT ..record_6" to wait for the end of      #
 | 
						|
#                              the insert.                                     #
 | 
						|
#           mleich This test needs some inporovements                          #
 | 
						|
#                                                                              #
 | 
						|
# Description: Test Cases of Dynamic System Variable "concurrent_insert"       #
 | 
						|
#              that checks functionality of this variable                      #
 | 
						|
#                                                                              #
 | 
						|
# Reference:                                                                   #
 | 
						|
#    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html       #
 | 
						|
#                                                                              #
 | 
						|
################################################################################
 | 
						|
 | 
						|
--source include/not_embedded.inc
 | 
						|
 | 
						|
--disable_warnings
 | 
						|
DROP TABLE IF EXISTS t1;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
#########################
 | 
						|
#   Creating new table  #
 | 
						|
#########################
 | 
						|
 | 
						|
--echo ## Creating new table ##
 | 
						|
CREATE TABLE t1
 | 
						|
(
 | 
						|
name VARCHAR(30)
 | 
						|
);
 | 
						|
 | 
						|
--echo '#--------------------FN_DYNVARS_018_01-------------------------#'
 | 
						|
####################################################################
 | 
						|
#    Setting initial value of concurrent_insert to 1
 | 
						|
#    concurrent_insert = 1 means Enables concurrent insert
 | 
						|
#    for MyISAM tables that don't have holes
 | 
						|
####################################################################
 | 
						|
 | 
						|
SET @start_value= @@global.concurrent_insert;
 | 
						|
 | 
						|
--echo ## Setting initial value of variable to 1 ##
 | 
						|
SET @@global.concurrent_insert = 1;
 | 
						|
INSERT INTO t1(name) VALUES('Record_1');
 | 
						|
INSERT INTO t1(name) VALUES('Record_2');
 | 
						|
INSERT INTO t1(name) VALUES('Record_3');
 | 
						|
 | 
						|
--echo ## locking table ##
 | 
						|
LOCK TABLE t1 READ LOCAL;
 | 
						|
 | 
						|
--echo ## Creating new connection to insert some rows in table ##
 | 
						|
connect (test_con1,localhost,root,,);
 | 
						|
--echo connection test_con1;
 | 
						|
connection test_con1;
 | 
						|
 | 
						|
--echo ## New records should come at the end of all rows ##
 | 
						|
INSERT INTO t1(name) VALUES('Record_4');
 | 
						|
SELECT * FROM t1;
 | 
						|
 | 
						|
--echo ## unlocking tables ##
 | 
						|
--echo connection default;
 | 
						|
connection default;
 | 
						|
UNLOCK TABLES;
 | 
						|
 | 
						|
--echo ## deleting record to create hole in table ##
 | 
						|
DELETE FROM t1 WHERE name ='Record_2';
 | 
						|
 | 
						|
 | 
						|
--echo '#--------------------FN_DYNVARS_018_02-------------------------#'
 | 
						|
####################################################################
 | 
						|
#    Setting initial value of concurrent_insert to 1
 | 
						|
#    concurrent_insert = 1 and trying to insert some values
 | 
						|
#    in MyISAM tables that have holes
 | 
						|
####################################################################
 | 
						|
# lock table and connect with connection1
 | 
						|
LOCK TABLE t1 READ LOCAL;
 | 
						|
--echo connection test_con1;
 | 
						|
connection test_con1;
 | 
						|
 | 
						|
# setting value of concurrent_insert to 1
 | 
						|
SET @@global.concurrent_insert=1;
 | 
						|
 | 
						|
--echo ## send INSERT which should be blocked until unlock of the table ##
 | 
						|
send
 | 
						|
INSERT INTO t1(name) VALUES('Record_7');
 | 
						|
 | 
						|
--echo connection default;
 | 
						|
connection default;
 | 
						|
# wait until INSERT will be locked (low performance)
 | 
						|
let $wait_condition= SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST
 | 
						|
                     WHERE state= "Table lock" AND info LIKE "INSERT INTO t1%";
 | 
						|
--source include/wait_condition.inc
 | 
						|
 | 
						|
--echo ## show processlist info and state ##
 | 
						|
SELECT state,info FROM INFORMATION_SCHEMA.PROCESSLIST
 | 
						|
WHERE state= "Table lock" AND info LIKE "INSERT INTO t1%";
 | 
						|
--echo ## table contents befor UNLOCK ##
 | 
						|
SELECT * FROM t1;
 | 
						|
UNLOCK TABLES;
 | 
						|
--echo ## table contens after UNLOCK ##
 | 
						|
SELECT * FROM t1;
 | 
						|
INSERT INTO t1(name) VALUES('Record_6');
 | 
						|
let $wait_condition= SELECT COUNT(*) = 5 FROM t1;
 | 
						|
--source include/wait_condition.inc
 | 
						|
 | 
						|
--echo connection test_con1;
 | 
						|
connection test_con1;
 | 
						|
# to complete the send above^
 | 
						|
reap;
 | 
						|
SELECT * FROM t1;
 | 
						|
--echo connection default;
 | 
						|
connection default;
 | 
						|
 | 
						|
--echo '#--------------------FN_DYNVARS_018_03-------------------------#'
 | 
						|
################################################################################
 | 
						|
#    Setting value of concurrent_insert to 2 to verify values after inserting
 | 
						|
#    it into table with holes
 | 
						|
#    concurrent_insert = 2 means Enables concurrent insert
 | 
						|
#    for MyISAM tables that have holes but inserts values at the end of all rows
 | 
						|
################################################################################
 | 
						|
 | 
						|
--echo ## lock table and connect with connection1 ##
 | 
						|
LOCK TABLE t1 READ LOCAL;
 | 
						|
--echo connection test_con1;
 | 
						|
connection test_con1;
 | 
						|
--echo ## setting value of concurrent_insert to 2 ##
 | 
						|
SET @@global.concurrent_insert=2;
 | 
						|
 | 
						|
--echo ## Inserting record in table, record should go at the end of the table ##
 | 
						|
INSERT INTO t1(name) VALUES('Record_5');
 | 
						|
SELECT * FROM t1;
 | 
						|
SELECT @@concurrent_insert;
 | 
						|
 | 
						|
--echo connection default;
 | 
						|
connection default;
 | 
						|
 | 
						|
--echo ## Unlocking table ##
 | 
						|
UNLOCK TABLES;
 | 
						|
 | 
						|
SELECT * FROM t1;
 | 
						|
 | 
						|
--echo ## Inserting new row, this should go in the hole ##
 | 
						|
INSERT INTO t1(name) VALUES('Record_6');
 | 
						|
SELECT * FROM t1;
 | 
						|
 | 
						|
--echo ## connection test_con1 ##
 | 
						|
 | 
						|
DELETE FROM t1 WHERE name ='Record_3';
 | 
						|
SELECT * FROM t1;
 | 
						|
 | 
						|
--echo ## Dropping table ##
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
--echo ## Disconnecting connection ##
 | 
						|
disconnect test_con1;
 | 
						|
 | 
						|
SET @@global.concurrent_insert= @start_value;
 | 
						|
 |