mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
b9e210bbf3
ref->null_rejecting is a key_part_map. we need to check the bit corresponding to the particular store_key. Note that there are no store_key objects for const ref parts.
129 lines
2.8 KiB
Text
129 lines
2.8 KiB
Text
set @tmp_subselect_nulls=@@optimizer_switch;
|
|
set optimizer_switch='semijoin=off';
|
|
|
|
create table x1(k int primary key, d1 int, d2 int);
|
|
create table x2(k int primary key, d1 int, d2 int);
|
|
|
|
insert into x1 values
|
|
(10, 10, 10),
|
|
(20, 20, 20),
|
|
(21, 20, null),
|
|
(30, null, 30),
|
|
(40, 40, 40);
|
|
insert into x2 values
|
|
(10, 10, 10),
|
|
(20, 20, 20),
|
|
(21, 20, null),
|
|
(30, null, 30);
|
|
|
|
# Test various IN and EXISTS queries with NULL values and UNKNOWN
|
|
# Q1 T=(10, 20) U=(21,30) F=(40)
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2);
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2) is true;
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2) is false;
|
|
select *
|
|
from x1
|
|
where (d1, d2) in (select d1, d2
|
|
from x2) is unknown;
|
|
|
|
# Q2 T=(10, 20) U=(30) F=(21, 40)
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2);
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2) is true;
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2) is false;
|
|
select *
|
|
from x1
|
|
where d1 in (select d1
|
|
from x2
|
|
where x1.d2=x2.d2) is unknown;
|
|
|
|
# Q3 T=(10, 20) U=() F=(21, 30, 40)
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2);
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2) is true;
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2) is false;
|
|
select *
|
|
from x1
|
|
where 1 in (select 1
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2) is unknown;
|
|
|
|
# Q4 T=(10, 20) F=(21, 30, 40)
|
|
select *
|
|
from x1
|
|
where exists (select *
|
|
from x2
|
|
where x1.d1=x2.d1 and x1.d2=x2.d2);
|
|
|
|
set optimizer_switch= @tmp_subselect_nulls;
|
|
|
|
drop table x1;
|
|
drop table x2;
|
|
|
|
--echo #
|
|
--echo # MDEV-7339 Server crashes in Item_func_trig_cond::val_int
|
|
--echo #
|
|
select (select 1, 2) in (select 3, 4);
|
|
select (select NULL, NULL) in (select 3, 4);
|
|
|
|
--echo #
|
|
--echo # End of 5.5 tests
|
|
--echo #
|
|
|
|
--echo #
|
|
--echo # MDEV-32555 wrong result with an index and a partially null-rejecting condition
|
|
--echo #
|
|
|
|
create table t1 (a int primary key);
|
|
insert t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
|
|
create table t2 (
|
|
b int not null,
|
|
c int default null,
|
|
d int not null,
|
|
e int not null,
|
|
unique key (d,b,c)
|
|
);
|
|
|
|
insert t2 values (1,null,1,1),(1,null,2,2),(1,null,3,3),(1,null,4,4),(2,null,1,2),(3,null,1,3),(4,null,2,2),(4,null,1,4);
|
|
|
|
select (
|
|
select sum(t2_.e) from t2 t2_ where t2_.b = a and t2_.c <=> t2.c and t2_.d = 1
|
|
) x from t2 left join t1 on a = b;
|
|
|
|
drop table t1, t2;
|
|
|
|
--echo #
|
|
--echo # End of 10.10 tests
|
|
--echo #
|