3195 lines
		
	
	
		
			84 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			3195 lines
		
	
	
		
			84 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								-- source include/not_embedded.inc
							 | 
						|||
| 
								 | 
							
								-- source include/have_log_bin.inc
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# SQL Syntax for Prepared Statements test
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1,t2,t3,t4;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Avoid wrong warnings if mysql_client_test fails
							 | 
						|||
| 
								 | 
							
								drop database if exists client_test_db;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1
							 | 
						|||
| 
								 | 
							
								(
							 | 
						|||
| 
								 | 
							
								  a int primary key,
							 | 
						|||
| 
								 | 
							
								  b char(10)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1,'one');
							 | 
						|||
| 
								 | 
							
								insert into t1 values (2,'two');
							 | 
						|||
| 
								 | 
							
								insert into t1 values (3,'three');
							 | 
						|||
| 
								 | 
							
								insert into t1 values (4,'four');
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# basic functionality
							 | 
						|||
| 
								 | 
							
								set @a=2;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from 'select * from t1 where a <= ?';
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @a;
							 | 
						|||
| 
								 | 
							
								set @a=3;
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# non-existant statement
							 | 
						|||
| 
								 | 
							
								--error 1243
							 | 
						|||
| 
								 | 
							
								deallocate prepare no_such_statement;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error 1210
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Nesting ps commands is not allowed: 
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPPORTED_PS 
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from 'prepare nested_stmt from "select 1"';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPPORTED_PS 
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from 'execute stmt1';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPPORTED_PS 
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from 'deallocate prepare z';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# PS insert 
							 | 
						|||
| 
								 | 
							
								prepare stmt3 from 'insert into t1 values (?,?)';
							 | 
						|||
| 
								 | 
							
								set @arg1=5, @arg2='five';
							 | 
						|||
| 
								 | 
							
								execute stmt3 using @arg1, @arg2;
							 | 
						|||
| 
								 | 
							
								select * from t1 where a>3;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# PS update 
							 | 
						|||
| 
								 | 
							
								prepare stmt4 from 'update t1 set a=? where b=?';
							 | 
						|||
| 
								 | 
							
								set @arg1=55, @arg2='five';
							 | 
						|||
| 
								 | 
							
								execute stmt4 using @arg1, @arg2;
							 | 
						|||
| 
								 | 
							
								select * from t1 where a>3;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# PS create/delete
							 | 
						|||
| 
								 | 
							
								prepare stmt4 from 'create table t2 (a int)';
							 | 
						|||
| 
								 | 
							
								execute stmt4;
							 | 
						|||
| 
								 | 
							
								prepare stmt4 from 'drop table t2';
							 | 
						|||
| 
								 | 
							
								execute stmt4;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Do something that will cause error
							 | 
						|||
| 
								 | 
							
								--error 1051
							 | 
						|||
| 
								 | 
							
								execute stmt4;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# placeholders in result field names.
							 | 
						|||
| 
								 | 
							
								prepare stmt5 from 'select ? + a from t1';
							 | 
						|||
| 
								 | 
							
								set @a=1;
							 | 
						|||
| 
								 | 
							
								execute stmt5 using @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								execute stmt5 using @no_such_var;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @nullvar=1;
							 | 
						|||
| 
								 | 
							
								set @nullvar=NULL;
							 | 
						|||
| 
								 | 
							
								execute stmt5 using @nullvar;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @nullvar2=NULL;
							 | 
						|||
| 
								 | 
							
								execute stmt5 using @nullvar2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Check that multiple SQL statements are disabled inside PREPARE
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt6 from 'select 1; select2';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt6 from 'insert into t1 values (5,"five"); select2';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# This shouldn't parse
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								explain prepare stmt6 from 'insert into t1 values (5,"five"); select2';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t2
							 | 
						|||
| 
								 | 
							
								(
							 | 
						|||
| 
								 | 
							
								  a int
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t2 values (0);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# parameter is NULL
							 | 
						|||
| 
								 | 
							
								set @arg00=NULL ;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from 'select 1 FROM t2 where a=?' ;
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @arg00 ;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# prepare using variables:
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from @nosuchvar;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @ivar= 1234;
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from @ivar;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @fvar= 123.4567;
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from @fvar;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1,t2;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt3;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt4;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt5;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #4105: Server crash on attempt to prepare a statement with character
							 | 
						|||
| 
								 | 
							
								# set introducer
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								PREPARE stmt1 FROM "select _utf8 'A' collate utf8_bin = ?";
							 | 
						|||
| 
								 | 
							
								set @var='A';
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt1 USING @var;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#3486:  FOUND_ROWS() fails inside stored procedure [and prepared statement]
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (id int);
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "select FOUND_ROWS()";
							 | 
						|||
| 
								 | 
							
								select SQL_CALC_FOUND_ROWS * from t1;
							 | 
						|||
| 
								 | 
							
								# Expect 0
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1);
							 | 
						|||
| 
								 | 
							
								select SQL_CALC_FOUND_ROWS * from t1;
							 | 
						|||
| 
								 | 
							
								# Expect 1
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								# Expect 0
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# prepared EXPLAIN
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 
							 | 
						|||
| 
								 | 
							
								(
							 | 
						|||
| 
								 | 
							
								  c1  tinyint, c2  smallint, c3  mediumint, c4  int,
							 | 
						|||
| 
								 | 
							
								  c5  integer, c6  bigint, c7  float, c8  double,
							 | 
						|||
| 
								 | 
							
								  c9  double precision, c10 real, c11 decimal(7, 4), c12 numeric(8, 4),
							 | 
						|||
| 
								 | 
							
								  c13 date, c14 datetime, c15 timestamp, c16 time,
							 | 
						|||
| 
								 | 
							
								  c17 year, c18 bit, c19 bool, c20 char,
							 | 
						|||
| 
								 | 
							
								  c21 char(10), c22 varchar(30), c23 tinyblob, c24 tinytext,
							 | 
						|||
| 
								 | 
							
								  c25 blob, c26 text, c27 mediumblob, c28 mediumtext,
							 | 
						|||
| 
								 | 
							
								  c29 longblob, c30 longtext, c31 enum('one', 'two', 'three'),
							 | 
						|||
| 
								 | 
							
								  c32 set('monday', 'tuesday', 'wednesday')
							 | 
						|||
| 
								 | 
							
								) engine = MYISAM ;
							 | 
						|||
| 
								 | 
							
								create table t2 like t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @stmt= ' explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25 ' ;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from @stmt ;
							 | 
						|||
| 
								 | 
							
								execute stmt1 ;
							 | 
						|||
| 
								 | 
							
								execute stmt1 ;
							 | 
						|||
| 
								 | 
							
								explain SELECT (SELECT SUM(c1 + c12 + 0.0) FROM t2 where (t1.c2 - 0e-3) = t2.c2 GROUP BY t1.c15 LIMIT 1) as scalar_s, exists (select 1.0e+0 from t2 where t2.c3 * 9.0000000000 = t1.c4) as exists_s, c5 * 4 in (select c6 + 0.3e+1 from t2) as in_s, (c7 - 4, c8 - 4) in (select c9 + 4.0, c10 + 40e-1 from t2) as in_row_s FROM t1, (select c25 x, c32 y from t2) tt WHERE x * 1 = c25;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								drop tables t1,t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# parameters from variables (for field creation)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								set @arg00=1;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ;
							 | 
						|||
| 
								 | 
							
								execute stmt1 ;
							 | 
						|||
| 
								 | 
							
								select m from t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from ' create table t1 (m int) as select ? as m ' ;
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @arg00;
							 | 
						|||
| 
								 | 
							
								select m from t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# eq() for parameters
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (id int(10) unsigned NOT NULL default '0',
							 | 
						|||
| 
								 | 
							
								                 name varchar(64) NOT NULL default '',
							 | 
						|||
| 
								 | 
							
								                 PRIMARY KEY  (id), UNIQUE KEY `name` (`name`));
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),(6,'6'),(7,'7');
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from 'select name from t1 where id=? or id=?';
							 | 
						|||
| 
								 | 
							
								set @id1=1,@id2=6;
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @id1, @id2;
							 | 
						|||
| 
								 | 
							
								select name from t1 where id=1 or id=6;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# SHOW TABLE STATUS test
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 ( a int primary key, b varchar(30)) engine = MYISAM ;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from ' show table status from test like ''t1%'' ';
							 | 
						|||
| 
								 | 
							
								--replace_column 8 4294967295 12 # 13 # 14 #
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								--replace_column 8 4294967295 12 # 13 # 14 #
							 | 
						|||
| 
								 | 
							
								show table status from test like 't1%' ;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1 ;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#4912 "mysqld crashs in case a statement is executed a second time":
							 | 
						|||
| 
								 | 
							
								# negation elimination should work once and not break prepared statements
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1(a varchar(2), b varchar(3));
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "select a, b from t1 where (not (a='aa' and b < 'zzz'))";
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#5034 "prepared "select 1 into @arg15", second execute crashes
							 | 
						|||
| 
								 | 
							
								# server".
							 | 
						|||
| 
								 | 
							
								# Check that descendands of select_result can be reused in prepared 
							 | 
						|||
| 
								 | 
							
								# statements or are correctly created and deleted on each execute
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--let $outfile=$MYSQLTEST_VARDIR/tmp/f1.txt
							 | 
						|||
| 
								 | 
							
								--error 0,1
							 | 
						|||
| 
								 | 
							
								--remove_file $outfile
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "select 1 into @var";
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "create table t1 select 1 as i";
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "insert into t1 select i from t1";
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								--replace_result $MYSQLTEST_VARDIR <MYSQLTEST_VARDIR>
							 | 
						|||
| 
								 | 
							
								eval prepare stmt1 from "select * from t1 into outfile '$outfile'";
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--remove_file $outfile
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# BUG#5242 "Prepared statement names are case sensitive"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from 'select 1';
							 | 
						|||
| 
								 | 
							
								prepare STMT1 from 'select 2';
							 | 
						|||
| 
								 | 
							
								execute sTmT1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare StMt1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error 1243
							 | 
						|||
| 
								 | 
							
								deallocate prepare Stmt1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# also check that statement names are in right charset.
							 | 
						|||
| 
								 | 
							
								set names utf8;
							 | 
						|||
| 
								 | 
							
								prepare `ü` from 'select 1234';
							 | 
						|||
| 
								 | 
							
								execute `ü` ;
							 | 
						|||
| 
								 | 
							
								set names latin1;
							 | 
						|||
| 
								 | 
							
								execute `<60>`;
							 | 
						|||
| 
								 | 
							
								deallocate prepare `<60>`;
							 | 
						|||
| 
								 | 
							
								set names default;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# BUG#4368 "select * from t1 where a like ?" crashes server if a is in utf8
							 | 
						|||
| 
								 | 
							
								# and ? is in latin1
							 | 
						|||
| 
								 | 
							
								# Check that Item converting latin1 to utf8 (for LIKE function) is created
							 | 
						|||
| 
								 | 
							
								# in memory of prepared statement.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1 (a varchar(10)) charset=utf8;
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values ('yahoo');
							 | 
						|||
| 
								 | 
							
								set character_set_connection=latin1;
							 | 
						|||
| 
								 | 
							
								prepare stmt from 'select a from t1 where a like ?';
							 | 
						|||
| 
								 | 
							
								set @var='google';
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# BUG#5510 "inserting Null in AutoIncrement primary key Column Fails" 
							 | 
						|||
| 
								 | 
							
								# (prepared statements) 
							 | 
						|||
| 
								 | 
							
								# The cause: misuse of internal MySQL 'Field' API.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1 (a bigint(20) not null primary key auto_increment);
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values (null);
							 | 
						|||
| 
								 | 
							
								select * from t1;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "insert into t1 (a) values (?)";
							 | 
						|||
| 
								 | 
							
								set @var=null;
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								select * from t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# check the same for timestamps
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a timestamp not null);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "insert into t1 (a) values (?)";
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								--disable_result_log
							 | 
						|||
| 
								 | 
							
								select * from t1;
							 | 
						|||
| 
								 | 
							
								--enable_result_log
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# BUG#5688 "Upgraded 4.1.5 Server seg faults" # (prepared statements)
							 | 
						|||
| 
								 | 
							
								# The test case speaks for itself.
							 | 
						|||
| 
								 | 
							
								# Just another place where we used wrong memory root for Items created
							 | 
						|||
| 
								 | 
							
								# during statement prepare.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 'abc' like convert('abc' using utf8)";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# BUG#5748 "Prepared statement with BETWEEN and bigint values crashes
							 | 
						|||
| 
								 | 
							
								# mysqld". Just another place where an item tree modification must be 
							 | 
						|||
| 
								 | 
							
								# rolled back.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								create table t1 ( a bigint );
							 | 
						|||
| 
								 | 
							
								prepare stmt from 'select a from t1 where a between ? and ?';
							 | 
						|||
| 
								 | 
							
								set @a=1;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @a;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @a;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @a;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #5987 subselect in bool function crashes server (prepared statements):
							 | 
						|||
| 
								 | 
							
								# don't overwrite transformed subselects with old arguments of a bool
							 | 
						|||
| 
								 | 
							
								# function.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 where 1 > (1 in (SELECT * FROM t1))";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Test case for Bug#6042 "constants propogation works only once (prepared
							 | 
						|||
| 
								 | 
							
								# statements): check that the query plan changes whenever we change
							 | 
						|||
| 
								 | 
							
								# placeholder value.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								insert into t1 (a, b) values (1,1), (1,2), (2,1), (2,2);
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								"explain select * from t1 where t1.a=2 and t1.a=t1.b and t1.b > 1 + ?";
							 | 
						|||
| 
								 | 
							
								set @v=5;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
							 | 
						|||
| 
								 | 
							
								execute stmt using @v;
							 | 
						|||
| 
								 | 
							
								set @v=0;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
							 | 
						|||
| 
								 | 
							
								execute stmt using @v;
							 | 
						|||
| 
								 | 
							
								set @v=5;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
							 | 
						|||
| 
								 | 
							
								execute stmt using @v;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# A test case for Bug#5985 prepare stmt from "select rand(?)" crashes
							 | 
						|||
| 
								 | 
							
								# server. Check that Item_func_rand is prepared-statements friendly.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values (1), (2), (3), (4);
							 | 
						|||
| 
								 | 
							
								set @precision=10000000000;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 - 3 -
							 | 
						|||
| 
								 | 
							
								select rand(), 
							 | 
						|||
| 
								 | 
							
								       cast(rand(10)*@precision as unsigned integer) from t1;
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								"select rand(), 
							 | 
						|||
| 
								 | 
							
								        cast(rand(10)*@precision as unsigned integer),
							 | 
						|||
| 
								 | 
							
								        cast(rand(?)*@precision as unsigned integer) from t1";
							 | 
						|||
| 
								 | 
							
								set @var=1;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 - 3 -
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								set @var=2;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 -
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								set @var=3;
							 | 
						|||
| 
								 | 
							
								--replace_column 1 -
							 | 
						|||
| 
								 | 
							
								execute stmt using @var;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# A test case for Bug#6050 "EXECUTE stmt reports ambiguous fieldnames with
							 | 
						|||
| 
								 | 
							
								# identical tables from different schemata"
							 | 
						|||
| 
								 | 
							
								# Check that field name resolving in prepared statements works OK.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create database mysqltest1;
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								create table mysqltest1.t1 (a int);
							 | 
						|||
| 
								 | 
							
								select * from t1, mysqltest1.t1;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1, mysqltest1.t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								drop table mysqltest1.t1;
							 | 
						|||
| 
								 | 
							
								drop database mysqltest1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt; 
							 | 
						|||
| 
								 | 
							
								select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2';
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								"select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2'";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Test CREATE TABLE ... SELECT (Bug #6094)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int); 
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1),(2),(3);
							 | 
						|||
| 
								 | 
							
								create table t2 select * from t1;
							 | 
						|||
| 
								 | 
							
								prepare stmt FROM 'create table t2 select * from t1';
							 | 
						|||
| 
								 | 
							
								drop table t2;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t2;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--error 1050
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t2;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1,t2;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#6088 "FOUND_ROWS returns wrong values for prepared statements when
							 | 
						|||
| 
								 | 
							
								# LIMIT is used"
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select sql_calc_found_rows * from t1 limit 2";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								select found_rows();
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								select found_rows();
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								select found_rows();
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#6047 "permission problem when executing mysql_stmt_execute with derived
							 | 
						|||
| 
								 | 
							
								# table"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (N int, M tinyint); 
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1,0),(1,0),(2,0),(2,0),(3,0);
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM 'UPDATE t1 AS P1 INNER JOIN (SELECT N FROM t1 GROUP BY N HAVING COUNT(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2';
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# Bug#6297 "prepared statement, wrong handling of <parameter> IS NULL"
							 | 
						|||
| 
								 | 
							
								# Test that placeholders work with IS NULL/IS NOT NULL clauses. 
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select ? is null, ? is not null, ?";
							 | 
						|||
| 
								 | 
							
								select @no_such_var is null, @no_such_var is not null, @no_such_var;
							 | 
						|||
| 
								 | 
							
								execute stmt using @no_such_var, @no_such_var, @no_such_var;
							 | 
						|||
| 
								 | 
							
								set @var='abc';
							 | 
						|||
| 
								 | 
							
								select @var is null, @var is not null, @var;
							 | 
						|||
| 
								 | 
							
								execute stmt using @var, @var, @var;
							 | 
						|||
| 
								 | 
							
								set @var=null;
							 | 
						|||
| 
								 | 
							
								select @var is null, @var is not null, @var;
							 | 
						|||
| 
								 | 
							
								execute stmt using @var, @var, @var;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								# Bug#6873 "PS, having with subquery, crash during execute"
							 | 
						|||
| 
								 | 
							
								# check that if we modify having subtree, we update JOIN->having pointer
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (pnum char(3));
							 | 
						|||
| 
								 | 
							
								create table t2 (pnum char(3));
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select pnum from t2 having pnum in (select 'p1' from t1)";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#19399 "Stored Procedures 'Lost Connection' when dropping/creating
							 | 
						|||
| 
								 | 
							
								#            tables"
							 | 
						|||
| 
								 | 
							
								# Check that multi-delete tables are also cleaned up before re-execution.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								# exact delete syntax is essential
							 | 
						|||
| 
								 | 
							
								prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								# the server crashed on  the next statement without the fix
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								# the problem was in memory corruption: repeat the test just in case
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Bug#6102 "Server crash with prepared statement and blank after
							 | 
						|||
| 
								 | 
							
								# function name"
							 | 
						|||
| 
								 | 
							
								# ensure that stored functions are cached when preparing a statement
							 | 
						|||
| 
								 | 
							
								# before we open tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a varchar(20)); 
							 | 
						|||
| 
								 | 
							
								insert into t1 values ('foo'); 
							 | 
						|||
| 
								 | 
							
								prepare stmt FROM 'SELECT char_length (a) FROM t1'; 
							 | 
						|||
| 
								 | 
							
								-- error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								prepare stmt2 FROM 'SELECT not_a_function (a) FROM t1'; 
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #6089: FOUND_ROWS returns wrong values when no table/view is used 
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								SELECT FOUND_ROWS();
							 | 
						|||
| 
								 | 
							
								execute stmt;                                                                   
							 | 
						|||
| 
								 | 
							
								SELECT FOUND_ROWS();                                                            
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#9096 "select doesn't return all matched records if prepared statements
							 | 
						|||
| 
								 | 
							
								# is used"
							 | 
						|||
| 
								 | 
							
								# The bug was is bad co-operation of the optimizer's algorithm which determines
							 | 
						|||
| 
								 | 
							
								# which keys can be used to execute a query, constants propagation
							 | 
						|||
| 
								 | 
							
								# part of the optimizer and parameter markers used by prepared statements.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								create table t1 (c1 int(11) not null, c2 int(11) not null,
							 | 
						|||
| 
								 | 
							
								             primary key  (c1,c2), key c2 (c2), key c1 (c1));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t1 values (200887, 860);
							 | 
						|||
| 
								 | 
							
								insert into t1 values (200887, 200887);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								select * from t1 where (c1=200887 and c2=200887) or c2=860;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								"select * from t1 where (c1=200887 and c2=200887) or c2=860";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								"select * from t1 where (c1=200887 and c2=?) or c2=?";
							 | 
						|||
| 
								 | 
							
								set @a=200887, @b=860;
							 | 
						|||
| 
								 | 
							
								# this query did not return all matching rows
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#9777 - another occurrence of the problem stated in Bug#9096:
							 | 
						|||
| 
								 | 
							
								# we can not compare basic constants by their names, because a placeholder
							 | 
						|||
| 
								 | 
							
								# is a basic constant while his name is always '?'
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1 (
							 | 
						|||
| 
								 | 
							
								   id bigint(20) not null auto_increment,
							 | 
						|||
| 
								 | 
							
								   code varchar(20) character set utf8 collate utf8_bin not null default '',
							 | 
						|||
| 
								 | 
							
								   company_name varchar(250) character set utf8 collate utf8_bin default null,
							 | 
						|||
| 
								 | 
							
								   setup_mode tinyint(4) default null,
							 | 
						|||
| 
								 | 
							
								   start_date datetime default null,
							 | 
						|||
| 
								 | 
							
								   primary key  (id), unique key code (code)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t2 (
							 | 
						|||
| 
								 | 
							
								   id bigint(20) not null auto_increment,
							 | 
						|||
| 
								 | 
							
								   email varchar(250) character set utf8 collate utf8_bin default null,
							 | 
						|||
| 
								 | 
							
								   name varchar(250) character set utf8 collate utf8_bin default null,
							 | 
						|||
| 
								 | 
							
								   t1_id bigint(20) default null,
							 | 
						|||
| 
								 | 
							
								   password varchar(250) character set utf8 collate utf8_bin default null,
							 | 
						|||
| 
								 | 
							
								   primary_contact tinyint(4) not null default '0',
							 | 
						|||
| 
								 | 
							
								   email_opt_in tinyint(4) not null default '1',
							 | 
						|||
| 
								 | 
							
								   primary key  (id), unique key email (email), key t1_id (t1_id),
							 | 
						|||
| 
								 | 
							
								   constraint t2_fk1 foreign key (t1_id) references t1 (id)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t1 values
							 | 
						|||
| 
								 | 
							
								(1, 'demo', 'demo s', 0, current_date()),
							 | 
						|||
| 
								 | 
							
								(2, 'code2', 'name 2', 0, current_date()),
							 | 
						|||
| 
								 | 
							
								(3, 'code3', 'name 3', 0, current_date());
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t2 values
							 | 
						|||
| 
								 | 
							
								(2, 'email1', 'name1', 3, 'password1', 0, 0),
							 | 
						|||
| 
								 | 
							
								(3, 'email2', 'name1', 1, 'password2', 1, 0),
							 | 
						|||
| 
								 | 
							
								(5, 'email3', 'name3', 2, 'password3', 0, 0);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from 'select t2.id from t2, t1 where (t1.id=? and t2.t1_id=t1.id)';
							 | 
						|||
| 
								 | 
							
								set @a=1;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT
							 | 
						|||
| 
								 | 
							
								# UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ...
							 | 
						|||
| 
								 | 
							
								# SELECT with UNION".
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (id int);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "insert into t1 (id) select id from t1 union select id from t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#11458 "Prepared statement with subselects return random data":
							 | 
						|||
| 
								 | 
							
								# drop PARAM_TABLE_BIT from the list of tables used by a subquery
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (
							 | 
						|||
| 
								 | 
							
								  id int(11) unsigned not null primary key auto_increment,
							 | 
						|||
| 
								 | 
							
								  partner_id varchar(35) not null,
							 | 
						|||
| 
								 | 
							
								  t1_status_id int(10) unsigned
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t1 values ("1", "partner1", "10"), ("2", "partner2", "10"),
							 | 
						|||
| 
								 | 
							
								                      ("3", "partner3", "10"), ("4", "partner4", "10");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t2 (
							 | 
						|||
| 
								 | 
							
								  id int(11) unsigned not null default '0',
							 | 
						|||
| 
								 | 
							
								  t1_line_id int(11) unsigned not null default '0',
							 | 
						|||
| 
								 | 
							
								  article_id varchar(20),
							 | 
						|||
| 
								 | 
							
								  sequence int(11) not null default '0',
							 | 
						|||
| 
								 | 
							
								  primary key  (id,t1_line_id)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t2 values ("1", "1", "sup", "0"), ("2", "1", "sup", "1"),
							 | 
						|||
| 
								 | 
							
								                      ("2", "2", "sup", "2"), ("2", "3", "sup", "3"),
							 | 
						|||
| 
								 | 
							
								                      ("2", "4", "imp", "4"), ("3", "1", "sup", "0"),
							 | 
						|||
| 
								 | 
							
								                      ("4", "1", "sup", "0");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t3 (
							 | 
						|||
| 
								 | 
							
								  id int(11) not null default '0',
							 | 
						|||
| 
								 | 
							
								  preceeding_id int(11) not null default '0',
							 | 
						|||
| 
								 | 
							
								  primary key  (id,preceeding_id)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t4 (
							 | 
						|||
| 
								 | 
							
								  user_id varchar(50) not null,
							 | 
						|||
| 
								 | 
							
								  article_id varchar(20) not null,
							 | 
						|||
| 
								 | 
							
								  primary key  (user_id,article_id)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t4 values("nicke", "imp");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								'select distinct t1.partner_id
							 | 
						|||
| 
								 | 
							
								from t1 left join t3 on t1.id = t3.id
							 | 
						|||
| 
								 | 
							
								     left join t1 pp on pp.id = t3.preceeding_id
							 | 
						|||
| 
								 | 
							
								where
							 | 
						|||
| 
								 | 
							
								  exists (
							 | 
						|||
| 
								 | 
							
								    select *
							 | 
						|||
| 
								 | 
							
								    from t2 as pl_inner
							 | 
						|||
| 
								 | 
							
								    where pl_inner.id = t1.id
							 | 
						|||
| 
								 | 
							
								    and pl_inner.sequence <= (
							 | 
						|||
| 
								 | 
							
								      select min(sequence) from t2 pl_seqnr
							 | 
						|||
| 
								 | 
							
								      where pl_seqnr.id = t1.id
							 | 
						|||
| 
								 | 
							
								    )
							 | 
						|||
| 
								 | 
							
								    and exists (
							 | 
						|||
| 
								 | 
							
								      select * from t4
							 | 
						|||
| 
								 | 
							
								      where t4.article_id = pl_inner.article_id
							 | 
						|||
| 
								 | 
							
								      and t4.user_id = ?
							 | 
						|||
| 
								 | 
							
								    )
							 | 
						|||
| 
								 | 
							
								  )
							 | 
						|||
| 
								 | 
							
								  and t1.id = ?
							 | 
						|||
| 
								 | 
							
								group by t1.id
							 | 
						|||
| 
								 | 
							
								having count(pp.id) = 0';
							 | 
						|||
| 
								 | 
							
								set @user_id = 'nicke';
							 | 
						|||
| 
								 | 
							
								set @id = '2';
							 | 
						|||
| 
								 | 
							
								execute stmt using @user_id, @id;
							 | 
						|||
| 
								 | 
							
								execute stmt using @user_id, @id;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2, t3, t4;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#9379: make sure that Item::collation is reset when one sets
							 | 
						|||
| 
								 | 
							
								# a parameter marker from a string variable.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								prepare stmt from 'select ?=?';
							 | 
						|||
| 
								 | 
							
								set @a='CHRISTINE           ';
							 | 
						|||
| 
								 | 
							
								set @b='CHRISTINE';
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b;
							 | 
						|||
| 
								 | 
							
								set @a=1, @b=2;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b;
							 | 
						|||
| 
								 | 
							
								set @a='CHRISTINE           ';
							 | 
						|||
| 
								 | 
							
								set @b='CHRISTINE';
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#11299 "prepared statement makes wrong SQL syntax in binlog which stops
							 | 
						|||
| 
								 | 
							
								# replication": check that errouneous queries with placeholders are not
							 | 
						|||
| 
								 | 
							
								# allowed
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select ??";
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select ?FROM t1";
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select FROM t1 WHERE?=1";
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								prepare stmt from "update t1 set a=a+?WHERE 1";
							 | 
						|||
| 
								 | 
							
								--disable_ps_protocol
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								select ?;
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								select ??;
							 | 
						|||
| 
								 | 
							
								--error 1064
							 | 
						|||
| 
								 | 
							
								select ? from t1;
							 | 
						|||
| 
								 | 
							
								--enable_ps_protocol
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#9359 "Prepared statements take snapshot of system vars at PREPARE
							 | 
						|||
| 
								 | 
							
								# time"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select @@time_zone";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								set @@time_zone:='Japan';
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select @@tx_isolation";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								set transaction isolation level read committed;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								set transaction isolation level serializable;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								set @@tx_isolation=default;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#14410 "Crash in Enum or Set type in CREATE TABLE and PS/SP"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Part I. Make sure the typelib for ENUM is created in the statement memory
							 | 
						|||
| 
								 | 
							
								# root.
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create temporary table t1 (letter enum('','a','b','c')
							 | 
						|||
| 
								 | 
							
								not null)";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								# Part II. Make sure that when the default value is converted to UTF-8,
							 | 
						|||
| 
								 | 
							
								# the new item is # created in the statement memory root.
							 | 
						|||
| 
								 | 
							
								set names latin1;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create table t1 (a enum('test') default 'test')
							 | 
						|||
| 
								 | 
							
								 character set utf8";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								# Cleanup
							 | 
						|||
| 
								 | 
							
								set names default;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# A test case for Bug#12734 "prepared statement may return incorrect result
							 | 
						|||
| 
								 | 
							
								# set for a select SQL request": test that canDoTurboBM is reset for each
							 | 
						|||
| 
								 | 
							
								# execute of a prepared statement.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (
							 | 
						|||
| 
								 | 
							
								  word_id mediumint(8) unsigned not null default '0',
							 | 
						|||
| 
								 | 
							
								  formatted varchar(20) not null default ''
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t1 values
							 | 
						|||
| 
								 | 
							
								  (80,'pendant'), (475,'pretendants'), (989,'tendances'),
							 | 
						|||
| 
								 | 
							
								  (1019,'cependant'),(1022,'abondance'),(1205,'independants'),
							 | 
						|||
| 
								 | 
							
								  (13,'lessiver'),(25,'lambiner'),(46,'situer'),(71,'terminer'),
							 | 
						|||
| 
								 | 
							
								  (82,'decrocher');
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								select count(*) from t1 where formatted like '%NDAN%';
							 | 
						|||
| 
								 | 
							
								select count(*) from t1 where formatted like '%ER';
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select count(*) from t1 where formatted like ?";
							 | 
						|||
| 
								 | 
							
								set @like="%NDAN%";
							 | 
						|||
| 
								 | 
							
								execute stmt using @like;
							 | 
						|||
| 
								 | 
							
								set @like="%ER";
							 | 
						|||
| 
								 | 
							
								execute stmt using @like;
							 | 
						|||
| 
								 | 
							
								set @like="%NDAN%";
							 | 
						|||
| 
								 | 
							
								execute stmt using @like;
							 | 
						|||
| 
								 | 
							
								set @like="%ER";
							 | 
						|||
| 
								 | 
							
								execute stmt using @like;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#13134 "Length of VARCHAR() utf8 column is increasing when table is
							 | 
						|||
| 
								 | 
							
								# recreated with PS/SP"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from 'create table t1 (a varchar(10) character set utf8)';
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values (repeat('a', 20));
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								select length(a) from t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values (repeat('a', 20));
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								# Check that the data is truncated to the same length
							 | 
						|||
| 
								 | 
							
								select length(a) from t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#16248 "WHERE (col1,col2) IN ((?,?)) gives wrong results":
							 | 
						|||
| 
								 | 
							
								# check that ROW implementation is reexecution-friendly.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (col1 integer, col2 integer);
							 | 
						|||
| 
								 | 
							
								insert into t1 values(100,100),(101,101),(102,102),(103,103);
							 | 
						|||
| 
								 | 
							
								prepare stmt from 'select col1, col2 from t1 where (col1, col2) in ((?,?))';
							 | 
						|||
| 
								 | 
							
								set @a=100, @b=100;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a,@b;
							 | 
						|||
| 
								 | 
							
								set @a=101, @b=101;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a,@b;
							 | 
						|||
| 
								 | 
							
								set @a=102, @b=102;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a,@b;
							 | 
						|||
| 
								 | 
							
								set @a=102, @b=103;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a,@b;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#16365 Prepared Statements: DoS with too many open statements
							 | 
						|||
| 
								 | 
							
								# Check that the limit @@max_prpeared_stmt_count works.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# This is also the test for bug#23159 prepared_stmt_count should be
							 | 
						|||
| 
								 | 
							
								# status variable.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Save the old value
							 | 
						|||
| 
								 | 
							
								set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Disable prepared statement protocol: in this test we set
							 | 
						|||
| 
								 | 
							
								# @@max_prepared_stmt_count to 0 or 1 and would like to test the limit
							 | 
						|||
| 
								 | 
							
								# manually.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_ps_protocol
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# A. Check that the new variables are present in SHOW VARIABLES and
							 | 
						|||
| 
								 | 
							
								# SHOW STATUS lists.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								show variables like 'max_prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# B. Check that the new system variable is selectable.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# C. Check that max_prepared_stmt_count is settable (global only).
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=-1;
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=10000000000000000;
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=default;
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								--error ER_GLOBAL_VARIABLE
							 | 
						|||
| 
								 | 
							
								set @@max_prepared_stmt_count=1;
							 | 
						|||
| 
								 | 
							
								--error ER_GLOBAL_VARIABLE
							 | 
						|||
| 
								 | 
							
								set max_prepared_stmt_count=1;
							 | 
						|||
| 
								 | 
							
								--error ER_GLOBAL_VARIABLE
							 | 
						|||
| 
								 | 
							
								set local max_prepared_stmt_count=1;
							 | 
						|||
| 
								 | 
							
								# set to a reasonable limit works
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=1;
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# D. Check that the variables actually work.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=0;
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								--error ER_MAX_PREPARED_STMT_COUNT_REACHED
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1";
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=1;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1";
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								--error ER_MAX_PREPARED_STMT_COUNT_REACHED
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "select 1";
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# E. Check that we can prepare a statement with the same name 
							 | 
						|||
| 
								 | 
							
								# successfully, without hitting the limit.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1";
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 2";
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# F. We can set the max below the current count. In this case no new 
							 | 
						|||
| 
								 | 
							
								# statements should be allowed to prepare.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=0;
							 | 
						|||
| 
								 | 
							
								--error ER_MAX_PREPARED_STMT_COUNT_REACHED
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1";
							 | 
						|||
| 
								 | 
							
								# Result: the old statement is deallocated, the new is not created.
							 | 
						|||
| 
								 | 
							
								--error ER_UNKNOWN_STMT_HANDLER
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								--error ER_MAX_PREPARED_STMT_COUNT_REACHED
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1";
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# G. Show that the variables are up to date even after a connection with all
							 | 
						|||
| 
								 | 
							
								# statements in it was terminated.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count=3;
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connect (con1,localhost,root,,);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Switch to connection con1
							 | 
						|||
| 
								 | 
							
								connection con1;
							 | 
						|||
| 
								 | 
							
								let $con1_id=`SELECT CONNECTION_ID()`;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 2";
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "select 3";
							 | 
						|||
| 
								 | 
							
								--error ER_MAX_PREPARED_STMT_COUNT_REACHED
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from "select 4";
							 | 
						|||
| 
								 | 
							
								connection default;
							 | 
						|||
| 
								 | 
							
								--error ER_MAX_PREPARED_STMT_COUNT_REACHED 
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from "select 4";
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Disconnect connection con1 and switch to default connection
							 | 
						|||
| 
								 | 
							
								disconnect con1;
							 | 
						|||
| 
								 | 
							
								connection default;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Wait for the connection con1 to die
							 | 
						|||
| 
								 | 
							
								let $wait_condition=SELECT COUNT(*)=0 FROM information_schema.processlist WHERE id=$con1_id;
							 | 
						|||
| 
								 | 
							
								--source include/wait_condition.inc
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								select @@max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								show status like 'prepared_stmt_count';
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Restore the old value.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
							 | 
						|||
| 
								 | 
							
								--enable_ps_protocol
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#19399 "Stored Procedures 'Lost Connection' when dropping/creating
							 | 
						|||
| 
								 | 
							
								#            tables"
							 | 
						|||
| 
								 | 
							
								# Check that multi-delete tables are also cleaned up before re-execution.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								# exact delete syntax is essential
							 | 
						|||
| 
								 | 
							
								prepare stmt from "delete t1 from t1 where (cast(a1/3 as unsigned) * 3) = a1";
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								# the server crashed on  the next statement without the fix
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								# the problem was in memory corruption: repeat the test just in case
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table if not exists t1 (a1 int);
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop temporary table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#22085: Crash on the execution of a prepared statement that
							 | 
						|||
| 
								 | 
							
								#            uses an IN subquery with aggregate functions in HAVING 
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1(
							 | 
						|||
| 
								 | 
							
								  ID int(10) unsigned NOT NULL auto_increment,
							 | 
						|||
| 
								 | 
							
								  Member_ID varchar(15) NOT NULL default '',
							 | 
						|||
| 
								 | 
							
								  Action varchar(12) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  Action_Date datetime NOT NULL,
							 | 
						|||
| 
								 | 
							
								  Track varchar(15) default NULL,
							 | 
						|||
| 
								 | 
							
								  User varchar(12) default NULL,
							 | 
						|||
| 
								 | 
							
								  Date_Updated timestamp NOT NULL default CURRENT_TIMESTAMP on update
							 | 
						|||
| 
								 | 
							
								    CURRENT_TIMESTAMP,
							 | 
						|||
| 
								 | 
							
								  PRIMARY KEY (ID),
							 | 
						|||
| 
								 | 
							
								  KEY Action (Action),
							 | 
						|||
| 
								 | 
							
								  KEY Action_Date (Action_Date)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1(Member_ID, Action, Action_Date, Track) VALUES
							 | 
						|||
| 
								 | 
							
								  ('111111', 'Disenrolled', '2006-03-01', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('111111', 'Enrolled', '2006-03-01', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('111111', 'Disenrolled', '2006-07-03', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('222222', 'Enrolled', '2006-03-07', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('222222', 'Enrolled', '2006-03-07', 'CHF' ),
							 | 
						|||
| 
								 | 
							
								  ('222222', 'Disenrolled', '2006-08-02', 'CHF' ),
							 | 
						|||
| 
								 | 
							
								  ('333333', 'Enrolled', '2006-03-01', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('333333', 'Disenrolled', '2006-03-01', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('444444', 'Enrolled', '2006-03-01', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('555555', 'Disenrolled', '2006-03-01', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('555555', 'Enrolled', '2006-07-21', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('555555', 'Disenrolled', '2006-03-01', 'CHF' ),
							 | 
						|||
| 
								 | 
							
								  ('666666', 'Enrolled', '2006-02-09', 'CAD' ),
							 | 
						|||
| 
								 | 
							
								  ('666666', 'Enrolled', '2006-05-12', 'CHF' ),
							 | 
						|||
| 
								 | 
							
								  ('666666', 'Disenrolled', '2006-06-01', 'CAD' );
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE STMT FROM
							 | 
						|||
| 
								 | 
							
								"SELECT GROUP_CONCAT(Track SEPARATOR ', ') FROM t1
							 | 
						|||
| 
								 | 
							
								  WHERE Member_ID=? AND Action='Enrolled' AND
							 | 
						|||
| 
								 | 
							
								        (Track,Action_Date) IN (SELECT Track, MAX(Action_Date) FROM t1
							 | 
						|||
| 
								 | 
							
								                                  WHERE Member_ID=?
							 | 
						|||
| 
								 | 
							
								                                    GROUP BY Track 
							 | 
						|||
| 
								 | 
							
								                                      HAVING Track>='CAD' AND
							 | 
						|||
| 
								 | 
							
								                                             MAX(Action_Date)>'2006-03-01')";
							 | 
						|||
| 
								 | 
							
								SET @id='111111';
							 | 
						|||
| 
								 | 
							
								EXECUTE STMT USING @id,@id;
							 | 
						|||
| 
								 | 
							
								SET @id='222222';
							 | 
						|||
| 
								 | 
							
								EXECUTE STMT USING @id,@id;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE STMT;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#21354: (COUNT(*) = 1) not working in SELECT inside prepared
							 | 
						|||
| 
								 | 
							
								# statement 
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (i INT, INDEX(i));
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (COUNT(i) = 1), COUNT(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (AVG(i) = 1), AVG(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (VARIANCE(i) = 1), VARIANCE(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (STDDEV(i) = 1), STDDEV(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (BIT_OR(i) = 1), BIT_OR(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (BIT_AND(i) = 1), BIT_AND(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT (BIT_XOR(i) = 1), BIT_XOR(i) FROM t1 WHERE i = ?";
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								SET @a = 0;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#19182: CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work
							 | 
						|||
| 
								 | 
							
								# from stored procedure.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# The cause of a bug was that cached LEX::create_list was modified,
							 | 
						|||
| 
								 | 
							
								# and then together with LEX::key_list was reset.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (i INT);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE st_19182
							 | 
						|||
| 
								 | 
							
								FROM "CREATE TABLE t2 (i INT, j INT, KEY (i), KEY(j)) SELECT i FROM t1";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								EXECUTE st_19182;
							 | 
						|||
| 
								 | 
							
								DESC t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP TABLE t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Check that on second execution we don't loose 'j' column and the keys
							 | 
						|||
| 
								 | 
							
								# on 'i' and 'j' columns.
							 | 
						|||
| 
								 | 
							
								EXECUTE st_19182;
							 | 
						|||
| 
								 | 
							
								DESC t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE st_19182;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t2, t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Code which implemented CREATE/ALTER TABLE and CREATE DATABASE
							 | 
						|||
| 
								 | 
							
								# statement modified HA_CREATE_INFO structure in LEX, making these
							 | 
						|||
| 
								 | 
							
								# statements PS/SP-unsafe (their re-execution might have resulted
							 | 
						|||
| 
								 | 
							
								# in incorrect results).
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest;
							 | 
						|||
| 
								 | 
							
								drop table if exists t1, t2;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								# CREATE TABLE and CREATE TABLE ... SELECT
							 | 
						|||
| 
								 | 
							
								create database mysqltest character set utf8;
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from "create table mysqltest.t1 (c char(10))";
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from "create table mysqltest.t2 select 'test'";
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								execute stmt2;
							 | 
						|||
| 
								 | 
							
								show create table mysqltest.t1;
							 | 
						|||
| 
								 | 
							
								show create table mysqltest.t2;
							 | 
						|||
| 
								 | 
							
								drop table mysqltest.t1;
							 | 
						|||
| 
								 | 
							
								drop table mysqltest.t2;
							 | 
						|||
| 
								 | 
							
								alter database mysqltest character set latin1;
							 | 
						|||
| 
								 | 
							
								execute stmt1;
							 | 
						|||
| 
								 | 
							
								execute stmt2;
							 | 
						|||
| 
								 | 
							
								show create table mysqltest.t1;
							 | 
						|||
| 
								 | 
							
								show create table mysqltest.t2;
							 | 
						|||
| 
								 | 
							
								drop database mysqltest;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt2;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# CREATE TABLE with DATA DIRECTORY option
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								--disable_query_log
							 | 
						|||
| 
								 | 
							
								eval prepare stmt from "create table t1 (c char(10)) data directory='$MYSQLTEST_VARDIR/tmp'";
							 | 
						|||
| 
								 | 
							
								--enable_query_log
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# DATA DIRECTORY option does not always work: if the operating
							 | 
						|||
| 
								 | 
							
								# system does not support symlinks, have_symlinks option is automatically
							 | 
						|||
| 
								 | 
							
								# disabled.
							 | 
						|||
| 
								 | 
							
								# In this case DATA DIRECTORY is silently ignored when
							 | 
						|||
| 
								 | 
							
								# creating a table, and is not output by SHOW CREATE TABLE.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_result_log
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								--enable_result_log
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--disable_result_log
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								--enable_result_log
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #27937: crash on the second execution for prepared statement 
							 | 
						|||
| 
								 | 
							
								#             from UNION with ORDER BY an expression containing RAND()
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1(a int);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (2), (3), (1);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE st1 FROM
							 | 
						|||
| 
								 | 
							
								  '(SELECT a FROM t1) UNION (SELECT a+10 FROM t1) ORDER BY RAND()*0+a';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								EXECUTE st1;
							 | 
						|||
| 
								 | 
							
								EXECUTE st1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE st1;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #32137: prepared statement crash with str_to_date in update clause
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b tinyint);
							 | 
						|||
| 
								 | 
							
								prepare st1 from 'update t1 set b= (str_to_date(a, a))';
							 | 
						|||
| 
								 | 
							
								execute st1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare st1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo End of 4.1 tests.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								############################# 5.0 tests start ################################
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#6102 "Server crash with prepared statement and blank after
							 | 
						|||
| 
								 | 
							
								# function name"
							 | 
						|||
| 
								 | 
							
								# ensure that stored functions are cached when preparing a statement
							 | 
						|||
| 
								 | 
							
								# before we open tables
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a varchar(20)); 
							 | 
						|||
| 
								 | 
							
								insert into t1 values ('foo'); 
							 | 
						|||
| 
								 | 
							
								prepare stmt FROM 'SELECT char_length (a) FROM t1'; 
							 | 
						|||
| 
								 | 
							
								-- error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								prepare stmt2 FROM 'SELECT not_a_function (a) FROM t1'; 
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#8115: equality propagation and prepared statements
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1 (a char(3) not null, b char(3) not null,
							 | 
						|||
| 
								 | 
							
								                 c char(3) not null, primary key  (a, b, c));
							 | 
						|||
| 
								 | 
							
								create table t2 like t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# reduced query
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								  "select t1.a from (t1 left outer join t2 on t2.a=1 and t1.b=t2.b)
							 | 
						|||
| 
								 | 
							
								  where t1.a=1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# original query
							 | 
						|||
| 
								 | 
							
								prepare stmt from
							 | 
						|||
| 
								 | 
							
								"select t1.a, t1.b, t1.c, t2.a, t2.b, t2.c from
							 | 
						|||
| 
								 | 
							
								(t1 left outer join t2 on t2.a=? and t1.b=t2.b)
							 | 
						|||
| 
								 | 
							
								left outer join t2 t3 on t3.a=? where t1.a=?";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @a:=1, @b:=1, @c:=1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b, @c;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b, @c;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b, @c;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1,t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#9383: INFORMATION_SCHEMA.COLUMNS, JOIN, Crash, prepared statement
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								eval SET @aux= "SELECT COUNT(*)
							 | 
						|||
| 
								 | 
							
								                FROM INFORMATION_SCHEMA.COLUMNS A,
							 | 
						|||
| 
								 | 
							
								                INFORMATION_SCHEMA.COLUMNS B
							 | 
						|||
| 
								 | 
							
								                WHERE A.TABLE_SCHEMA = B.TABLE_SCHEMA
							 | 
						|||
| 
								 | 
							
								                AND A.TABLE_NAME = B.TABLE_NAME
							 | 
						|||
| 
								 | 
							
								                AND A.COLUMN_NAME = B.COLUMN_NAME AND
							 | 
						|||
| 
								 | 
							
								                A.TABLE_NAME = 'user'";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								let $exec_loop_count= 3;
							 | 
						|||
| 
								 | 
							
								eval prepare my_stmt from @aux;
							 | 
						|||
| 
								 | 
							
								while ($exec_loop_count)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  eval execute my_stmt;
							 | 
						|||
| 
								 | 
							
								  dec $exec_loop_count;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								deallocate prepare my_stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Test CALL in prepared mode
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop procedure if exists p1|
							 | 
						|||
| 
								 | 
							
								drop table if exists t1|
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (id int)|
							 | 
						|||
| 
								 | 
							
								insert into t1 values(1)|
							 | 
						|||
| 
								 | 
							
								create procedure p1(a int, b int)
							 | 
						|||
| 
								 | 
							
								begin
							 | 
						|||
| 
								 | 
							
								  declare c int;
							 | 
						|||
| 
								 | 
							
								  select max(id)+1 into c from t1;
							 | 
						|||
| 
								 | 
							
								  insert into t1 select a+b;
							 | 
						|||
| 
								 | 
							
								  insert into t1 select a-b;
							 | 
						|||
| 
								 | 
							
								  insert into t1 select a-c;
							 | 
						|||
| 
								 | 
							
								end|
							 | 
						|||
| 
								 | 
							
								set @a= 3, @b= 4|
							 | 
						|||
| 
								 | 
							
								prepare stmt from "call p1(?, ?)"|
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b|
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b|
							 | 
						|||
| 
								 | 
							
								select * from t1|
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt|
							 | 
						|||
| 
								 | 
							
								drop procedure p1|
							 | 
						|||
| 
								 | 
							
								drop table t1|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#7306 LIMIT ?, ? and also WL#1785 " Prepared statements: implement
							 | 
						|||
| 
								 | 
							
								# support for placeholders in LIMIT clause."
							 | 
						|||
| 
								 | 
							
								# Add basic test coverage for the feature.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								insert into t1 (a) values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 limit ?, ?";
							 | 
						|||
| 
								 | 
							
								set @offset=0, @limit=1;
							 | 
						|||
| 
								 | 
							
								execute stmt using @offset, @limit;
							 | 
						|||
| 
								 | 
							
								select * from t1 limit 0, 1;
							 | 
						|||
| 
								 | 
							
								set @offset=3, @limit=2;
							 | 
						|||
| 
								 | 
							
								execute stmt using @offset, @limit;
							 | 
						|||
| 
								 | 
							
								select * from t1 limit 3, 2;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 limit ?";
							 | 
						|||
| 
								 | 
							
								execute stmt using @limit;
							 | 
						|||
| 
								 | 
							
								--error 1235
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 where a in (select a from t1 limit ?)";
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 union all select * from t1 limit ?, ?";
							 | 
						|||
| 
								 | 
							
								set @offset=9;
							 | 
						|||
| 
								 | 
							
								set @limit=2;
							 | 
						|||
| 
								 | 
							
								execute stmt using @offset, @limit;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "(select * from t1 limit ?, ?) union all
							 | 
						|||
| 
								 | 
							
								                   (select * from t1 limit ?, ?) order by a limit ?";
							 | 
						|||
| 
								 | 
							
								execute stmt using @offset, @limit, @offset, @limit, @limit;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#12651
							 | 
						|||
| 
								 | 
							
								# (Crash on a PS including a subquery which is a select from a simple view)
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								CREATE TABLE b12651_T1(a int) ENGINE=MYISAM;
							 | 
						|||
| 
								 | 
							
								CREATE TABLE b12651_T2(b int) ENGINE=MYISAM;
							 | 
						|||
| 
								 | 
							
								CREATE VIEW  b12651_V1 as SELECT b FROM b12651_T2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE b12651 FROM 'SELECT 1 FROM b12651_T1 WHERE a IN (SELECT b FROM b12651_V1)';
							 | 
						|||
| 
								 | 
							
								EXECUTE b12651;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP VIEW b12651_V1;
							 | 
						|||
| 
								 | 
							
								DROP TABLE b12651_T1, b12651_T2;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE b12651;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #14956: ROW_COUNT() returns incorrect result after EXECUTE of prepared
							 | 
						|||
| 
								 | 
							
								# statement
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (id int);
							 | 
						|||
| 
								 | 
							
								prepare ins_call from "insert into t1 (id) values (1)";
							 | 
						|||
| 
								 | 
							
								execute ins_call;
							 | 
						|||
| 
								 | 
							
								select row_count();
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#16474: SP crashed MySQL
							 | 
						|||
| 
								 | 
							
								# (when using "order by localvar", where 'localvar' is just that.
							 | 
						|||
| 
								 | 
							
								# The actual bug test is in sp.test, this is just testing that we get the
							 | 
						|||
| 
								 | 
							
								# expected result for prepared statements too, i.e. place holders work as
							 | 
						|||
| 
								 | 
							
								# textual substitution. If it's a single integer, it works as the (deprecated)
							 | 
						|||
| 
								 | 
							
								# "order by column#", otherwise it's an expression.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								insert into t1 (a,b) values (2,8),(1,9),(3,7);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Will order by index
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 order by ?";
							 | 
						|||
| 
								 | 
							
								set @a=NULL;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								set @a=1;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								set @a=2;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								# For reference:
							 | 
						|||
| 
								 | 
							
								select * from t1 order by 1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Will not order by index.
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from t1 order by ?+1";
							 | 
						|||
| 
								 | 
							
								set @a=0;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								set @a=1;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								# For reference:
							 | 
						|||
| 
								 | 
							
								select * from t1 order by 1+1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#19308 "REPAIR/OPTIMIZE/ANALYZE supported in SP but not in PS".
							 | 
						|||
| 
								 | 
							
								# Add test coverage for the added commands.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								create table t2 like t1;
							 | 
						|||
| 
								 | 
							
								create table t3 like t2;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "repair table t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "optimize table t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "analyze table t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "repair table t1, t2, t3";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "optimize table t1, t2, t3";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "analyze table t1, t2, t3";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "repair table t1, t4, t3";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "optimize table t1, t3, t4";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "analyze table t4, t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2, t3;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#17199 "Table not found" error occurs if the query contains a call
							 | 
						|||
| 
								 | 
							
								#            to a function from another database.
							 | 
						|||
| 
								 | 
							
								#            Test prepared statements- related behaviour.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# ALTER TABLE RENAME and Prepared Statements: wrong DB name buffer was used
							 | 
						|||
| 
								 | 
							
								# in ALTER ... RENAME which caused memory corruption in prepared statements.
							 | 
						|||
| 
								 | 
							
								# No need to fix this problem in 4.1 as ALTER TABLE is not allowed in
							 | 
						|||
| 
								 | 
							
								# Prepared Statements in 4.1.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create database mysqltest_long_database_name_to_thrash_heap;
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								create table t1 (i int);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "alter table test.t1 rename t1";
							 | 
						|||
| 
								 | 
							
								use mysqltest_long_database_name_to_thrash_heap;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								prepare stmt from "alter table test.t1 rename t1";
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								use mysqltest_long_database_name_to_thrash_heap;
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Check that a prepared statement initializes its current database at
							 | 
						|||
| 
								 | 
							
								# PREPARE, and then works correctly even if the current database has been
							 | 
						|||
| 
								 | 
							
								# changed.
							 | 
						|||
| 
								 | 
							
								# 
							 | 
						|||
| 
								 | 
							
								use mysqltest_long_database_name_to_thrash_heap; 
							 | 
						|||
| 
								 | 
							
								# Necessary for preparation of INSERT/UPDATE/DELETE to succeed
							 | 
						|||
| 
								 | 
							
								prepare stmt_create from "create table t1 (i int)";
							 | 
						|||
| 
								 | 
							
								prepare stmt_insert from "insert into t1 (i) values (1)";
							 | 
						|||
| 
								 | 
							
								prepare stmt_update from "update t1 set i=2";
							 | 
						|||
| 
								 | 
							
								prepare stmt_delete from "delete from t1 where i=2";
							 | 
						|||
| 
								 | 
							
								prepare stmt_select from "select * from t1";
							 | 
						|||
| 
								 | 
							
								prepare stmt_alter from "alter table t1 add column (b int)";
							 | 
						|||
| 
								 | 
							
								prepare stmt_alter1 from "alter table t1 drop column b";
							 | 
						|||
| 
								 | 
							
								prepare stmt_analyze from "analyze table t1";
							 | 
						|||
| 
								 | 
							
								prepare stmt_optimize from "optimize table t1";
							 | 
						|||
| 
								 | 
							
								prepare stmt_show from "show tables like 't1'";
							 | 
						|||
| 
								 | 
							
								prepare stmt_truncate from "truncate table t1";
							 | 
						|||
| 
								 | 
							
								prepare stmt_drop from "drop table t1";
							 | 
						|||
| 
								 | 
							
								# Drop the table that was used to prepare INSERT/UPDATE/DELETE: we will
							 | 
						|||
| 
								 | 
							
								# create a new one by executing stmt_create
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								# Switch the current database
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								# Check that all prepared statements operate on the database that was
							 | 
						|||
| 
								 | 
							
								# active at PREPARE
							 | 
						|||
| 
								 | 
							
								execute stmt_create;
							 | 
						|||
| 
								 | 
							
								# should return empty set
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								use mysqltest_long_database_name_to_thrash_heap;
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								execute stmt_insert;
							 | 
						|||
| 
								 | 
							
								select * from mysqltest_long_database_name_to_thrash_heap.t1;
							 | 
						|||
| 
								 | 
							
								execute stmt_update;
							 | 
						|||
| 
								 | 
							
								select * from mysqltest_long_database_name_to_thrash_heap.t1;
							 | 
						|||
| 
								 | 
							
								execute stmt_delete;
							 | 
						|||
| 
								 | 
							
								execute stmt_select;
							 | 
						|||
| 
								 | 
							
								execute stmt_alter;
							 | 
						|||
| 
								 | 
							
								show columns from mysqltest_long_database_name_to_thrash_heap.t1;
							 | 
						|||
| 
								 | 
							
								execute stmt_alter1;
							 | 
						|||
| 
								 | 
							
								show columns from mysqltest_long_database_name_to_thrash_heap.t1;
							 | 
						|||
| 
								 | 
							
								execute stmt_analyze;
							 | 
						|||
| 
								 | 
							
								execute stmt_optimize;
							 | 
						|||
| 
								 | 
							
								execute stmt_show;
							 | 
						|||
| 
								 | 
							
								execute stmt_truncate;
							 | 
						|||
| 
								 | 
							
								execute stmt_drop;
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								use mysqltest_long_database_name_to_thrash_heap;
							 | 
						|||
| 
								 | 
							
								show tables like 't1';
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Attempt a statement PREPARE when there is no current database:
							 | 
						|||
| 
								 | 
							
								# is expected to return an error.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								drop database mysqltest_long_database_name_to_thrash_heap;
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_create from "create table t1 (i int)";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_insert from "insert into t1 (i) values (1)";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_update from "update t1 set i=2";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_delete from "delete from t1 where i=2";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_select from "select * from t1";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_alter from "alter table t1 add column (b int)";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_alter1 from "alter table t1 drop column b";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_analyze from "analyze table t1";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_optimize from "optimize table t1";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_show from "show tables like 't1'";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_truncate from "truncate table t1";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								prepare stmt_drop from "drop table t1";
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# The above has automatically deallocated all our statements.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Attempt to CREATE a temporary table when no DB used: it should fail
							 | 
						|||
| 
								 | 
							
								# This proves that no table can be used without explicit specification of
							 | 
						|||
| 
								 | 
							
								# its database if there is no current database. 
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--error ER_NO_DB_ERROR
							 | 
						|||
| 
								 | 
							
								create temporary table t1 (i int);
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Restore the old environemnt
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								use test;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#21166: Prepared statement causes signal 11 on second execution
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Changes in an item tree done by optimizer weren't properly
							 | 
						|||
| 
								 | 
							
								# registered and went unnoticed, which resulted in preliminary freeing
							 | 
						|||
| 
								 | 
							
								# of used memory.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2, t3;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (i BIGINT, j BIGINT);
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t2 (i BIGINT);
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t3 (i BIGINT, j BIGINT);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT * FROM t1 JOIN t2 ON (t2.i = t1.i)
							 | 
						|||
| 
								 | 
							
								                   LEFT JOIN t3 ON ((t3.i, t3.j) = (t1.i, t1.j))
							 | 
						|||
| 
								 | 
							
								                   WHERE t1.i = ?";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET @a= 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2, t3;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#21081: SELECT inside stored procedure returns wrong results
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (i INT KEY);
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t2 (i INT);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1), (2);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t2 VALUES (1);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT t2.i FROM t1 LEFT JOIN t2 ON t2.i = t1.i
							 | 
						|||
| 
								 | 
							
								                   WHERE t1.i = ?";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SET @arg= 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @arg;
							 | 
						|||
| 
								 | 
							
								SET @arg= 2;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @arg;
							 | 
						|||
| 
								 | 
							
								SET @arg= 1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @arg;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1, t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#20327: Marking of a wrong field leads to a wrong result on select with
							 | 
						|||
| 
								 | 
							
								#            view, prepared statement and subquery.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (i INT);
							 | 
						|||
| 
								 | 
							
								CREATE VIEW v1 AS SELECT * FROM t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1), (2);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								let $query = SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i
							 | 
						|||
| 
								 | 
							
								             WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1);
							 | 
						|||
| 
								 | 
							
								eval $query;
							 | 
						|||
| 
								 | 
							
								eval PREPARE stmt FROM "$query";
							 | 
						|||
| 
								 | 
							
								# Statement execution should return '1'.
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								# Check re-execution.
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP VIEW v1;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#21856: Prepared Statments: crash if bad create
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP PROCEDURE IF EXISTS p1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								let $iterations= 100;
							 | 
						|||
| 
								 | 
							
								--disable_query_log
							 | 
						|||
| 
								 | 
							
								--disable_result_log
							 | 
						|||
| 
								 | 
							
								while ($iterations)
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								  --error ER_PARSE_ERROR
							 | 
						|||
| 
								 | 
							
								  PREPARE stmt FROM "CREATE PROCEDURE p1()";
							 | 
						|||
| 
								 | 
							
								  dec $iterations;
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								--enable_query_log
							 | 
						|||
| 
								 | 
							
								--enable_result_log
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug 19764:  SHOW commands end up in the slow log as table scans
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								flush status;
							 | 
						|||
| 
								 | 
							
								prepare sq from 'show status like "slow_queries"';
							 | 
						|||
| 
								 | 
							
								execute sq;
							 | 
						|||
| 
								 | 
							
								prepare no_index from 'select 1 from information_schema.tables limit 1';
							 | 
						|||
| 
								 | 
							
								execute sq;
							 | 
						|||
| 
								 | 
							
								execute no_index;
							 | 
						|||
| 
								 | 
							
								execute sq;
							 | 
						|||
| 
								 | 
							
								deallocate prepare no_index;
							 | 
						|||
| 
								 | 
							
								deallocate prepare sq;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug 25027: query with a single-row non-correlated subquery
							 | 
						|||
| 
								 | 
							
								#            and IS NULL predicate
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (a int);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1), (2);
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t2 (b int);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t2 VALUES (NULL);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL;
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2) IS NULL';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM 'SELECT a FROM t1 WHERE (SELECT b FROM t2 limit ?) IS NULL';
							 | 
						|||
| 
								 | 
							
								SET @arg=1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt USING @arg;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1,t2;
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#4968 "Stored procedure crash if cursor opened on altered table"
							 | 
						|||
| 
								 | 
							
								# The bug is not repeatable any more after the fix for
							 | 
						|||
| 
								 | 
							
								# Bug#15217 "Bug #15217   Using a SP cursor on a table created with PREPARE
							 | 
						|||
| 
								 | 
							
								# fails with weird error", however ALTER TABLE is not re-execution friendly
							 | 
						|||
| 
								 | 
							
								# and that caused a valgrind warning. Check that the warning is gone.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (s1 char(20));
							 | 
						|||
| 
								 | 
							
								prepare stmt from "alter table t1 modify s1 int";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								prepare s_6895 from "alter table t1 drop column b";
							 | 
						|||
| 
								 | 
							
								execute s_6895;
							 | 
						|||
| 
								 | 
							
								show columns from t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								execute s_6895;
							 | 
						|||
| 
								 | 
							
								show columns from t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								execute s_6895;
							 | 
						|||
| 
								 | 
							
								show columns from t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare s_6895;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# 5.0 part of the test.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# ALTER TABLE
							 | 
						|||
| 
								 | 
							
								create table t1 (i int primary key auto_increment) comment='comment for table t1';
							 | 
						|||
| 
								 | 
							
								create table t2 (i int, j int, k int);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "alter table t1 auto_increment=100";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								# Let us trash table-cache's memory
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								select * from t2;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2;
							 | 
						|||
| 
								 | 
							
								# 5.1 part of the test.
							 | 
						|||
| 
								 | 
							
								# CREATE DATABASE
							 | 
						|||
| 
								 | 
							
								set @old_character_set_server= @@character_set_server;
							 | 
						|||
| 
								 | 
							
								set @@character_set_server= latin1; 
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create database mysqltest_1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create database mysqltest_1;
							 | 
						|||
| 
								 | 
							
								drop database mysqltest_1;
							 | 
						|||
| 
								 | 
							
								set @@character_set_server= utf8; 
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create database mysqltest_1;
							 | 
						|||
| 
								 | 
							
								drop database mysqltest_1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								set @@character_set_server= @old_character_set_server;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#24491 "using alias from source table in insert ... on duplicate key"
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop tables if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (id int primary key auto_increment, value varchar(10));
							 | 
						|||
| 
								 | 
							
								insert into t1 (id, value) values (1, 'FIRST'), (2, 'SECOND'), (3, 'THIRD');
							 | 
						|||
| 
								 | 
							
								# Let us prepare INSERT ... SELECT ... ON DUPLICATE KEY UPDATE statement
							 | 
						|||
| 
								 | 
							
								# which in its ON DUPLICATE KEY clause erroneously tries to assign value
							 | 
						|||
| 
								 | 
							
								# to a column which is mentioned only in SELECT part.
							 | 
						|||
| 
								 | 
							
								prepare stmt from "insert into t1 (id, value) select * from (select 4 as i, 'FOURTH' as v) as y on duplicate key update v = 'DUP'";
							 | 
						|||
| 
								 | 
							
								# Both first and second attempts to execute it should fail
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_FIELD_ERROR 
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_FIELD_ERROR
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								# And now the same test for more complex case which is more close
							 | 
						|||
| 
								 | 
							
								# to the one that was reported originally.
							 | 
						|||
| 
								 | 
							
								prepare stmt from "insert into t1 (id, value) select * from (select 4 as id, 'FOURTH' as value) as y on duplicate key update y.value = 'DUP'";
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_FIELD_ERROR 
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--error ER_BAD_FIELD_ERROR
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop tables t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #28509: strange behaviour: passing a decimal value to PS
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create table t1 select ?";
							 | 
						|||
| 
								 | 
							
								set @a=1.0;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a;
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#33798: prepared statements improperly handle large unsigned ints
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (a bigint unsigned, b bigint(20) unsigned);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "insert into t1 values (?,?)";
							 | 
						|||
| 
								 | 
							
								set @a= 9999999999999999;
							 | 
						|||
| 
								 | 
							
								set @b= 14632475938453979136;
							 | 
						|||
| 
								 | 
							
								insert into t1 values (@a, @b);
							 | 
						|||
| 
								 | 
							
								select * from t1 where a = @a and b = @b;
							 | 
						|||
| 
								 | 
							
								execute stmt using @a, @b;
							 | 
						|||
| 
								 | 
							
								select * from t1 where a = @a and b = @b;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#32890 Crash after repeated create and drop of tables and views
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop view if exists v1;
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1,1), (2,2), (3,3);
							 | 
						|||
| 
								 | 
							
								insert into t1 values (3,1), (1,2), (2,3);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 as select * from t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 (c,d) as select a,b from t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 (c) as select b+1 from t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 (c,d,e,f) as select a,b,a in (select a+2 from t1), a = all (select a from t1) from t1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create or replace view v1 as select 1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 as select 1, 1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 (x) as select a from t1 where a > 1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 as select * from `t1` `b`";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								show create view v1;
							 | 
						|||
| 
								 | 
							
								select * from v1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 (a,b,c) as select * from t1";
							 | 
						|||
| 
								 | 
							
								--error ER_VIEW_WRONG_LIST
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--error ER_VIEW_WRONG_LIST
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								create temporary table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 as select * from t1";
							 | 
						|||
| 
								 | 
							
								--error ER_VIEW_SELECT_TMPTABLE
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--error ER_VIEW_SELECT_TMPTABLE
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_TABLE
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 as select * from t1";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_TABLE
							 | 
						|||
| 
								 | 
							
								prepare stmt from "create view v1 as select * from `t1` `b`";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#33851: Passing UNSIGNED param to EXECUTE returns ERROR 1210
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select ?";
							 | 
						|||
| 
								 | 
							
								set @arg= 123456789.987654321;
							 | 
						|||
| 
								 | 
							
								select @arg;
							 | 
						|||
| 
								 | 
							
								execute stmt using @arg;
							 | 
						|||
| 
								 | 
							
								set @arg= "string";
							 | 
						|||
| 
								 | 
							
								select @arg;
							 | 
						|||
| 
								 | 
							
								execute stmt using @arg;
							 | 
						|||
| 
								 | 
							
								set @arg= 123456;
							 | 
						|||
| 
								 | 
							
								select @arg;
							 | 
						|||
| 
								 | 
							
								execute stmt using @arg;
							 | 
						|||
| 
								 | 
							
								set @arg= cast(-12345.54321 as decimal(20, 10));
							 | 
						|||
| 
								 | 
							
								select @arg;
							 | 
						|||
| 
								 | 
							
								execute stmt using @arg;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug#48508: Crash on prepared statement re-execution.
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								create table t1(b int);
							 | 
						|||
| 
								 | 
							
								insert into t1 values (0);
							 | 
						|||
| 
								 | 
							
								create view v1 AS select 1 as a from t1 where b;
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select * from v1 where a";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create table t1(a bigint);
							 | 
						|||
| 
								 | 
							
								create table t2(b tinyint);
							 | 
						|||
| 
								 | 
							
								insert into t2 values (null);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "select 1 from t1 join  t2 on a xor b where b > 1  and a =1";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1,t2;
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug #49570: Assertion failed: !(order->used & map)
							 | 
						|||
| 
								 | 
							
								--echo # on re-execution of prepared statement
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1(a INT PRIMARY KEY);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES(0), (1);
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM 
							 | 
						|||
| 
								 | 
							
								  "SELECT 1 FROM t1 JOIN t1 t2 USING(a) GROUP BY t2.a, t1.a";
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo End of 5.0 tests.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #20665: All commands supported in Stored Procedures should work in
							 | 
						|||
| 
								 | 
							
								# Prepared Statements
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() reset query cache;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int deterministic begin reset query cache; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int deterministic begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "reset query cache";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() reset master;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin reset master; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "reset master";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() reset slave;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin reset slave; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "reset slave";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1(a integer) kill a;
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								call proc_1(0);
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								call proc_1(0);
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								call proc_1(0);
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin kill 0; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								select func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								select func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								select func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "kill 0";
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								--error ER_NO_SUCH_THREAD
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush hosts;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush hosts; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush hosts";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush privileges;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush privileges; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush privileges";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush tables with read lock;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush tables with read lock; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush tables with read lock";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								unlock tables;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush tables;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush tables; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush tables";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush tables;
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush tables; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# make the output deterministic:
							 | 
						|||
| 
								 | 
							
								# the order used in SHOW OPEN TABLES
							 | 
						|||
| 
								 | 
							
								# is too much implementation dependent
							 | 
						|||
| 
								 | 
							
								--disable_ps_protocol
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								--enable_ps_protocol
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush tables";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								select Host, User from mysql.user limit 0;
							 | 
						|||
| 
								 | 
							
								select Host, Db from mysql.host limit 0;
							 | 
						|||
| 
								 | 
							
								show open tables from mysql;
							 | 
						|||
| 
								 | 
							
								flush tables;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush logs;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush logs; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush logs";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush status;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush status; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush status";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush slave;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush slave; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush slave";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush master;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush master; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush master";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush des_key_file;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush des_key_file; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush des_key_file";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() flush user_resources;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin flush user_resources; return 1; end|
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin call proc_1(); return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "flush user_resources";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() start slave;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin start slave; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "start slave";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() stop slave;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin stop slave; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "stop slave";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show binlog events;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show binlog events; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show binlog events";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show slave status;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show slave status; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show slave status";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show master status;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show master status; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show master status";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show master logs;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show master logs; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show master logs";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show events;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show events; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show events";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop procedure if exists a;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create procedure a() select 42;
							 | 
						|||
| 
								 | 
							
								create procedure proc_1(a char(2)) show create procedure a;
							 | 
						|||
| 
								 | 
							
								call proc_1("bb");
							 | 
						|||
| 
								 | 
							
								call proc_1("bb");
							 | 
						|||
| 
								 | 
							
								call proc_1("bb");
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show create procedure a; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show create procedure a";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								drop procedure a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop function if exists a;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create function a() returns int return 42+13;
							 | 
						|||
| 
								 | 
							
								create procedure proc_1(a char(2)) show create function a;
							 | 
						|||
| 
								 | 
							
								call proc_1("bb");
							 | 
						|||
| 
								 | 
							
								call proc_1("bb");
							 | 
						|||
| 
								 | 
							
								call proc_1("bb");
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show create function a; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show create function a";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								drop function a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists tab1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table tab1(a int, b char(1), primary key(a,b));
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show create table tab1;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show create table tab1; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show create table tab1";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								drop table tab1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop view if exists v1;
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1(a int, b char(5));
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1, "one"), (1, "edno"), (2, "two"), (2, "dve");
							 | 
						|||
| 
								 | 
							
								create view v1 as
							 | 
						|||
| 
								 | 
							
								    (select a, count(*) from t1 group by a)
							 | 
						|||
| 
								 | 
							
								    union all
							 | 
						|||
| 
								 | 
							
								    (select b, count(*) from t1 group by b);
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show create view v1;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show create view v1; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "show create view v1";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								drop view v1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() install plugin my_plug soname 'some_plugin.so';
							 | 
						|||
| 
								 | 
							
								--replace_regex /(Can\'t open shared library).*$/\1/
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_OPEN_LIBRARY,ER_FEATURE_DISABLED
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--replace_regex /(Can\'t open shared library).*$/\1/
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_OPEN_LIBRARY,ER_FEATURE_DISABLED
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--replace_regex /(Can\'t open shared library).*$/\1/
							 | 
						|||
| 
								 | 
							
								--error ER_CANT_OPEN_LIBRARY,ER_FEATURE_DISABLED
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin install plugin my_plug soname '/tmp/plugin'; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "install plugin my_plug soname 'some_plugin.so'";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() uninstall plugin my_plug;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin uninstall plugin my_plug; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "uninstall plugin my_plug";
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() create database mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--error ER_DB_CREATE_EXISTS
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin create database mysqltest_xyz; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "create database mysqltest_xyz";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								--error ER_DB_CREATE_EXISTS
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop database if exists mysqltest_xyz;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b char(5));
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1, "one"), (2, "two"), (3, "three");
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() checksum table xyz;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin checksum table t1; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "checksum table t1";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() create user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--error ER_CANNOT_USER
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin create user pstest_xyz@localhost; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								prepare abc from "create user pstest_xyz@localhost";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								--error ER_CANNOT_USER
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop user pstest_xyz@localhost;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop event if exists xyz;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								#create procedure proc_1() create event xyz on schedule every 5 minute disable do select 123;
							 | 
						|||
| 
								 | 
							
								#call proc_1();
							 | 
						|||
| 
								 | 
							
								#drop event xyz;
							 | 
						|||
| 
								 | 
							
								#call proc_1();
							 | 
						|||
| 
								 | 
							
								#--error ER_EVENT_ALREADY_EXISTS
							 | 
						|||
| 
								 | 
							
								#call proc_1();
							 | 
						|||
| 
								 | 
							
								#drop event xyz;
							 | 
						|||
| 
								 | 
							
								#call proc_1();
							 | 
						|||
| 
								 | 
							
								#drop event xyz;
							 | 
						|||
| 
								 | 
							
								#drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_EVENT_RECURSION_FORBIDDEN
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin create event xyz on schedule at now() do select 123; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								select func_1(), func_1(), func_1() from dual;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								drop function func_1;
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPPORTED_PS
							 | 
						|||
| 
								 | 
							
								prepare abc from "create event xyz on schedule at now() do select 123";
							 | 
						|||
| 
								 | 
							
								--error ER_UNKNOWN_STMT_HANDLER
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop event if exists xyz;
							 | 
						|||
| 
								 | 
							
								create event xyz on schedule every 5 minute disable do select 123;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() alter event xyz comment 'xyz';
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop event xyz;
							 | 
						|||
| 
								 | 
							
								create event xyz on schedule every 5 minute disable do select 123;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop event xyz;
							 | 
						|||
| 
								 | 
							
								create event xyz on schedule every 5 minute disable do select 123;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop event xyz;
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin alter event xyz comment 'xyz'; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPPORTED_PS
							 | 
						|||
| 
								 | 
							
								prepare abc from "alter event xyz comment 'xyz'";
							 | 
						|||
| 
								 | 
							
								--error ER_UNKNOWN_STMT_HANDLER
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop event if exists xyz;
							 | 
						|||
| 
								 | 
							
								create event xyz on schedule every 5 minute disable do select 123;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() drop event xyz;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								create event xyz on schedule every 5 minute disable do select 123;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								--error ER_EVENT_DOES_NOT_EXIST
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin drop event xyz; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								--error ER_UNSUPPORTED_PS
							 | 
						|||
| 
								 | 
							
								prepare abc from "drop event xyz";
							 | 
						|||
| 
								 | 
							
								--error ER_UNKNOWN_STMT_HANDLER
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b char(5)) engine=myisam;
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1, "one"), (2, "two"), (3, "three");
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								SET GLOBAL new_cache.key_buffer_size=128*1024;
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() cache index t1 in new_cache;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								SET GLOBAL second_cache.key_buffer_size=128*1024;
							 | 
						|||
| 
								 | 
							
								prepare abc from "cache index t1 in second_cache";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								drop table if exists t2;
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b char(5)) engine=myisam;
							 | 
						|||
| 
								 | 
							
								insert into t1 values (1, "one"), (2, "two"), (3, "three");
							 | 
						|||
| 
								 | 
							
								create table t2 (a int, b char(5)) engine=myisam;
							 | 
						|||
| 
								 | 
							
								insert into t2 values (1, "one"), (2, "two"), (3, "three");
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() load index into cache t1 ignore leaves;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin load index into cache t1 ignore leaves; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								prepare abc from "load index into cache t2 ignore leaves";
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #21422: GRANT/REVOKE possible inside stored function, probably in a trigger
							 | 
						|||
| 
								 | 
							
								# This is disabled for now till it is resolved in 5.0
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#create procedure proc_1() grant all on *.* to abc@host;
							 | 
						|||
| 
								 | 
							
								#drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								#delimiter |;
							 | 
						|||
| 
								 | 
							
								#--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								#create function func_1() returns int begin grant all on *.* to abc@host; return 1; end|
							 | 
						|||
| 
								 | 
							
								#delimiter ;|
							 | 
						|||
| 
								 | 
							
								#prepare abc from "grant all on *.* to abc@host";
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								#create procedure proc_1() revoke all on *.* from abc@host;
							 | 
						|||
| 
								 | 
							
								#drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								#delimiter |;#--error ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
							 | 
						|||
| 
								 | 
							
								#create function func_1() returns int begin revoke all on *.* from abc@host; return 1; end|
							 | 
						|||
| 
								 | 
							
								#delimiter ;|
							 | 
						|||
| 
								 | 
							
								#prepare abc from "revoke all on *.* from abc@host";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show errors;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show errors; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								prepare abc from "show errors";
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								drop table if exists t2;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create procedure proc_1() show warnings;
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop table if exists t2;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop table if exists t1, t2;
							 | 
						|||
| 
								 | 
							
								call proc_1();
							 | 
						|||
| 
								 | 
							
								drop procedure proc_1;
							 | 
						|||
| 
								 | 
							
								delimiter |;
							 | 
						|||
| 
								 | 
							
								--error ER_SP_NO_RETSET
							 | 
						|||
| 
								 | 
							
								create function func_1() returns int begin show warnings; return 1; end|
							 | 
						|||
| 
								 | 
							
								delimiter ;|
							 | 
						|||
| 
								 | 
							
								prepare abc from "show warnings";
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop table if exists t2;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								drop table if exists t1, t2;
							 | 
						|||
| 
								 | 
							
								execute abc;
							 | 
						|||
| 
								 | 
							
								deallocate prepare abc;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug#22684: The Functions ENCODE, DECODE and FORMAT are not real functions
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @my_password="password";
							 | 
						|||
| 
								 | 
							
								set @my_data="clear text to encode";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt1 from 'select decode(encode(?, ?), ?)';
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @my_data, @my_password, @my_password;
							 | 
						|||
| 
								 | 
							
								set @my_data="more text to encode";
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @my_data, @my_password, @my_password;
							 | 
						|||
| 
								 | 
							
								set @my_password="new password";
							 | 
						|||
| 
								 | 
							
								execute stmt1 using @my_data, @my_password, @my_password;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								set @to_format="123456789.123456789";
							 | 
						|||
| 
								 | 
							
								set @dec=0;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt2 from 'select format(?, ?)';
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								set @dec=4;
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								set @dec=6;
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								set @dec=2;
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								set @to_format="100";
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								set @to_format="1000000";
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								set @to_format="10000";
							 | 
						|||
| 
								 | 
							
								execute stmt2 using @to_format, @dec;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# BUG#18326: Do not lock table for writing during prepare of statement
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								DROP TABLE IF EXISTS t1, t2;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (i INT);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1);
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t2 (i INT);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t2 VALUES (2);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								LOCK TABLE t1 READ, t2 WRITE;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connect (conn1, localhost, root, , );
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# Prepare never acquires the lock, and thus should not block.
							 | 
						|||
| 
								 | 
							
								PREPARE stmt1 FROM "SELECT i FROM t1";
							 | 
						|||
| 
								 | 
							
								PREPARE stmt2 FROM "INSERT INTO t2 (i) VALUES (3)";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# This should not block because READ lock on t1 is shared.
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# This should block because WRITE lock on t2 is exclusive.
							 | 
						|||
| 
								 | 
							
								send EXECUTE stmt2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection default;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SELECT * FROM t2;
							 | 
						|||
| 
								 | 
							
								UNLOCK TABLES;
							 | 
						|||
| 
								 | 
							
								let $wait_condition= SELECT COUNT(*) = 2 FROM t2;
							 | 
						|||
| 
								 | 
							
								--source include/wait_condition.inc
							 | 
						|||
| 
								 | 
							
								SELECT * FROM t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# DDL and DML works even if some client have a prepared statement
							 | 
						|||
| 
								 | 
							
								# referencing the table.
							 | 
						|||
| 
								 | 
							
								ALTER TABLE t1 ADD COLUMN j INT;
							 | 
						|||
| 
								 | 
							
								ALTER TABLE t2 ADD COLUMN j INT;
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (4, 5);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t2 VALUES (4, 5);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection conn1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								reap;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt1;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt2;
							 | 
						|||
| 
								 | 
							
								SELECT * FROM t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								disconnect conn1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								connection default;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1, t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #24879 Prepared Statements: CREATE TABLE (UTF8 KEY) produces a growing
							 | 
						|||
| 
								 | 
							
								# key length
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Test that parse information is not altered by subsequent executions of a
							 | 
						|||
| 
								 | 
							
								# prepared statement
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								prepare stmt
							 | 
						|||
| 
								 | 
							
								from "create table t1 (c char(100) character set utf8, key (c(10)))";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								show create table t1;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Bug #32030 DELETE does not return an error and deletes rows if error
							 | 
						|||
| 
								 | 
							
								# evaluating WHERE
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								# Test that there is an error for prepared delete just like for the normal
							 | 
						|||
| 
								 | 
							
								# one.
							 | 
						|||
| 
								 | 
							
								#
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1, t2;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (a int, b int);
							 | 
						|||
| 
								 | 
							
								create table t2 like t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t1 (a, b) values (1,1), (1,2), (1,3), (1,4), (1,5),
							 | 
						|||
| 
								 | 
							
								       (2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								insert into t2 select a, max(b) from t1 group by a;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare stmt from "delete from t2 where (select (select max(b) from t1 group
							 | 
						|||
| 
								 | 
							
								by a having a < 2) x from t1) > 10000";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--error ER_SUBQUERY_NO_1_ROW
							 | 
						|||
| 
								 | 
							
								delete from t2 where (select (select max(b) from t1 group
							 | 
						|||
| 
								 | 
							
								by a having a < 2) x from t1) > 10000;
							 | 
						|||
| 
								 | 
							
								--error ER_SUBQUERY_NO_1_ROW
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								--error ER_SUBQUERY_NO_1_ROW
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1, t2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug#27430 Crash in subquery code when in PS and table DDL changed
							 | 
						|||
| 
								 | 
							
								--echo # after PREPARE
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # This part of the test doesn't work in embedded server, this is
							 | 
						|||
| 
								 | 
							
								--echo # why it's here. For the main test see ps_ddl*.test
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								drop table if exists t1;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								create table t1 (a int);
							 | 
						|||
| 
								 | 
							
								prepare stmt from "show events where (1) in (select * from t1)";
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								create table t1 (x int);
							 | 
						|||
| 
								 | 
							
								execute stmt;
							 | 
						|||
| 
								 | 
							
								drop table t1;
							 | 
						|||
| 
								 | 
							
								deallocate prepare stmt;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug#49141: Encode function is significantly slower in 5.1 compared to 5.0
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								prepare encode from "select encode(?, ?) into @ciphertext";
							 | 
						|||
| 
								 | 
							
								prepare decode from "select decode(?, ?) into @plaintext";
							 | 
						|||
| 
								 | 
							
								set @str="abc", @key="cba";
							 | 
						|||
| 
								 | 
							
								execute encode using @str, @key;
							 | 
						|||
| 
								 | 
							
								execute decode using @ciphertext, @key;
							 | 
						|||
| 
								 | 
							
								select @plaintext;
							 | 
						|||
| 
								 | 
							
								set @str="bcd", @key="dcb";
							 | 
						|||
| 
								 | 
							
								execute encode using @str, @key;
							 | 
						|||
| 
								 | 
							
								execute decode using @ciphertext, @key;
							 | 
						|||
| 
								 | 
							
								select @plaintext;
							 | 
						|||
| 
								 | 
							
								deallocate prepare encode;
							 | 
						|||
| 
								 | 
							
								deallocate prepare decode;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug#52124 memory leaks like a sieve in datetime, timestamp, time, date fields + warnings
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1 (a DATETIME NOT NULL, b TINYINT);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (0, 0),(0, 0);
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM "SELECT 1 FROM t1 WHERE
							 | 
						|||
| 
								 | 
							
								ROW(a, b) >= ROW('1', (SELECT 1 FROM t1 WHERE a > 1234))";
							 | 
						|||
| 
								 | 
							
								--disable_warnings
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								--enable_warnings
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug#54494 crash with explain extended and prepared statements
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1(a INT);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1),(2);
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM 'EXPLAIN EXTENDED SELECT 1 FROM t1 RIGHT JOIN t1 t2 ON 1';
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								--echo # Bug#54488 crash when using explain and prepared statements with subqueries
							 | 
						|||
| 
								 | 
							
								--echo #
							 | 
						|||
| 
								 | 
							
								CREATE TABLE t1(f1 INT);
							 | 
						|||
| 
								 | 
							
								INSERT INTO t1 VALUES (1),(1);
							 | 
						|||
| 
								 | 
							
								PREPARE stmt FROM 'EXPLAIN SELECT 1 FROM t1 WHERE (SELECT (SELECT 1 FROM t1 GROUP BY f1))';
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								EXECUTE stmt;
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE stmt;
							 | 
						|||
| 
								 | 
							
								DROP TABLE t1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo End of 5.1 tests.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								--echo # Bug#13805127: Stored program cache produces wrong result in same THD
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PREPARE s1 FROM 
							 | 
						|||
| 
								 | 
							
								"
							 | 
						|||
| 
								 | 
							
								SELECT c1, t2.c2, count(c3)
							 | 
						|||
| 
								 | 
							
								FROM
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT 3 as c2 FROM dual WHERE @x = 1
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT 2       FROM dual WHERE @x = 1 OR @x = 2
							 | 
						|||
| 
								 | 
							
								  ) AS t1,
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00' AS c1, 3 as c2, 1 as c3 FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 02:00:00',       3,       2       FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00',       2,       1       FROM dual
							 | 
						|||
| 
								 | 
							
								  ) AS t2
							 | 
						|||
| 
								 | 
							
								WHERE t2.c2 = t1.c2
							 | 
						|||
| 
								 | 
							
								GROUP BY c1, c2
							 | 
						|||
| 
								 | 
							
								";
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								SET @x = 1;
							 | 
						|||
| 
								 | 
							
								SELECT c1, t2.c2, count(c3)
							 | 
						|||
| 
								 | 
							
								FROM
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT 3 as c2 FROM dual WHERE @x = 1
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT 2       FROM dual WHERE @x = 1 OR @x = 2
							 | 
						|||
| 
								 | 
							
								  ) AS t1,
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00' AS c1, 3 as c2, 1 as c3 FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 02:00:00',       3,       2       FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00',       2,       1       FROM dual
							 | 
						|||
| 
								 | 
							
								  ) AS t2
							 | 
						|||
| 
								 | 
							
								WHERE t2.c2 = t1.c2
							 | 
						|||
| 
								 | 
							
								GROUP BY c1, c2;
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								EXECUTE s1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								SET @x = 2;
							 | 
						|||
| 
								 | 
							
								SELECT c1, t2.c2, count(c3)
							 | 
						|||
| 
								 | 
							
								FROM
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT 3 as c2 FROM dual WHERE @x = 1
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT 2       FROM dual WHERE @x = 1 OR @x = 2
							 | 
						|||
| 
								 | 
							
								  ) AS t1,
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00' AS c1, 3 as c2, 1 as c3 FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 02:00:00',       3,       2       FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00',       2,       1       FROM dual
							 | 
						|||
| 
								 | 
							
								  ) AS t2
							 | 
						|||
| 
								 | 
							
								WHERE t2.c2 = t1.c2
							 | 
						|||
| 
								 | 
							
								GROUP BY c1, c2;
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								EXECUTE s1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								SET @x = 1;
							 | 
						|||
| 
								 | 
							
								SELECT c1, t2.c2, count(c3)
							 | 
						|||
| 
								 | 
							
								FROM
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT 3 as c2 FROM dual WHERE @x = 1
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT 2       FROM dual WHERE @x = 1 OR @x = 2
							 | 
						|||
| 
								 | 
							
								  ) AS t1,
							 | 
						|||
| 
								 | 
							
								  (
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00' AS c1, 3 as c2, 1 as c3 FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 02:00:00',       3,       2       FROM dual
							 | 
						|||
| 
								 | 
							
								  UNION
							 | 
						|||
| 
								 | 
							
								  SELECT '2012-03-01 01:00:00',       2,       1       FROM dual
							 | 
						|||
| 
								 | 
							
								  ) AS t2
							 | 
						|||
| 
								 | 
							
								WHERE t2.c2 = t1.c2
							 | 
						|||
| 
								 | 
							
								GROUP BY c1, c2;
							 | 
						|||
| 
								 | 
							
								--echo
							 | 
						|||
| 
								 | 
							
								EXECUTE s1;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DEALLOCATE PREPARE s1;
							 | 
						|||
| 
								 | 
							
								
							 |