mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 02:46:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			162 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
	
		
			3.6 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # MDEV-5317 Compound statement / anonymous blocks
 | |
| #
 | |
| source include/have_binlog_format_mixed_or_statement.inc;
 | |
| delimiter |;
 | |
| 
 | |
| CREATE TABLE t1 (a INT PRIMARY KEY)|
 | |
| 
 | |
| BEGIN NOT ATOMIC
 | |
|   INSERT INTO t1 VALUES (1);
 | |
|   INSERT INTO t1 VALUES (2);
 | |
|   INSERT INTO t1 VALUES (3);
 | |
| END|
 | |
| 
 | |
| SELECT * FROM t1|
 | |
| PREPARE stmt FROM "BEGIN NOT ATOMIC
 | |
|   INSERT INTO t1 VALUES (4);
 | |
|   INSERT INTO t1 VALUES (5);
 | |
|   INSERT INTO t1 VALUES (?);
 | |
| END";
 | |
| SET @val = 6|
 | |
| reset master|
 | |
| EXECUTE stmt USING @val|
 | |
| SELECT * FROM t1|
 | |
| 
 | |
| # see how ?-placeholder was replaced with the value
 | |
| delimiter ;|
 | |
| source include/show_binlog_events.inc;
 | |
| delimiter |;
 | |
| 
 | |
| DROP TABLE t1|
 | |
| 
 | |
| #
 | |
| # test for default database
 | |
| #
 | |
| # * SP db is different from the current db
 | |
| CREATE DATABASE mysqltest1|
 | |
| CREATE PROCEDURE mysqltest1.sp1()
 | |
| BEGIN
 | |
|   PREPARE stmt FROM "BEGIN NOT ATOMIC CREATE TABLE t1 AS SELECT DATABASE(); END";
 | |
|   EXECUTE stmt;
 | |
| END|
 | |
| 
 | |
| CALL mysqltest1.sp1()|
 | |
| SELECT * FROM mysqltest1.t1|
 | |
| 
 | |
| USE mysqltest1|
 | |
| DROP DATABASE mysqltest1|
 | |
| 
 | |
| # * no current db
 | |
| --error ER_NO_DB_ERROR
 | |
| BEGIN NOT ATOMIC CREATE TABLE t1(a int); END|
 | |
| 
 | |
| BEGIN NOT ATOMIC SET @a=1; CREATE TABLE test.t1(a int); END|
 | |
| 
 | |
| USE test|
 | |
| show tables|
 | |
| drop table t1|
 | |
| 
 | |
| # IF (without /**/ mysqltest treats if as its own command)
 | |
| /**/ if (select count(*) from information_schema.tables
 | |
|     where table_schema='test' and table_name='t1') = 0
 | |
|   then
 | |
|     create table t1 (a int);
 | |
| end if|
 | |
| show tables|
 | |
| /**/ if (select count(*) from information_schema.tables
 | |
|     where table_schema='test' and table_name='t1') = 0
 | |
|   then
 | |
|     create table t1 (a int);
 | |
| end if|
 | |
| show tables|
 | |
| 
 | |
| # CASE simple
 | |
| case (select table_name from information_schema.tables where table_schema='test')
 | |
|   when 't1' then create table t2 (b int);
 | |
|   when 't2' then create table t3 (b int);
 | |
|   else signal sqlstate '42S02';
 | |
| end case|
 | |
| show tables|
 | |
| 
 | |
| # CASE searched
 | |
| case
 | |
|   when database() = 'test' then create table t3 (test text);
 | |
|   when now() < date'2001-02-03' then create table oops (machine time);
 | |
| end case|
 | |
| show tables|
 | |
| 
 | |
| # LOOP
 | |
| --error ER_TABLE_EXISTS_ERROR
 | |
| loop
 | |
|   create table t4 (a int);
 | |
| end loop|
 | |
| show tables|
 | |
| 
 | |
| # REPEAT
 | |
| set @a=0|
 | |
| repeat
 | |
|   set @a = @a + 1;
 | |
| until @a > 5
 | |
| end repeat|
 | |
| select @a|
 | |
| 
 | |
| # WHILE
 | |
| --vertical_results
 | |
| /**/ while (select count(*) from information_schema.tables where table_schema='test')
 | |
| do
 | |
|   select concat('drop table ', table_name) into @a
 | |
|      from information_schema.tables where table_schema='test'
 | |
|      order by table_name limit 1;
 | |
|   select @a as 'executing:';
 | |
|   prepare dt from @a;
 | |
|   execute dt;
 | |
| end while|
 | |
| --horizontal_results
 | |
| 
 | |
| # see how ?-placeholder and SP variables are replaced with values
 | |
| create table t1 (x int)|
 | |
| create function fn(a int) returns int
 | |
| begin
 | |
|   insert t1 values (a+7);
 | |
|   return a+8;
 | |
| end|
 | |
| reset master|
 | |
| /**/ if fn(9) > 5 then
 | |
|   select 1;
 | |
| end if|
 | |
| prepare stmt from "if fn(?) > 6 then
 | |
|  begin
 | |
|   declare a int;
 | |
|   set a=?*2;
 | |
|   insert t1 values(a+?);
 | |
|  end;
 | |
| end if"|
 | |
| set @a=1, @b=2, @c=3|
 | |
| execute stmt using @a, @b, @c|
 | |
| delimiter ;|
 | |
| source include/show_binlog_events.inc;
 | |
| delimiter |;
 | |
| 
 | |
| drop function fn|
 | |
| drop table t1|
 | |
| 
 | |
| #
 | |
| # MDEV-6606 Server crashes in String::append on selecting sql_mode inside anonymous block
 | |
| # MDEV-6609 SQL inside an anonymous block is executed with wrong SQL_MODE
 | |
| #
 | |
| 
 | |
| set @@sql_mode="STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"|
 | |
| begin not atomic select @@sql_mode; end|
 | |
| create table t1 (a int)|
 | |
| select a from t1 having a > 1|
 | |
| begin not atomic select a from t1 having a > 1; end|
 | |
| drop table t1|
 | |
| 
 | |
| --echo #
 | |
| --echo # MDEV-8615: Assertion `m_cpp_buf <= begin_ptr &&
 | |
| --echo # begin_ptr <= m_cpp_buf + m_buf_length' failed in
 | |
| --echo # Lex_input_stream::body_utf8_start
 | |
| --echo #
 | |
| --error ER_PARSE_ERROR
 | |
| --query b'
 | 
