################################################################################ # # # 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 connect (con0,localhost,root,,); let $con0_id=`SELECT CONNECTION_ID()`; 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 READ; connection con1; 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'); connection con0; let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE state = 'Waiting for table level lock' AND user='delayed'; --source include/wait_condition.inc let $my_select= SELECT COUNT(*) FROM t1; send; eval $my_select; connection default; --echo ** Wait till con0 is blocked ** let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE state = 'Waiting for table level lock' AND info = '$my_select'; --source include/wait_condition.inc UNLOCK TABLES; 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' reap; 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 READ; connection con1; 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'); connection con0; let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE state = 'Waiting for table level lock' AND user='delayed'; --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(*) FROM t1; send; eval $my_select; connection default; --echo ** Wait till con0 is blocked ** let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist WHERE state = 'Waiting for table level lock' AND info = '$my_select'; --source include/wait_condition.inc UNLOCK TABLES; connection con0; --echo Asynchronous "reap" result reap; connection default; --echo Checking if the delayed insert gives the same result afterwards eval $my_select; # # Cleanup # connection default; DROP TABLE t1; DROP VIEW v1; SET @@GLOBAL.delayed_insert_limit = @global_delayed_insert_limit; 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