mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			258 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
################################################################################
 | 
						|
#                                                                              #
 | 
						|
# Variable Name: delayed_insert_limit                                          #
 | 
						|
# Scope: GLOBAL                                                                #
 | 
						|
# Access Type: Dynamic                                                         #
 | 
						|
# Data Type: Numeric                                                           #
 | 
						|
# Default Value: 100                                                           #
 | 
						|
# Range: 1 - 4294967295                                                        #
 | 
						|
#                                                                              #
 | 
						|
#                                                                              #
 | 
						|
# Creation Date: 2008-02-25                                                    #
 | 
						|
# Author:  Sharique Abdullah                                                   #
 | 
						|
# Modified: HHunger 2009-02-26 Replaced 2 sleeps by wait conditions            #
 | 
						|
# Modified: mleich  2009-03-18 Partially reimplemented                         #
 | 
						|
#                                                                              #
 | 
						|
# Description: Test Cases of Dynamic System Variable "delayed_insert_limit"    #
 | 
						|
#              that checks behavior of this variable in the following ways     #
 | 
						|
#              * Functionality based on different values                       #
 | 
						|
#                                                                              #
 | 
						|
# Reference:                                                                   #
 | 
						|
#    http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html       #
 | 
						|
#                                                                              #
 | 
						|
################################################################################
 | 
						|
 | 
						|
--echo ** Setup **
 | 
						|
--echo
 | 
						|
#
 | 
						|
# Setup
 | 
						|
#
 | 
						|
 | 
						|
--source include/not_embedded.inc
 | 
						|
 | 
						|
--echo Creating connection con0
 | 
						|
connect (con0,localhost,root,,);
 | 
						|
let $con0_id=`SELECT CONNECTION_ID()`;
 | 
						|
--echo Creating connection con1
 | 
						|
connect (con1,localhost,root,,);
 | 
						|
let $con1_id=`SELECT CONNECTION_ID()`;
 | 
						|
 | 
						|
connection default;
 | 
						|
 | 
						|
SET @global_delayed_insert_limit = @@GLOBAL.delayed_insert_limit;
 | 
						|
 | 
						|
#
 | 
						|
# Create Table
 | 
						|
#
 | 
						|
 | 
						|
CREATE TABLE t1 (a VARCHAR(100),b VARCHAR(100),c VARCHAR(100));
 | 
						|
CREATE VIEW v1 as select * from t1;
 | 
						|
 | 
						|
--echo '#--------------------FN_DYNVARS_25_01-------------------------#'
 | 
						|
 | 
						|
# delayed_insert_limit is smaller than the number of inserted rows
 | 
						|
 | 
						|
SET GLOBAL delayed_insert_limit = 14;
 | 
						|
 | 
						|
INSERT INTO t1 VALUES('1','1','1');
 | 
						|
INSERT INTO t1 VALUES('2','1','1');
 | 
						|
INSERT INTO t1 VALUES('3','1','1');
 | 
						|
INSERT INTO t1 VALUES('4','1','1');
 | 
						|
INSERT INTO t1 VALUES('5','1','1');
 | 
						|
INSERT INTO t1 VALUES('6','1','1');
 | 
						|
 | 
						|
LOCK TABLE v1 WRITE;
 | 
						|
 | 
						|
--echo ** Connection con1 **
 | 
						|
connection con1;
 | 
						|
 | 
						|
delimiter |;
 | 
						|
send
 | 
						|
INSERT DELAYED INTO t1 VALUES('7','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('8','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('9','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('10','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('11','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('12','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('13','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('14','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('15','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('16','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('17','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('18','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('19','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('20','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('21','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('22','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('23','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('24','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('25','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('26','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('27','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('28','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('29','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('30','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('31','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('32','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('33','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('34','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('35','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('36','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('37','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('38','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('39','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('40','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('41','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('42','1','1');
 | 
						|
INSERT DELAYED INTO t1 VALUES('43','1','1');|
 | 
						|
delimiter ;|
 | 
						|
 | 
						|
--echo ** Connection con0 **
 | 
						|
connection con0;
 | 
						|
let $wait_condition=
 | 
						|
   SELECT variable_value > @@global.delayed_insert_limit
 | 
						|
   FROM information_schema.global_status
 | 
						|
   WHERE variable_name like 'Not_flushed_delayed_rows';
 | 
						|
--source include/wait_condition.inc
 | 
						|
let $my_select= SELECT COUNT(*) FROM t1;
 | 
						|
send;
 | 
						|
eval $my_select;
 | 
						|
 | 
						|
--echo ** Connection default **
 | 
						|
connection default;
 | 
						|
--echo ** Wait till con0 is blocked **
 | 
						|
let $wait_condition=
 | 
						|
   SELECT COUNT(*) = 1 FROM information_schema.processlist
 | 
						|
   WHERE state = 'Table lock' AND info = '$my_select';
 | 
						|
--source include/wait_condition.inc
 | 
						|
UNLOCK TABLES;
 | 
						|
 | 
						|
--echo ** Connection con1 **
 | 
						|
connection con1;
 | 
						|
--echo Asynchronous "reap" result
 | 
						|
reap;
 | 
						|
 | 
						|
--echo ** Connection con0 **
 | 
						|
connection con0;
 | 
						|
--echo Asynchronous "reap" result
 | 
						|
--echo The next result suffers from
 | 
						|
--echo '# Bug#35386 insert delayed inserts 1 + limit rows instead of just limit rows'
 | 
						|
#
 | 
						|
# on UNLOCK TABLES both SELECT in the con0 and delayed insert thread in the
 | 
						|
# con1 were awaken. There's no FIFO for TL_WRITE_DELAYED and TL_READ,
 | 
						|
# so either the first delayed_insert_limit rows will be inserted
 | 
						|
# before select (which will see 21 row) or select will go first (and see 6 rows)
 | 
						|
#
 | 
						|
--replace_result 6 21
 | 
						|
reap;
 | 
						|
 | 
						|
--echo ** Connection default **
 | 
						|
connection default;
 | 
						|
let $wait_condition= SELECT count(*) = 43 FROM t1;
 | 
						|
--source include/wait_condition.inc
 | 
						|
--echo Checking if the delayed insert continued afterwards
 | 
						|
SELECT COUNT(*) FROM t1;
 | 
						|
 | 
						|
DROP TABLE t1;
 | 
						|
DROP VIEW v1;
 | 
						|
 | 
						|
 | 
						|
--echo '#--------------------FN_DYNVARS_25_02-------------------------#'
 | 
						|
 | 
						|
# delayed_insert_limit is bigger than the number of inserted rows
 | 
						|
 | 
						|
CREATE TABLE t1 (a VARCHAR(100));
 | 
						|
CREATE VIEW v1 AS SELECT * FROM t1;
 | 
						|
 | 
						|
SET GLOBAL delayed_insert_limit = 20;
 | 
						|
 | 
						|
INSERT INTO t1 VALUES('1');
 | 
						|
INSERT INTO t1 VALUES('2');
 | 
						|
INSERT INTO t1 VALUES('3');
 | 
						|
INSERT INTO t1 VALUES('4');
 | 
						|
INSERT INTO t1 VALUES('5');
 | 
						|
INSERT INTO t1 VALUES('6');
 | 
						|
 | 
						|
LOCK TABLE v1 WRITE;
 | 
						|
 | 
						|
--echo ** Connection con1 **
 | 
						|
connection con1;
 | 
						|
 | 
						|
--echo Asynchronous execute
 | 
						|
delimiter |;
 | 
						|
 | 
						|
send
 | 
						|
INSERT DELAYED INTO t1 VALUES('7');
 | 
						|
INSERT DELAYED INTO t1 VALUES('8');
 | 
						|
INSERT DELAYED INTO t1 VALUES('9');
 | 
						|
INSERT DELAYED INTO t1 VALUES('10');
 | 
						|
INSERT DELAYED INTO t1 VALUES('11');
 | 
						|
INSERT DELAYED INTO t1 VALUES('12');
 | 
						|
INSERT DELAYED INTO t1 VALUES('13');
 | 
						|
INSERT DELAYED INTO t1 VALUES('14');
 | 
						|
INSERT DELAYED INTO t1 VALUES('15');
 | 
						|
INSERT DELAYED INTO t1 VALUES('16');
 | 
						|
INSERT DELAYED INTO t1 VALUES('17');
 | 
						|
INSERT DELAYED INTO t1 VALUES('18');
 | 
						|
INSERT DELAYED INTO t1 VALUES('19');
 | 
						|
INSERT DELAYED INTO t1 VALUES('20');
 | 
						|
INSERT DELAYED INTO t1 VALUES('21');
 | 
						|
INSERT DELAYED INTO t1 VALUES('22');|
 | 
						|
 | 
						|
delimiter ;|
 | 
						|
 | 
						|
--echo ** Connection con0 **
 | 
						|
connection con0;
 | 
						|
let $wait_condition=
 | 
						|
   SELECT variable_value > 0 FROM information_schema.global_status
 | 
						|
   WHERE variable_name like 'Not_flushed_delayed_rows';
 | 
						|
--source include/wait_condition.inc
 | 
						|
--echo Asynchronous execute
 | 
						|
# Due to performance and server behaveiour the test observes values between 6 and 22.
 | 
						|
# In any case the value must not be outside of that range.
 | 
						|
let $my_select= SELECT COUNT(*) BETWEEN 6 AND 22 FROM t1;
 | 
						|
send;
 | 
						|
eval $my_select;
 | 
						|
 | 
						|
--echo ** Connection default **
 | 
						|
connection default;
 | 
						|
--echo ** Wait till con0 is blocked **
 | 
						|
let $wait_condition=
 | 
						|
   SELECT COUNT(*) = 1 FROM information_schema.processlist
 | 
						|
   WHERE state = 'Table lock' AND info = '$my_select';
 | 
						|
--source include/wait_condition.inc
 | 
						|
UNLOCK TABLES;
 | 
						|
 | 
						|
--echo ** Connection con1 **
 | 
						|
connection con1;
 | 
						|
reap;
 | 
						|
 | 
						|
--echo ** Connection con0 **
 | 
						|
connection con0;
 | 
						|
--echo Asynchronous "reap" result
 | 
						|
reap;
 | 
						|
 | 
						|
--echo ** Connection default**
 | 
						|
connection default;
 | 
						|
--echo Checking if the delayed insert gives the same result afterwards
 | 
						|
eval $my_select;
 | 
						|
 | 
						|
 | 
						|
#
 | 
						|
# Cleanup
 | 
						|
#
 | 
						|
 | 
						|
--echo ** Connection default**
 | 
						|
connection default;
 | 
						|
DROP TABLE t1;
 | 
						|
DROP VIEW v1;
 | 
						|
SET @@GLOBAL.delayed_insert_limit = @global_delayed_insert_limit;
 | 
						|
 | 
						|
--echo Disconnecting from con1, con0
 | 
						|
disconnect con0;
 | 
						|
disconnect con1;
 | 
						|
let $wait_condition=
 | 
						|
   SELECT COUNT(*) = 0 FROM information_schema.processlist
 | 
						|
   WHERE id IN ($con0_id,$con1_id);
 | 
						|
--source include/wait_condition.inc
 |