mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
599a1384af
Analysis: The reason for the inefficent plan was that Item_subselect::is_expensive() didn't detect the special case when a subquery was optimized, but had no join plan because it either has no table, or its tables have been optimized away, or the optimizer detected that the result set is empty. Solution: Identify the special cases above in the Item_subselect::is_expensive(), and consider such degenerate subqueries inexpensive.
193 lines
5.8 KiB
Text
193 lines
5.8 KiB
Text
drop table if exists t1, t2;
|
|
CREATE TABLE t1(session_id char(9) NOT NULL);
|
|
INSERT INTO t1 VALUES ("abc");
|
|
SELECT * FROM t1;
|
|
session_id
|
|
abc
|
|
prepare st_1180 from 'SELECT * FROM t1 WHERE ?="1111" and session_id = "abc"';
|
|
set @arg1= 'abc';
|
|
execute st_1180 using @arg1;
|
|
session_id
|
|
set @arg1= '1111';
|
|
execute st_1180 using @arg1;
|
|
session_id
|
|
abc
|
|
set @arg1= 'abc';
|
|
execute st_1180 using @arg1;
|
|
session_id
|
|
drop table t1;
|
|
create table t1 (
|
|
c_01 char(6), c_02 integer, c_03 real, c_04 int(3), c_05 varchar(20),
|
|
c_06 date, c_07 char(1), c_08 real, c_09 int(11), c_10 time,
|
|
c_11 char(6), c_12 integer, c_13 real, c_14 int(3), c_15 varchar(20),
|
|
c_16 date, c_17 char(1), c_18 real, c_19 int(11), c_20 text);
|
|
prepare st_1644 from 'insert into t1 values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
|
|
set @arg01= 'row_1';
|
|
set @arg02= 1;
|
|
set @arg03= 1.1;
|
|
set @arg04= 111;
|
|
set @arg05= 'row_one';
|
|
set @arg06= '2004-10-12';
|
|
set @arg07= '1';
|
|
set @arg08= 1.1;
|
|
set @arg09= '100100100';
|
|
set @arg10= '12:34:56';
|
|
set @arg11= 'row_1';
|
|
set @arg12= 1;
|
|
set @arg13= 1.1;
|
|
set @arg14= 111;
|
|
set @arg15= 'row_one';
|
|
set @arg16= '2004-10-12';
|
|
set @arg17= '1';
|
|
set @arg18= 1.1;
|
|
set @arg19= '100100100';
|
|
set @arg20= '12:34:56';
|
|
execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
|
|
@arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
|
|
set @arg01= NULL;
|
|
set @arg02= NULL;
|
|
set @arg03= NULL;
|
|
set @arg04= NULL;
|
|
set @arg05= NULL;
|
|
set @arg06= NULL;
|
|
set @arg07= NULL;
|
|
set @arg08= NULL;
|
|
set @arg09= NULL;
|
|
set @arg10= NULL;
|
|
set @arg11= NULL;
|
|
set @arg12= NULL;
|
|
set @arg13= NULL;
|
|
set @arg14= NULL;
|
|
set @arg15= NULL;
|
|
set @arg16= NULL;
|
|
set @arg17= NULL;
|
|
set @arg18= NULL;
|
|
set @arg19= NULL;
|
|
set @arg20= NULL;
|
|
execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
|
|
@arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
|
|
set @arg01= 'row_3';
|
|
set @arg02= 3;
|
|
set @arg03= 3.3;
|
|
set @arg04= 333;
|
|
set @arg05= 'row_three';
|
|
set @arg06= '2004-10-12';
|
|
set @arg07= '3';
|
|
set @arg08= 3.3;
|
|
set @arg09= '300300300';
|
|
set @arg10= '12:34:56';
|
|
set @arg11= 'row_3';
|
|
set @arg12= 3;
|
|
set @arg13= 3.3;
|
|
set @arg14= 333;
|
|
set @arg15= 'row_three';
|
|
set @arg16= '2004-10-12';
|
|
set @arg17= '3';
|
|
set @arg18= 3.3;
|
|
set @arg19= '300300300';
|
|
set @arg20= '12:34:56';
|
|
execute st_1644 using @arg01, @arg02, @arg03, @arg04, @arg05, @arg06, @arg07, @arg08, @arg09, @arg10,
|
|
@arg11, @arg12, @arg13, @arg14, @arg15, @arg16, @arg17, @arg18, @arg19, @arg20;
|
|
select * from t1;
|
|
c_01 c_02 c_03 c_04 c_05 c_06 c_07 c_08 c_09 c_10 c_11 c_12 c_13 c_14 c_15 c_16 c_17 c_18 c_19 c_20
|
|
row_1 1 1.1 111 row_one 2004-10-12 1 1.1 100100100 12:34:56 row_1 1 1.1 111 row_one 2004-10-12 1 1.1 100100100 12:34:56
|
|
NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
|
|
row_3 3 3.3 333 row_three 2004-10-12 3 3.3 300300300 12:34:56 row_3 3 3.3 333 row_three 2004-10-12 3 3.3 300300300 12:34:56
|
|
drop table t1;
|
|
create table t1(
|
|
cola varchar(50) not null,
|
|
colb varchar(8) not null,
|
|
colc varchar(12) not null,
|
|
cold varchar(2) not null,
|
|
primary key (cola, colb, cold));
|
|
create table t2(
|
|
cola varchar(50) not null,
|
|
colb varchar(8) not null,
|
|
colc varchar(2) not null,
|
|
cold float,
|
|
primary key (cold));
|
|
insert into t1 values ('aaaa', 'yyyy', 'yyyy-dd-mm', 'R');
|
|
insert into t2 values ('aaaa', 'yyyy', 'R', 203), ('bbbb', 'zzzz', 'C', 201);
|
|
prepare st_1676 from 'select a.cola, a.colb, a.cold from t1 a, t2 b where a.cola = ? and a.colb = ? and a.cold = ? and b.cola = a.cola and b.colb = a.colb and b.colc = a.cold';
|
|
set @arg0= "aaaa";
|
|
set @arg1= "yyyy";
|
|
set @arg2= "R";
|
|
execute st_1676 using @arg0, @arg1, @arg2;
|
|
cola colb cold
|
|
aaaa yyyy R
|
|
drop table t1, t2;
|
|
create table t1 (a int primary key);
|
|
insert into t1 values (1);
|
|
explain select * from t1 where 3 in (select (1+1) union select 1);
|
|
id select_type table type possible_keys key key_len ref rows Extra
|
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
3 UNION NULL NULL NULL NULL NULL NULL NULL No tables used
|
|
NULL UNION RESULT <union2,3> ALL NULL NULL NULL NULL NULL
|
|
select * from t1 where 3 in (select (1+1) union select 1);
|
|
a
|
|
prepare st_18492 from 'select * from t1 where 3 in (select (1+1) union select 1)';
|
|
execute st_18492;
|
|
a
|
|
drop table t1;
|
|
create table t1 (a int, b varchar(4));
|
|
create table t2 (a int, b varchar(4), primary key(a));
|
|
prepare stmt1 from 'insert into t1 (a, b) values (?, ?)';
|
|
prepare stmt2 from 'insert into t2 (a, b) values (?, ?)';
|
|
set @intarg= 11;
|
|
set @varchararg= '2222';
|
|
execute stmt1 using @intarg, @varchararg;
|
|
execute stmt2 using @intarg, @varchararg;
|
|
set @intarg= 12;
|
|
execute stmt1 using @intarg, @UNDEFINED;
|
|
execute stmt2 using @intarg, @UNDEFINED;
|
|
set @intarg= 13;
|
|
execute stmt1 using @UNDEFINED, @varchararg;
|
|
execute stmt2 using @UNDEFINED, @varchararg;
|
|
ERROR 23000: Column 'a' cannot be null
|
|
set @intarg= 14;
|
|
set @nullarg= Null;
|
|
execute stmt1 using @UNDEFINED, @nullarg;
|
|
execute stmt2 using @nullarg, @varchararg;
|
|
ERROR 23000: Column 'a' cannot be null
|
|
select * from t1;
|
|
a b
|
|
11 2222
|
|
12 NULL
|
|
NULL 2222
|
|
NULL NULL
|
|
select * from t2;
|
|
a b
|
|
11 2222
|
|
12 NULL
|
|
drop table t1;
|
|
drop table t2;
|
|
CREATE TABLE t1 (a INT);
|
|
PREPARE stmt FROM 'select 1 from `t1` where `a` = any (select (@@tmpdir))';
|
|
EXECUTE stmt;
|
|
1
|
|
DEALLOCATE PREPARE stmt;
|
|
DROP TABLE t1;
|
|
CREATE TABLE t2 (a INT PRIMARY KEY);
|
|
INSERT INTO t2 VALUES (400000), (400001);
|
|
SET @@sort_buffer_size=400000;
|
|
CREATE FUNCTION p1(i INT) RETURNS INT
|
|
BEGIN
|
|
SET @@sort_buffer_size= i;
|
|
RETURN i + 1;
|
|
END|
|
|
SELECT * FROM t2 WHERE a = @@sort_buffer_size AND p1(@@sort_buffer_size + 1) > a - 1;
|
|
a
|
|
400000
|
|
DROP TABLE t2;
|
|
DROP FUNCTION p1;
|
|
SELECT CONCAT(@@sort_buffer_size);
|
|
CONCAT(@@sort_buffer_size)
|
|
400001
|
|
SELECT LEFT("12345", @@ft_boolean_syntax);
|
|
LEFT("12345", @@ft_boolean_syntax)
|
|
|
|
Warnings:
|
|
Warning 1292 Truncated incorrect INTEGER value: '+ -><()~*:""&|'
|
|
SET @@sort_buffer_size=DEFAULT;
|
|
End of 5.0 tests.
|