356 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			356 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # delayed works differently in embedded server | ||
|  | --source include/not_embedded.inc | ||
|  | # | ||
|  | # test of DELAYED insert and timestamps | ||
|  | # (Can't be tested with purify :( ) | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1 (a char(10), tmsp timestamp); | ||
|  | insert into t1 set a = 1; | ||
|  | insert delayed into t1 set a = 2; | ||
|  | insert into t1 set a = 3, tmsp=NULL; | ||
|  | insert delayed into t1 set a = 4; | ||
|  | insert delayed into t1 set a = 5, tmsp = 19711006010203; | ||
|  | insert delayed into t1 (a, tmsp) values (6, 19711006010203); | ||
|  | insert delayed into t1 (a, tmsp) values (7, NULL); | ||
|  | # Wait until the rows are flushed to the table files. | ||
|  | FLUSH TABLE t1; | ||
|  | insert into t1 set a = 8,tmsp=19711006010203; | ||
|  | select * from t1 where tmsp=0; | ||
|  | select * from t1 where tmsp=19711006010203; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Test bug when inserting NULL into an auto_increment field with | ||
|  | # INSERT DELAYED | ||
|  | # | ||
|  | 
 | ||
|  | create table t1 (a int not null auto_increment primary key, b char(10)); | ||
|  | insert delayed into t1 values (1,"b"); | ||
|  | insert delayed into t1 values (null,"c"); | ||
|  | insert delayed into t1 values (3,"d"),(null,"e"); | ||
|  | --error 1136 | ||
|  | insert delayed into t1 values (3,"this will give an","error"); | ||
|  | # Wait until the rows are flushed to the table files. | ||
|  | FLUSH TABLE t1; | ||
|  | show status like 'not_flushed_delayed_rows'; | ||
|  | select * from t1; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # End of 4.1 tests | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #12226: Crash when a delayed insert fails due to a duplicate key | ||
|  | # | ||
|  | create table t1 (a int not null primary key); | ||
|  | insert into t1 values (1); | ||
|  | insert delayed into t1 values (1); | ||
|  | select * from t1; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #20195: INSERT DELAYED with auto_increment is assigned wrong values | ||
|  | # | ||
|  | CREATE TABLE t1 ( a int(10) NOT NULL auto_increment, PRIMARY KEY (a)); | ||
|  | 
 | ||
|  | # Make one delayed insert to start the separate thread | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Do some normal inserts | ||
|  | insert into t1 values(null); | ||
|  | insert into t1 values(null); | ||
|  | 
 | ||
|  | # Discarded, since the delayed-counter is 2, which is already used | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Discarded, since the delayed-counter is 3, which is already used | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Works, since the delayed-counter is 4, which is unused | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Do some more inserts | ||
|  | insert into t1 values(null); | ||
|  | insert into t1 values(null); | ||
|  | insert into t1 values(null); | ||
|  | 
 | ||
|  | # Delete one of the above to make a hole | ||
|  | delete from t1 where a=6; | ||
|  | 
 | ||
|  | # Discarded, since the delayed-counter is 5, which is already used | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Works, since the delayed-counter is 6, which is unused (the row we deleted) | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Discarded, since the delayed-counter is 7, which is already used | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Works, since the delayed-counter is 8, which is unused | ||
|  | insert delayed into t1 values(null); | ||
|  | 
 | ||
|  | # Wait until the rows are flushed to the table files. | ||
|  | FLUSH TABLE t1; | ||
|  | # Check what we have now | ||
|  | select * from t1 order by a; | ||
|  | 
 | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#20627 - INSERT DELAYED does not honour auto_increment_* variables | ||
|  | # | ||
|  | SET @bug20627_old_auto_increment_offset= | ||
|  |                 @@auto_increment_offset; | ||
|  | SET @bug20627_old_auto_increment_increment= | ||
|  |                 @@auto_increment_increment; | ||
|  | SET @bug20627_old_session_auto_increment_offset= | ||
|  |                 @@session.auto_increment_offset; | ||
|  | SET @bug20627_old_session_auto_increment_increment= | ||
|  |                 @@session.auto_increment_increment; | ||
|  | SET @@auto_increment_offset= 2; | ||
|  | SET @@auto_increment_increment= 3; | ||
|  | SET @@session.auto_increment_offset= 4; | ||
|  | SET @@session.auto_increment_increment= 5; | ||
|  | # | ||
|  | # Normal insert as reference. | ||
|  | CREATE TABLE t1 ( | ||
|  |   c1 INT NOT NULL AUTO_INCREMENT, | ||
|  |   PRIMARY KEY (c1) | ||
|  |   ); | ||
|  | INSERT INTO t1 VALUES (NULL),(NULL),(NULL); | ||
|  | # Check what we have now | ||
|  | SELECT * FROM t1; | ||
|  | DROP TABLE t1; | ||
|  | # | ||
|  | # Delayed insert. | ||
|  | CREATE TABLE t1 ( | ||
|  |   c1 INT NOT NULL AUTO_INCREMENT, | ||
|  |   PRIMARY KEY (c1) | ||
|  |   ); | ||
|  | INSERT DELAYED INTO t1 VALUES (NULL),(NULL),(NULL); | ||
|  | # Wait until the rows are flushed to the table files. | ||
|  | FLUSH TABLE t1; | ||
|  | # Check what we have now | ||
|  | SELECT * FROM t1; | ||
|  | DROP TABLE t1; | ||
|  | # | ||
|  | # Cleanup | ||
|  | SET             @@auto_increment_offset= | ||
|  |     @bug20627_old_auto_increment_offset; | ||
|  | SET             @@auto_increment_increment= | ||
|  |     @bug20627_old_auto_increment_increment; | ||
|  | SET             @@session.auto_increment_offset= | ||
|  |     @bug20627_old_session_auto_increment_offset; | ||
|  | SET             @@session.auto_increment_increment= | ||
|  |     @bug20627_old_session_auto_increment_increment; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#20830 - INSERT DELAYED does not honour SET INSERT_ID | ||
|  | # | ||
|  | SET @bug20830_old_auto_increment_offset= | ||
|  |                 @@auto_increment_offset; | ||
|  | SET @bug20830_old_auto_increment_increment= | ||
|  |                 @@auto_increment_increment; | ||
|  | SET @bug20830_old_session_auto_increment_offset= | ||
|  |                 @@session.auto_increment_offset; | ||
|  | SET @bug20830_old_session_auto_increment_increment= | ||
|  |                 @@session.auto_increment_increment; | ||
|  | SET @@auto_increment_offset= 2; | ||
|  | SET @@auto_increment_increment= 3; | ||
|  | SET @@session.auto_increment_offset= 4; | ||
|  | SET @@session.auto_increment_increment= 5; | ||
|  | # | ||
|  | # Normal insert as reference. | ||
|  | CREATE TABLE t1 ( | ||
|  |   c1 INT(11) NOT NULL AUTO_INCREMENT, | ||
|  |   c2 INT(11) DEFAULT NULL, | ||
|  |   PRIMARY KEY (c1) | ||
|  |   ); | ||
|  | SET insert_id= 14; | ||
|  | INSERT INTO t1 VALUES(NULL, 11), (NULL, 12), (NULL, 13); | ||
|  | INSERT INTO t1 VALUES(NULL, 21), (NULL, 22), (NULL, 23); | ||
|  | # Restart sequence at a different value. | ||
|  | INSERT INTO t1 VALUES(  69, 31), (NULL, 32), (NULL, 33); | ||
|  | INSERT INTO t1 VALUES(NULL, 41), (NULL, 42), (NULL, 43); | ||
|  | # Restart sequence at a different value. | ||
|  | SET insert_id= 114; | ||
|  | INSERT INTO t1 VALUES(NULL, 51), (NULL, 52), (NULL, 53); | ||
|  | INSERT INTO t1 VALUES(NULL, 61), (NULL, 62), (NULL, 63); | ||
|  | # Set one value below the maximum value. | ||
|  | INSERT INTO t1 VALUES(  49, 71), (NULL, 72), (NULL, 73); | ||
|  | INSERT INTO t1 VALUES(NULL, 81), (NULL, 82), (NULL, 83); | ||
|  | # Create a duplicate value. | ||
|  | SET insert_id= 114; | ||
|  | --error ER_DUP_ENTRY | ||
|  | INSERT INTO t1 VALUES(NULL, 91); | ||
|  | INSERT INTO t1 VALUES           (NULL, 92), (NULL, 93); | ||
|  | # Check what we have now | ||
|  | SELECT * FROM t1; | ||
|  | SELECT COUNT(*) FROM t1; | ||
|  | SELECT SUM(c1) FROM t1; | ||
|  | DROP TABLE t1; | ||
|  | # | ||
|  | # Delayed insert. | ||
|  | CREATE TABLE t1 ( | ||
|  |   c1 INT(11) NOT NULL AUTO_INCREMENT, | ||
|  |   c2 INT(11) DEFAULT NULL, | ||
|  |   PRIMARY KEY (c1) | ||
|  |   ); | ||
|  | SET insert_id= 14; | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 11), (NULL, 12), (NULL, 13); | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 21), (NULL, 22), (NULL, 23); | ||
|  | # Restart sequence at a different value. | ||
|  | INSERT DELAYED INTO t1 VALUES(  69, 31), (NULL, 32), (NULL, 33); | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 41), (NULL, 42), (NULL, 43); | ||
|  | # Restart sequence at a different value. | ||
|  | SET insert_id= 114; | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 51), (NULL, 52), (NULL, 53); | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 61), (NULL, 62), (NULL, 63); | ||
|  | # Set one value below the maximum value. | ||
|  | INSERT DELAYED INTO t1 VALUES(  49, 71), (NULL, 72), (NULL, 73); | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 81), (NULL, 82), (NULL, 83); | ||
|  | # Create a duplicate value. | ||
|  | SET insert_id= 114; | ||
|  | INSERT DELAYED INTO t1 VALUES(NULL, 91); | ||
|  | INSERT DELAYED INTO t1 VALUES           (NULL, 92), (NULL, 93); | ||
|  | # Wait until the rows are flushed to the table files. | ||
|  | FLUSH TABLE t1; | ||
|  | # Check what we have now | ||
|  | SELECT * FROM t1; | ||
|  | SELECT COUNT(*) FROM t1; | ||
|  | SELECT SUM(c1) FROM t1; | ||
|  | DROP TABLE t1; | ||
|  | # | ||
|  | # Cleanup | ||
|  | SET             @@auto_increment_offset= | ||
|  |     @bug20830_old_auto_increment_offset; | ||
|  | SET             @@auto_increment_increment= | ||
|  |     @bug20830_old_auto_increment_increment; | ||
|  | SET             @@session.auto_increment_offset= | ||
|  |     @bug20830_old_session_auto_increment_offset; | ||
|  | SET             @@session.auto_increment_increment= | ||
|  |     @bug20830_old_session_auto_increment_increment; | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#26238 - inserted delayed always inserts 0 for BIT columns | ||
|  | # | ||
|  | CREATE TABLE t1(a BIT); | ||
|  | INSERT DELAYED INTO t1 VALUES(1); | ||
|  | FLUSH TABLE t1; | ||
|  | SELECT HEX(a) FROM t1; | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug #32676: insert delayed crash with wrong column and function specified | ||
|  | # | ||
|  | CREATE TABLE t1 (a INT); | ||
|  | --error  ER_BAD_FIELD_ERROR | ||
|  | INSERT DELAYED INTO t1 SET b= b(); | ||
|  | DROP TABLE t1; | ||
|  | 
 | ||
|  | --echo End of 5.0 tests | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#27358 INSERT DELAYED does not honour SQL_MODE of the client | ||
|  | # | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS t1,t2; | ||
|  | --enable_warnings | ||
|  | SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO'; | ||
|  | CREATE TABLE `t1` ( | ||
|  |   `id` int(11) PRIMARY KEY auto_increment, | ||
|  |   `f1` varchar(10) NOT NULL UNIQUE | ||
|  | ); | ||
|  | INSERT DELAYED INTO t1 VALUES(0,"test1"); | ||
|  | sleep 1; | ||
|  | SELECT * FROM t1; | ||
|  | SET SQL_MODE='PIPES_AS_CONCAT'; | ||
|  | INSERT DELAYED INTO t1 VALUES(0,'a' || 'b'); | ||
|  | sleep 1; | ||
|  | SELECT * FROM t1; | ||
|  | SET SQL_MODE='ERROR_FOR_DIVISION_BY_ZERO,STRICT_ALL_TABLES'; | ||
|  | --error 1365 | ||
|  | INSERT DELAYED INTO t1 VALUES(mod(1,0),"test3"); | ||
|  | CREATE TABLE t2 ( | ||
|  |   `id` int(11) PRIMARY KEY auto_increment, | ||
|  |   `f1` date | ||
|  | ); | ||
|  | SET SQL_MODE='NO_ZERO_DATE,STRICT_ALL_TABLES,NO_ZERO_IN_DATE'; | ||
|  | --error ER_TRUNCATED_WRONG_VALUE | ||
|  | INSERT DELAYED INTO t2 VALUES (0,'0000-00-00'); | ||
|  | --error ER_TRUNCATED_WRONG_VALUE | ||
|  | INSERT DELAYED INTO t2 VALUES (0,'2007-00-00'); | ||
|  | DROP TABLE t1,t2; | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#40536: SELECT is blocked by INSERT DELAYED waiting on upgrading lock, | ||
|  | #            even with low_priority_updates | ||
|  | # | ||
|  | 
 | ||
|  | set @old_delayed_updates = @@global.low_priority_updates; | ||
|  | set global low_priority_updates = 1; | ||
|  | select @@global.low_priority_updates; | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | create table t1 (a int, b int); | ||
|  | insert into t1 values (1,1); | ||
|  | lock table t1 read; | ||
|  | connect (update,localhost,root,,); | ||
|  | connection update; | ||
|  | --echo connection: update | ||
|  | --send insert delayed into t1 values (2,2); | ||
|  | connection default; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where command = "Delayed insert" and state = "upgrading lock"; | ||
|  | --source include/wait_condition.inc | ||
|  | connect (select,localhost,root,,); | ||
|  | --echo connection: select | ||
|  | select * from t1; | ||
|  | connection default; | ||
|  | --echo connection: default | ||
|  | select * from t1; | ||
|  | connection default; | ||
|  | disconnect update; | ||
|  | disconnect select; | ||
|  | unlock tables; | ||
|  | let $wait_condition= | ||
|  |   select count(*) = 1 from information_schema.processlist | ||
|  |   where command = "Delayed insert" and state = "Waiting for INSERT"; | ||
|  | --source include/wait_condition.inc | ||
|  | select * from t1; | ||
|  | drop table t1; | ||
|  | 
 | ||
|  | set global low_priority_updates = @old_delayed_updates; | ||
|  | 
 | ||
|  | 
 | ||
|  | --echo # | ||
|  | --echo # Bug #47682 strange behaviour of INSERT DELAYED | ||
|  | --echo # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | DROP TABLE IF EXISTS t1, t2; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | CREATE TABLE t1 (f1 integer); | ||
|  | CREATE TABLE t2 (f1 integer); | ||
|  | 
 | ||
|  | FLUSH TABLES WITH READ LOCK; | ||
|  | LOCK TABLES t1 READ; | ||
|  | 
 | ||
|  | # ER_CANT_UPDATE_WITH_READLOCK with normal execution | ||
|  | # ER_TABLE_NOT_LOCKED when executed as prepared statement | ||
|  | --error ER_CANT_UPDATE_WITH_READLOCK, ER_TABLE_NOT_LOCKED | ||
|  | INSERT DELAYED INTO t2 VALUES (1); | ||
|  | 
 | ||
|  | UNLOCK TABLES; | ||
|  | DROP TABLE t1, t2; | ||
|  | 
 | ||
|  | 
 | ||
|  | --echo End of 5.1 tests |