mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
9fcda7fcc5
records if prepared statements is used". This fix changes equality evaluation method of basic constants from by-name to by-value, thus effectively enabling use of parameter markers in some optimizations (constants propagation, evaluation of possible keys for query). mysql-test/r/ps.result: Test results for the test case for Bug#9096 mysql-test/t/ps.test: A short test case for Bug#9096 "select doesn't return all matched records if prepared statements is used". The is enough to reproduce the glitch in update_ref_and_keys causing the bug to occur. sql/item.cc: Implement by-value equality evaluation of basic constants. This is needed to work with Item_param values. Until now Item_param was compared with other items by its name, which is always "?". The bug at hand showed up when an integer constant was created from one parameter marker (with value 200887 and name "?") and then compared by-name with another parameter marker (with value 860 and name "?"). True returned by this comparison resulted in a wrong table access method used to evaluate the query. Implement Item_param methods needed to emulate "basic constant" mode at full. sql/item.h: Change declaration of basic_const_item(): now it also widens its argument from const Item * to Item * if the argument is a basic constant. Declare eq() for all basic constatns, as long as now they are compared by value, not by name. Each constant needs its own comparison method. Declarations of Item_param methods needed to fully emulate a basic constant when parameter value is set. sql/item_func.cc: Fix wrong casts.
521 lines
16 KiB
Text
521 lines
16 KiB
Text
drop table if exists t1,t2;
|
||
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');
|
||
set @a=2;
|
||
prepare stmt1 from 'select * from t1 where a <= ?';
|
||
execute stmt1 using @a;
|
||
a b
|
||
1 one
|
||
2 two
|
||
set @a=3;
|
||
execute stmt1 using @a;
|
||
a b
|
||
1 one
|
||
2 two
|
||
3 three
|
||
deallocate prepare no_such_statement;
|
||
ERROR HY000: Unknown prepared statement handler (no_such_statement) given to DEALLOCATE PREPARE
|
||
execute stmt1;
|
||
ERROR HY000: Incorrect arguments to EXECUTE
|
||
prepare stmt2 from 'prepare nested_stmt from "select 1"';
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"select 1"' at line 1
|
||
prepare stmt2 from 'execute stmt1';
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'stmt1' at line 1
|
||
prepare stmt2 from 'deallocate prepare z';
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'z' at line 1
|
||
prepare stmt3 from 'insert into t1 values (?,?)';
|
||
set @arg1=5, @arg2='five';
|
||
execute stmt3 using @arg1, @arg2;
|
||
select * from t1 where a>3;
|
||
a b
|
||
4 four
|
||
5 five
|
||
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;
|
||
a b
|
||
4 four
|
||
55 five
|
||
prepare stmt4 from 'create table t2 (a int)';
|
||
execute stmt4;
|
||
prepare stmt4 from 'drop table t2';
|
||
execute stmt4;
|
||
execute stmt4;
|
||
ERROR 42S02: Unknown table 't2'
|
||
prepare stmt5 from 'select ? + a from t1';
|
||
set @a=1;
|
||
execute stmt5 using @a;
|
||
? + a
|
||
2
|
||
3
|
||
4
|
||
5
|
||
56
|
||
execute stmt5 using @no_such_var;
|
||
? + a
|
||
NULL
|
||
NULL
|
||
NULL
|
||
NULL
|
||
NULL
|
||
set @nullvar=1;
|
||
set @nullvar=NULL;
|
||
execute stmt5 using @nullvar;
|
||
? + a
|
||
NULL
|
||
NULL
|
||
NULL
|
||
NULL
|
||
NULL
|
||
set @nullvar2=NULL;
|
||
execute stmt5 using @nullvar2;
|
||
? + a
|
||
NULL
|
||
NULL
|
||
NULL
|
||
NULL
|
||
NULL
|
||
prepare stmt6 from 'select 1; select2';
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; select2' at line 1
|
||
prepare stmt6 from 'insert into t1 values (5,"five"); select2';
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; select2' at line 1
|
||
explain prepare stmt6 from 'insert into t1 values (5,"five"); select2';
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from 'insert into t1 values (5,"five"); select2'' at line 1
|
||
create table t2
|
||
(
|
||
a int
|
||
);
|
||
insert into t2 values (0);
|
||
set @arg00=NULL ;
|
||
prepare stmt1 from 'select 1 FROM t2 where a=?' ;
|
||
execute stmt1 using @arg00 ;
|
||
1
|
||
prepare stmt1 from @nosuchvar;
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
|
||
set @ivar= 1234;
|
||
prepare stmt1 from @ivar;
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1234' at line 1
|
||
set @fvar= 123.4567;
|
||
prepare stmt1 from @fvar;
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '123.4567' at line 1
|
||
drop table t1,t2;
|
||
PREPARE stmt1 FROM "select _utf8 'A' collate utf8_bin = ?";
|
||
set @var='A';
|
||
EXECUTE stmt1 USING @var;
|
||
_utf8 'A' collate utf8_bin = ?
|
||
1
|
||
DEALLOCATE PREPARE stmt1;
|
||
create table t1 (id int);
|
||
prepare stmt1 from "select FOUND_ROWS()";
|
||
select SQL_CALC_FOUND_ROWS * from t1;
|
||
id
|
||
execute stmt1;
|
||
FOUND_ROWS()
|
||
0
|
||
insert into t1 values (1);
|
||
select SQL_CALC_FOUND_ROWS * from t1;
|
||
id
|
||
1
|
||
execute stmt1;
|
||
FOUND_ROWS()
|
||
1
|
||
execute stmt1;
|
||
FOUND_ROWS()
|
||
1
|
||
deallocate prepare stmt1;
|
||
drop table t1;
|
||
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 ;
|
||
id select_type table type possible_keys key key_len ref rows Extra
|
||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||
6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||
5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
3 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
2 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
execute stmt1 ;
|
||
id select_type table type possible_keys key key_len ref rows Extra
|
||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||
6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||
5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
3 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
2 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
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;
|
||
id select_type table type possible_keys key key_len ref rows Extra
|
||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||
6 DERIVED NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||
5 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
4 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
3 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
2 DEPENDENT SUBQUERY t2 system NULL NULL NULL NULL 0 const row not found
|
||
deallocate prepare stmt1;
|
||
drop tables t1,t2;
|
||
set @arg00=1;
|
||
prepare stmt1 from ' create table t1 (m int) as select 1 as m ' ;
|
||
execute stmt1 ;
|
||
select m from t1;
|
||
m
|
||
1
|
||
drop table t1;
|
||
prepare stmt1 from ' create table t1 (m int) as select ? as m ' ;
|
||
execute stmt1 using @arg00;
|
||
select m from t1;
|
||
m
|
||
1
|
||
deallocate prepare stmt1;
|
||
drop table t1;
|
||
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;
|
||
name
|
||
1
|
||
6
|
||
select name from t1 where id=1 or id=6;
|
||
name
|
||
1
|
||
6
|
||
deallocate prepare stmt1;
|
||
drop table t1;
|
||
create table t1 ( a int primary key, b varchar(30)) engine = MYISAM ;
|
||
prepare stmt1 from ' show table status from test like ''t1%'' ';
|
||
execute stmt1;
|
||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||
t1 MyISAM 9 Dynamic 0 0 0 4294967295 1024 0 NULL # # # latin1_swedish_ci NULL
|
||
show table status from test like 't1%' ;
|
||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||
t1 MyISAM 9 Dynamic 0 0 0 4294967295 1024 0 NULL # # # latin1_swedish_ci NULL
|
||
deallocate prepare stmt1 ;
|
||
drop table t1;
|
||
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;
|
||
a b
|
||
execute stmt1;
|
||
a b
|
||
deallocate prepare stmt1;
|
||
drop table t1;
|
||
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;
|
||
prepare stmt1 from 'select 1';
|
||
prepare STMT1 from 'select 2';
|
||
execute sTmT1;
|
||
2
|
||
2
|
||
deallocate prepare StMt1;
|
||
deallocate prepare Stmt1;
|
||
ERROR HY000: Unknown prepared statement handler (Stmt1) given to DEALLOCATE PREPARE
|
||
set names utf8;
|
||
prepare `ü` from 'select 1234';
|
||
execute `ü` ;
|
||
1234
|
||
1234
|
||
set names latin1;
|
||
execute `<60>`;
|
||
1234
|
||
1234
|
||
set names default;
|
||
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;
|
||
a
|
||
execute stmt using @var;
|
||
a
|
||
deallocate prepare stmt;
|
||
drop table t1;
|
||
create table t1 (a bigint(20) not null primary key auto_increment);
|
||
insert into t1 (a) values (null);
|
||
select * from t1;
|
||
a
|
||
1
|
||
prepare stmt from "insert into t1 (a) values (?)";
|
||
set @var=null;
|
||
execute stmt using @var;
|
||
select * from t1;
|
||
a
|
||
1
|
||
2
|
||
drop table t1;
|
||
create table t1 (a timestamp not null);
|
||
prepare stmt from "insert into t1 (a) values (?)";
|
||
execute stmt using @var;
|
||
select * from t1;
|
||
deallocate prepare stmt;
|
||
drop table t1;
|
||
prepare stmt from "select 'abc' like convert('abc' using utf8)";
|
||
execute stmt;
|
||
'abc' like convert('abc' using utf8)
|
||
1
|
||
execute stmt;
|
||
'abc' like convert('abc' using utf8)
|
||
1
|
||
deallocate prepare stmt;
|
||
create table t1 ( a bigint );
|
||
prepare stmt from 'select a from t1 where a between ? and ?';
|
||
set @a=1;
|
||
execute stmt using @a, @a;
|
||
a
|
||
execute stmt using @a, @a;
|
||
a
|
||
execute stmt using @a, @a;
|
||
a
|
||
drop table t1;
|
||
deallocate prepare stmt;
|
||
create table t1 (a int);
|
||
prepare stmt from "select * from t1 where 1 > (1 in (SELECT * FROM t1))";
|
||
execute stmt;
|
||
a
|
||
execute stmt;
|
||
a
|
||
execute stmt;
|
||
a
|
||
drop table t1;
|
||
deallocate prepare stmt;
|
||
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;
|
||
execute stmt using @v;
|
||
id select_type table type possible_keys key key_len ref rows Extra
|
||
- - - - - - - - NULL Impossible WHERE
|
||
set @v=0;
|
||
execute stmt using @v;
|
||
id select_type table type possible_keys key key_len ref rows Extra
|
||
- - - - - - - - 4 Using where
|
||
set @v=5;
|
||
execute stmt using @v;
|
||
id select_type table type possible_keys key key_len ref rows Extra
|
||
- - - - - - - - NULL Impossible WHERE
|
||
drop table t1;
|
||
deallocate prepare stmt;
|
||
create table t1 (a int);
|
||
insert into t1 (a) values (1), (2), (3), (4);
|
||
set @precision=10000000000;
|
||
select rand(),
|
||
cast(rand(10)*@precision as unsigned integer),
|
||
cast(rand(a)*@precision as unsigned integer) from t1;
|
||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer)
|
||
- 6570515219 -
|
||
- 1282061302 -
|
||
- 6698761160 -
|
||
- 9647622201 -
|
||
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;
|
||
execute stmt using @var;
|
||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
||
- 6570515219 - 4054035371
|
||
- 1282061302 - 8716141803
|
||
- 6698761160 - 1418603212
|
||
- 9647622201 - 944590960
|
||
set @var=2;
|
||
execute stmt using @var;
|
||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
||
- 6570515219 1559528654 6555866465
|
||
- 1282061302 6238114970 1223466192
|
||
- 6698761160 6511989195 6449731873
|
||
- 9647622201 3845601374 8578261098
|
||
set @var=3;
|
||
execute stmt using @var;
|
||
rand() cast(rand(10)*@precision as unsigned integer) cast(rand(a)*@precision as unsigned integer) cast(rand(?)*@precision as unsigned integer)
|
||
- 6570515219 1559528654 9057697559
|
||
- 1282061302 6238114970 3730790581
|
||
- 6698761160 6511989195 1480860534
|
||
- 9647622201 3845601374 6211931236
|
||
drop table t1;
|
||
deallocate prepare stmt;
|
||
create database mysqltest1;
|
||
create table t1 (a int);
|
||
create table mysqltest1.t1 (a int);
|
||
select * from t1, mysqltest1.t1;
|
||
a a
|
||
prepare stmt from "select * from t1, mysqltest1.t1";
|
||
execute stmt;
|
||
a a
|
||
execute stmt;
|
||
a a
|
||
execute stmt;
|
||
a a
|
||
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';
|
||
a a
|
||
1.1 1.2
|
||
2.1 2.2
|
||
prepare stmt from
|
||
"select '1.1' as a, '1.2' as a UNION SELECT '2.1', '2.2'";
|
||
execute stmt;
|
||
a a
|
||
1.1 1.2
|
||
2.1 2.2
|
||
execute stmt;
|
||
a a
|
||
1.1 1.2
|
||
2.1 2.2
|
||
execute stmt;
|
||
a a
|
||
1.1 1.2
|
||
2.1 2.2
|
||
deallocate prepare stmt;
|
||
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;
|
||
execute stmt;
|
||
ERROR 42S01: Table 't2' already exists
|
||
drop table t2;
|
||
execute stmt;
|
||
drop table t1,t2;
|
||
deallocate prepare stmt;
|
||
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;
|
||
a
|
||
1
|
||
2
|
||
select found_rows();
|
||
found_rows()
|
||
10
|
||
execute stmt;
|
||
a
|
||
1
|
||
2
|
||
select found_rows();
|
||
found_rows()
|
||
10
|
||
execute stmt;
|
||
a
|
||
1
|
||
2
|
||
select found_rows();
|
||
found_rows()
|
||
10
|
||
deallocate prepare stmt;
|
||
drop table t1;
|
||
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;
|
||
prepare stmt from "select ? is null, ? is not null, ?";
|
||
select @no_such_var is null, @no_such_var is not null, @no_such_var;
|
||
@no_such_var is null @no_such_var is not null @no_such_var
|
||
1 0 NULL
|
||
execute stmt using @no_such_var, @no_such_var, @no_such_var;
|
||
? is null ? is not null ?
|
||
1 0 NULL
|
||
set @var='abc';
|
||
select @var is null, @var is not null, @var;
|
||
@var is null @var is not null @var
|
||
0 1 abc
|
||
execute stmt using @var, @var, @var;
|
||
? is null ? is not null ?
|
||
0 1 abc
|
||
set @var=null;
|
||
select @var is null, @var is not null, @var;
|
||
@var is null @var is not null @var
|
||
1 0 NULL
|
||
execute stmt using @var, @var, @var;
|
||
? is null ? is not null ?
|
||
1 0 NULL
|
||
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;
|
||
pnum
|
||
execute stmt;
|
||
pnum
|
||
execute stmt;
|
||
pnum
|
||
deallocate prepare stmt;
|
||
drop table t1, t2;
|
||
prepare stmt from "SELECT SQL_CALC_FOUND_ROWS 'foo' UNION SELECT 'bar' LIMIT 0";
|
||
execute stmt;
|
||
foo
|
||
SELECT FOUND_ROWS();
|
||
FOUND_ROWS()
|
||
2
|
||
execute stmt;
|
||
foo
|
||
SELECT FOUND_ROWS();
|
||
FOUND_ROWS()
|
||
2
|
||
deallocate prepare stmt;
|
||
drop table if exists t1;
|
||
Warnings:
|
||
Note 1051 Unknown table '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;
|
||
c1 c2
|
||
200887 860
|
||
200887 200887
|
||
prepare stmt from
|
||
"select * from t1 where (c1=200887 and c2=200887) or c2=860";
|
||
execute stmt;
|
||
c1 c2
|
||
200887 860
|
||
200887 200887
|
||
prepare stmt from
|
||
"select * from t1 where (c1=200887 and c2=?) or c2=?";
|
||
set @a=200887, @b=860;
|
||
execute stmt using @a, @b;
|
||
c1 c2
|
||
200887 860
|
||
200887 200887
|
||
deallocate prepare stmt;
|