mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
bb2d3eaa30
BitKeeper/etc/ignore: auto-union BitKeeper/etc/logging_ok: auto-union Build-tools/Do-compile: Auto merged VC++Files/sql/mysqld.dsp: Auto merged client/Makefile.am: Auto merged client/mysql.cc: Auto merged BitKeeper/deleted/.del-acinclude.m4~f4ab416bac5003: Auto merged client/mysqltest.c: Auto merged include/my_base.h: Auto merged innobase/dict/dict0dict.c: Auto merged innobase/dict/dict0load.c: Auto merged innobase/include/dict0dict.h: Auto merged innobase/include/row0mysql.h: Auto merged innobase/os/os0file.c: Auto merged innobase/srv/srv0srv.c: Auto merged libmysql/libmysql.c: Auto merged myisam/mi_check.c: Auto merged myisam/mi_rnext_same.c: Auto merged myisam/mi_write.c: Auto merged myisam/sort.c: Auto merged mysql-test/mysql-test-run.sh: Auto merged mysql-test/r/ctype_ucs.result: Auto merged mysql-test/r/ctype_ujis.result: Auto merged mysql-test/r/gis-rtree.result: Auto merged mysql-test/r/group_by.result: Auto merged mysql-test/r/merge.result: Auto merged mysql-test/r/metadata.result: Auto merged mysql-test/r/ndb_alter_table.result: Auto merged mysql-test/r/ps_1general.result: Auto merged mysql-test/r/insert_update.result: Auto merged mysql-test/r/timezone2.result: Auto merged mysql-test/r/type_enum.result: Auto merged mysql-test/r/variables.result: Auto merged mysql-test/t/ctype_ucs.test: Auto merged mysql-test/t/merge.test: Auto merged mysql-test/t/ps_1general.test: Auto merged mysql-test/t/subselect.test: Auto merged mysql-test/t/system_mysql_db_fix.test: Auto merged mysql-test/t/variables.test: Auto merged ndb/include/ndbapi/NdbConnection.hpp: Auto merged ndb/include/ndbapi/NdbDictionary.hpp: Auto merged ndb/src/common/util/version.c: Auto merged ndb/src/kernel/blocks/dbacc/DbaccInit.cpp: Auto merged ndb/src/kernel/blocks/dbacc/Makefile.am: Auto merged ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Auto merged ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Auto merged ndb/src/kernel/blocks/dblqh/DblqhInit.cpp: Auto merged ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged ndb/src/kernel/blocks/dbtux/Dbtux.hpp: Auto merged ndb/src/ndbapi/NdbBlob.cpp: Auto merged ndb/src/ndbapi/NdbConnection.cpp: Auto merged ndb/src/ndbapi/NdbDictionary.cpp: Auto merged ndb/src/ndbapi/NdbDictionaryImpl.cpp: Auto merged ndb/src/ndbapi/NdbDictionaryImpl.hpp: Auto merged ndb/src/ndbapi/NdbOperationExec.cpp: Auto merged ndb/src/ndbapi/NdbScanOperation.cpp: Auto merged ndb/test/ndbapi/Makefile.am: Auto merged scripts/make_win_src_distribution.sh: Auto merged scripts/mysql_install_db.sh: Auto merged sql/field.cc: Auto merged sql/ha_innodb.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_ndbcluster.h: Auto merged sql/handler.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_create.h: Auto merged sql/item_func.cc: Auto merged sql/item_geofunc.cc: Auto merged sql/item_row.cc: Auto merged sql/item_strfunc.cc: Auto merged sql/item_strfunc.h: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/log.cc: Auto merged sql/log_event.cc: Auto merged sql/mysqld.cc: Auto merged sql/net_serv.cc: Auto merged sql/password.c: Auto merged sql/protocol.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.cc: Auto merged sql/slave.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_cache.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_derived.cc: Auto merged sql/sql_do.cc: Auto merged sql/sql_handler.cc: Auto merged sql/sql_help.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_repl.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_union.cc: Auto merged sql/examples/ha_archive.cc: Auto merged sql/strfunc.cc: Auto merged sql/table.cc: Auto merged sql/table.h: Auto merged sql/tztime.h: Auto merged sql/udf_example.cc: Auto merged sql/unireg.cc: Auto merged Makefile.am: Simple merge client/mysqldump.c: Simple merge configure.in: Simple merge libmysqld/lib_sql.cc: Automatic merge mysql-test/r/func_str.result: Automatic merge mysql-test/r/grant.result: simple merge mysql-test/r/multi_update.result: automatc merge mysql-test/r/ps.result: automatic merge mysql-test/r/ps_2myisam.result: Automatic merge mysql-test/r/ps_3innodb.result: Automatic merge mysql-test/r/ps_4heap.result: Automatic merge mysql-test/r/ps_5merge.result: Automatic merge mysql-test/r/ps_6bdb.result: Automatic merge mysql-test/r/ps_7ndb.result: Automatic merge mysql-test/r/show_check.result: Automatic merge mysql-test/r/subselect.result: Automatic merge mysql-test/t/grant.test: Automatic merge mysql-test/t/multi_update.test: Automatic merge mysql-test/t/ps.test: Automatic merge mysql-test/t/show_check.test: Automatic merge ndb/docs/wl2077.txt: merge ndb/src/mgmsrv/main.cpp: merge scripts/mysql_fix_privilege_tables.sh: merge sql/item.cc: Merge (difficult) sql/item.h: simple merge sql/item_cmpfunc.h: Automatic merge sql/item_subselect.cc: Simple merge sql/item_subselect.h: Automatic merge sql/mysql_priv.h: Simple merge sql/slave.h: Automatic merge sql/sql_base.cc: Removed code that was backported to 4.1 sql/sql_class.h: Merge (some code moved to sql_insert.cc) sql/sql_db.cc: simple merge sql/sql_insert.cc: Merge (difficult as logic had changed both in 4.1 and 5.0) Some coded moved here from sql_class.h sql/sql_parse.cc: Merge (difficult) sql/sql_prepare.cc: Simple merge sql/sql_select.cc: Automatic merge sql/sql_table.cc: Simple merge sql/sql_update.cc: Difficult merge because of different logic for multi-updates sql/sql_yacc.yy: Simple merge tests/client_test.c: Simple merge
499 lines
13 KiB
Text
499 lines
13 KiB
Text
#
|
||
# SQL Syntax for Prepared Statements test
|
||
#
|
||
--disable_warnings
|
||
drop table if exists t1,t2;
|
||
--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 1064
|
||
prepare stmt2 from 'prepare nested_stmt from "select 1"';
|
||
|
||
--error 1064
|
||
prepare stmt2 from 'execute stmt1';
|
||
|
||
--error 1064
|
||
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;
|
||
|
||
#
|
||
# 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(14), 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
|
||
#
|
||
|
||
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;
|
||
prepare stmt1 from "select * from t1 into outfile 'f1.txt'";
|
||
execute stmt1;
|
||
deallocate prepare stmt1;
|
||
drop table t1;
|
||
|
||
#
|
||
# 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>`;
|
||
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 + ?";
|
||
--replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
|
||
set @v=5;
|
||
execute stmt using @v;
|
||
--replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
|
||
set @v=0;
|
||
execute stmt using @v;
|
||
--replace_column 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 -
|
||
set @v=5;
|
||
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),
|
||
cast(rand(a)*@precision as unsigned integer) from t1;
|
||
prepare stmt from
|
||
"select rand(),
|
||
cast(rand(10)*@precision as unsigned integer),
|
||
cast(rand(a)*@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#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');
|
||
--error 1305
|
||
prepare stmt FROM 'SELECT char_length (a) FROM t1';
|
||
drop table t1;
|
||
|