mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 04:26:45 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			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= "Locked" 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= "Locked" 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;
 | |
| 
 |