mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	This is similar to MysQL Worklog 3253, but with a different implementation. The disk format and SQL syntax is identical with MySQL 5.7. Fetures supported: - "Any" ammount of any trigger - Supports FOLLOWS and PRECEDES to be able to put triggers in a certain execution order. Implementation details: - Class Trigger added to hold information about a trigger. Before this trigger information was stored in a set of lists in Table_triggers_list and in Table_triggers_list::bodies - Each Trigger has a next field that poinst to the next Trigger with the same action and time. - When accessing a trigger, we now always access all linked triggers - The list are now only used to load and save trigger files. - MySQL trigger test case (trigger_wl3253) added and we execute these identically. - Even more gracefully handling of wrong trigger files than before. This is useful if a trigger file uses functions or syntax not provided by the server. - Each trigger now has a "Created" field that shows when the trigger was created, with 2 decimals. Other comments: - Many of the changes in test files was done because of the new "Created" field in the trigger file. This shows up in SHOW ... TRIGGER and when using information_schema.trigger. - Don't check if all memory is released if on uses --gdb; This is needed to be able to get a list from safemalloc of not freed memory while debugging. - Added option to trim_whitespace() to know how many prefix characters was skipped. - Changed a few ulonglong sql_mode to sql_mode_t, to find some wrong usage of sql_mode.
		
			
				
	
	
		
			65 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| set global sql_mode="";
 | |
| drop table if exists t1;
 | |
| drop function if exists foofct;
 | |
| drop procedure if exists empty;
 | |
| drop procedure if exists foosp;
 | |
| drop procedure if exists nicesp;
 | |
| drop trigger if exists t1_empty;
 | |
| drop trigger if exists t1_bi;
 | |
| "Pass 1 : --disable-comments"
 | |
| 1
 | |
| 1
 | |
| 2
 | |
| 2
 | |
| foofct("call 1")
 | |
| call 1
 | |
| Function	sql_mode	Create Function	character_set_client	collation_connection	Database Collation
 | |
| foofct		CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nreturn\n\n\n\nx	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| foofct("call 2")
 | |
| call 2
 | |
| Function	sql_mode	Create Function	character_set_client	collation_connection	Database Collation
 | |
| foofct		CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nbegin\n  \n  \n  \n\n  \n\n  \n  return x;\nend	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| Procedure	sql_mode	Create Procedure	character_set_client	collation_connection	Database Collation
 | |
| empty		CREATE DEFINER=`root`@`localhost` PROCEDURE `empty`()\nbegin\nend	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| id	data
 | |
| foo	42
 | |
| Procedure	sql_mode	Create Procedure	character_set_client	collation_connection	Database Collation
 | |
| foosp		CREATE DEFINER=`root`@`localhost` PROCEDURE `foosp`()\ninsert into test.t1\n\n\n\n\n  \n\n  \n  values ("foo", 42)	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| Procedure	sql_mode	Create Procedure	character_set_client	collation_connection	Database Collation
 | |
| nicesp		CREATE DEFINER=`root`@`localhost` PROCEDURE `nicesp`(a int)\nbegin\n  \n  declare b int;\n  declare c float;\n\n  \n  \n\n  \nend	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| Trigger	sql_mode	SQL Original Statement	character_set_client	collation_connection	Database Collation	Created
 | |
| t1_empty		CREATE DEFINER=`root`@`localhost` trigger t1_empty after delete on t1\nfor each row\nbegin\nend	latin1	latin1_swedish_ci	latin1_swedish_ci	--TIME--
 | |
| Trigger	sql_mode	SQL Original Statement	character_set_client	collation_connection	Database Collation	Created
 | |
| t1_bi		CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1\nfor each row\nbegin\n\n\n\n  \n  declare b int;\n  declare c float;\n\n  \n  \n\n  \n  set NEW.data := 12;\nend	latin1	latin1_swedish_ci	latin1_swedish_ci	--TIME--
 | |
| id	data
 | |
| trig	12
 | |
| "Pass 2 : --enable-comments"
 | |
| 1
 | |
| 1
 | |
| 2
 | |
| 2
 | |
| foofct("call 1")
 | |
| call 1
 | |
| Function	sql_mode	Create Function	character_set_client	collation_connection	Database Collation
 | |
| foofct		CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nreturn\n-- comment 1a\n# comment 1b\n/* comment 1c */\nx # after body, on same line	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| foofct("call 2")
 | |
| call 2
 | |
| Function	sql_mode	Create Function	character_set_client	collation_connection	Database Collation
 | |
| foofct		CREATE DEFINER=`root`@`localhost` FUNCTION `foofct`(x char(20)) RETURNS char(20) CHARSET latin1\nbegin\n  -- comment 1a\n  # comment 1b\n  /*\n     comment 1c\n  */\n\n  -- empty line below\n\n  -- empty line above\n  return x;\nend	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| Procedure	sql_mode	Create Procedure	character_set_client	collation_connection	Database Collation
 | |
| empty		CREATE DEFINER=`root`@`localhost` PROCEDURE `empty`()\nbegin\nend	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| id	data
 | |
| foo	42
 | |
| Procedure	sql_mode	Create Procedure	character_set_client	collation_connection	Database Collation
 | |
| foosp		CREATE DEFINER=`root`@`localhost` PROCEDURE `foosp`()\ninsert into test.t1\n## These comments are part of the procedure body, and should be kept.\n# Comment 2a\n-- Comment 2b\n/* Comment 2c */\n  -- empty line below\n\n  -- empty line above\n  values ("foo", 42) # comment 3, still part of the body	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| Procedure	sql_mode	Create Procedure	character_set_client	collation_connection	Database Collation
 | |
| nicesp		CREATE DEFINER=`root`@`localhost` PROCEDURE `nicesp`(a int)\nbegin\n  -- declare some variables here\n  declare b int;\n  declare c float;\n\n  -- do more stuff here\n  -- commented nicely and so on\n\n  -- famous last words ...\nend	latin1	latin1_swedish_ci	latin1_swedish_ci
 | |
| Trigger	sql_mode	SQL Original Statement	character_set_client	collation_connection	Database Collation	Created
 | |
| t1_empty		CREATE DEFINER=`root`@`localhost` trigger t1_empty after delete on t1\nfor each row\nbegin\nend	latin1	latin1_swedish_ci	latin1_swedish_ci	--TIME--
 | |
| Trigger	sql_mode	SQL Original Statement	character_set_client	collation_connection	Database Collation	Created
 | |
| t1_bi		CREATE DEFINER=`root`@`localhost` trigger t1_bi before insert on t1\nfor each row\nbegin\n# comment 1a\n-- comment 1b\n/*\n   comment 1c\n*/\n  -- declare some variables here\n  declare b int;\n  declare c float;\n\n  -- do more stuff here\n  -- commented nicely and so on\n\n  -- famous last words ...\n  set NEW.data := 12;\nend	latin1	latin1_swedish_ci	latin1_swedish_ci	--TIME--
 | |
| id	data
 | |
| trig	12
 | |
| set global sql_mode=default;
 | |
| End of 5.0 tests
 |