mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-17222 Reproducible server crash in String_list::append_str or
in Field_iterator_table::create_item When IN predicate is converted to IN subquery we have to ensure that any item from the select list of the subquery has some name and this name is unique across the select list. This was not guaranteed by the code before the patch for MDEV-17222. If the name of an item of the select list was not set, and this happened for binary constants, then the server crashed. If the first row in the IN list contained the same constant in two different positions then the server returned an error message. This was fixed by providing all constants in the first row of the IN list with generated names.
This commit is contained in:
@@ -51,7 +51,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`1`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`_col_1`
|
||||||
explain extended select * from t1
|
explain extended select * from t1
|
||||||
where a in
|
where a in
|
||||||
(
|
(
|
||||||
@@ -98,7 +98,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) semi join ((values (1),(5)) `tvc_1`) where `test`.`t1`.`b` = `tvc_1`.`1`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) semi join ((values (1),(5)) `tvc_1`) where `test`.`t1`.`b` = `tvc_1`.`_col_1`
|
||||||
explain extended select * from t1
|
explain extended select * from t1
|
||||||
where a in
|
where a in
|
||||||
(
|
(
|
||||||
@@ -154,7 +154,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 6 100.00 Using where; Using join buffer (flat, BNL join)
|
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 6 100.00 Using where; Using join buffer (flat, BNL join)
|
||||||
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (3),(4)) `tvc_0` join `test`.`t2`) where `test`.`t2`.`b` = `tvc_0`.`3`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (3),(4)) `tvc_0` join `test`.`t2`) where `test`.`t2`.`b` = `tvc_0`.`_col_1`
|
||||||
explain extended select * from t1
|
explain extended select * from t1
|
||||||
where a in
|
where a in
|
||||||
(
|
(
|
||||||
@@ -211,7 +211,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2 100.00
|
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2 100.00
|
||||||
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`1`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`_col_1`
|
||||||
explain extended select * from
|
explain extended select * from
|
||||||
(
|
(
|
||||||
select *
|
select *
|
||||||
@@ -270,7 +270,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2 100.00
|
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2 100.00
|
||||||
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 with tvc_0 as (/* select#2 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` in (1,2))/* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`1`
|
Note 1003 with tvc_0 as (/* select#2 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` in (1,2))/* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`_col_1`
|
||||||
explain extended select * from
|
explain extended select * from
|
||||||
(
|
(
|
||||||
select *
|
select *
|
||||||
@@ -321,7 +321,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2 100.00
|
3 MATERIALIZED <derived4> ALL NULL NULL NULL NULL 2 100.00
|
||||||
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
4 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`1`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`_col_1`
|
||||||
explain extended select * from v2;
|
explain extended select * from v2;
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 2 100.00
|
1 PRIMARY <subquery3> ALL distinct_key NULL NULL NULL 2 100.00
|
||||||
@@ -386,7 +386,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 6 100.00 Using where; Using join buffer (flat, BNL join)
|
2 MATERIALIZED t1 ALL NULL NULL NULL NULL 6 100.00 Using where; Using join buffer (flat, BNL join)
|
||||||
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
5 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0` join `test`.`t1`) where `test`.`t1`.`a` = 1 and `test`.`t1`.`a` = `tvc_0`.`1`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1),(2)) `tvc_0` join `test`.`t1`) where `test`.`t1`.`a` = 1 and `test`.`t1`.`a` = `tvc_0`.`_col_1`
|
||||||
explain extended select * from t1
|
explain extended select * from t1
|
||||||
where a in
|
where a in
|
||||||
(
|
(
|
||||||
@@ -507,11 +507,11 @@ a b
|
|||||||
explain extended select * from t3 where a in (1,4);
|
explain extended select * from t3 where a in (1,4);
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 2 100.00
|
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 2 100.00
|
||||||
1 PRIMARY t3 ref idx idx 5 tvc_0.1 3 100.00
|
1 PRIMARY t3 ref idx idx 5 tvc_0._col_1 3 100.00
|
||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t3` semi join ((values (1),(4)) `tvc_0`) where `test`.`t3`.`a` = `tvc_0`.`1`
|
Note 1003 /* select#1 */ select `test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b` from `test`.`t3` semi join ((values (1),(4)) `tvc_0`) where `test`.`t3`.`a` = `tvc_0`.`_col_1`
|
||||||
# use vectors in IN predeicate
|
# use vectors in IN predeicate
|
||||||
set @@in_predicate_conversion_threshold= 4;
|
set @@in_predicate_conversion_threshold= 4;
|
||||||
select * from t1 where (a,b) in ((1,2),(3,4));
|
select * from t1 where (a,b) in ((1,2),(3,4));
|
||||||
@@ -524,7 +524,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 2 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1,2),(3,4)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`1` and `test`.`t1`.`b` = `tvc_0`.`2`
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` semi join ((values (1,2),(3,4)) `tvc_0`) where `test`.`t1`.`a` = `tvc_0`.`_col_1` and `test`.`t1`.`b` = `tvc_0`.`_col_2`
|
||||||
set @@in_predicate_conversion_threshold= 2;
|
set @@in_predicate_conversion_threshold= 2;
|
||||||
# trasformation works for the one IN predicate and doesn't work for the other
|
# trasformation works for the one IN predicate and doesn't work for the other
|
||||||
set @@in_predicate_conversion_threshold= 5;
|
set @@in_predicate_conversion_threshold= 5;
|
||||||
@@ -543,7 +543,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` semi join ((values (1,3),(8,0),(5,1)) `tvc_0`) where `test`.`t2`.`a` = `tvc_0`.`1` and `test`.`t2`.`c` = `tvc_0`.`3` and (`tvc_0`.`1`,`test`.`t2`.`b`) in (<cache>((1,2)),<cache>((8,9)))
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` semi join ((values (1,3),(8,0),(5,1)) `tvc_0`) where `test`.`t2`.`a` = `tvc_0`.`_col_1` and `test`.`t2`.`c` = `tvc_0`.`_col_2` and (`tvc_0`.`_col_1`,`test`.`t2`.`b`) in (<cache>((1,2)),<cache>((8,9)))
|
||||||
set @@in_predicate_conversion_threshold= 2;
|
set @@in_predicate_conversion_threshold= 2;
|
||||||
#
|
#
|
||||||
# mdev-14281: conversion of NOT IN predicate into subquery predicate
|
# mdev-14281: conversion of NOT IN predicate into subquery predicate
|
||||||
@@ -571,7 +571,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where !<expr_cache><`test`.`t1`.`a`,`test`.`t1`.`b`>(<in_optimizer>((`test`.`t1`.`a`,`test`.`t1`.`b`),(`test`.`t1`.`a`,`test`.`t1`.`b`) in ( <materialize> (/* select#2 */ select `tvc_0`.`1`,`tvc_0`.`2` from (values (1,2),(8,9),(5,1)) `tvc_0` ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where `test`.`t1`.`a` = `<subquery2>`.`1` and `test`.`t1`.`b` = `<subquery2>`.`2`))))
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where !<expr_cache><`test`.`t1`.`a`,`test`.`t1`.`b`>(<in_optimizer>((`test`.`t1`.`a`,`test`.`t1`.`b`),(`test`.`t1`.`a`,`test`.`t1`.`b`) in ( <materialize> (/* select#2 */ select `tvc_0`.`_col_1`,`tvc_0`.`_col_2` from (values (1,2),(8,9),(5,1)) `tvc_0` ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where `test`.`t1`.`a` = `<subquery2>`.`_col_1` and `test`.`t1`.`b` = `<subquery2>`.`_col_2`))))
|
||||||
explain extended select * from t1
|
explain extended select * from t1
|
||||||
where (a,b) not in (select * from (values (1,2),(8,9), (5,1)) as tvc_0);
|
where (a,b) not in (select * from (values (1,2),(8,9), (5,1)) as tvc_0);
|
||||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||||
@@ -593,7 +593,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where `test`.`t1`.`b` < 7 and !<expr_cache><`test`.`t1`.`a`,`test`.`t1`.`b`>(<in_optimizer>((`test`.`t1`.`a`,`test`.`t1`.`b`),(`test`.`t1`.`a`,`test`.`t1`.`b`) in ( <materialize> (/* select#2 */ select `tvc_0`.`1`,`tvc_0`.`2` from (values (1,2),(8,9),(5,1)) `tvc_0` ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where `test`.`t1`.`a` = `<subquery2>`.`1` and `test`.`t1`.`b` = `<subquery2>`.`2`))))
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b` from `test`.`t1` where `test`.`t1`.`b` < 7 and !<expr_cache><`test`.`t1`.`a`,`test`.`t1`.`b`>(<in_optimizer>((`test`.`t1`.`a`,`test`.`t1`.`b`),(`test`.`t1`.`a`,`test`.`t1`.`b`) in ( <materialize> (/* select#2 */ select `tvc_0`.`_col_1`,`tvc_0`.`_col_2` from (values (1,2),(8,9),(5,1)) `tvc_0` ), <primary_index_lookup>(`test`.`t1`.`a` in <temporary table> on distinct_key where `test`.`t1`.`a` = `<subquery2>`.`_col_1` and `test`.`t1`.`b` = `<subquery2>`.`_col_2`))))
|
||||||
select * from t2
|
select * from t2
|
||||||
where (a,c) not in ((1,2),(8,9), (5,1));
|
where (a,c) not in ((1,2),(8,9), (5,1));
|
||||||
a b c
|
a b c
|
||||||
@@ -609,11 +609,11 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
2 MATERIALIZED <derived3> ALL NULL NULL NULL NULL 3 100.00
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where !<expr_cache><`test`.`t2`.`a`,`test`.`t2`.`c`>(<in_optimizer>((`test`.`t2`.`a`,`test`.`t2`.`c`),(`test`.`t2`.`a`,`test`.`t2`.`c`) in ( <materialize> (/* select#2 */ select `tvc_0`.`1`,`tvc_0`.`2` from (values (1,2),(8,9),(5,1)) `tvc_0` ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where `test`.`t2`.`a` = `<subquery2>`.`1` and `test`.`t2`.`c` = `<subquery2>`.`2`))))
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where !<expr_cache><`test`.`t2`.`a`,`test`.`t2`.`c`>(<in_optimizer>((`test`.`t2`.`a`,`test`.`t2`.`c`),(`test`.`t2`.`a`,`test`.`t2`.`c`) in ( <materialize> (/* select#2 */ select `tvc_0`.`_col_1`,`tvc_0`.`_col_2` from (values (1,2),(8,9),(5,1)) `tvc_0` ), <primary_index_lookup>(`test`.`t2`.`a` in <temporary table> on distinct_key where `test`.`t2`.`a` = `<subquery2>`.`_col_1` and `test`.`t2`.`c` = `<subquery2>`.`_col_2`))))
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
set @@in_predicate_conversion_threshold= default;
|
set @@in_predicate_conversion_threshold= default;
|
||||||
#
|
#
|
||||||
# MDEV-14947: conversion of TVC with only NULL values
|
# MDEV-14947: conversion to TVC with only NULL values
|
||||||
#
|
#
|
||||||
CREATE TABLE t1 (i INT);
|
CREATE TABLE t1 (i INT);
|
||||||
INSERT INTO t1 VALUES (3), (2), (7);
|
INSERT INTO t1 VALUES (3), (2), (7);
|
||||||
@@ -633,11 +633,11 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
|||||||
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 5 100.00 Using where; FirstMatch(t1); Using join buffer (flat, BNL join)
|
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 5 100.00 Using where; FirstMatch(t1); Using join buffer (flat, BNL join)
|
||||||
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
3 DERIVED NULL NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join ((values (NULL),(NULL),(NULL),(NULL),(NULL)) `tvc_0`) where `test`.`t1`.`i` = `tvc_0`.`NULL`
|
Note 1003 /* select#1 */ select `test`.`t1`.`i` AS `i` from `test`.`t1` semi join ((values (NULL),(NULL),(NULL),(NULL),(NULL)) `tvc_0`) where `test`.`t1`.`i` = `tvc_0`.`_col_1`
|
||||||
SET in_predicate_conversion_threshold= default;
|
SET in_predicate_conversion_threshold= default;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
#
|
#
|
||||||
# MDEV-14835: conversion of TVC with BIGINT or YEAR values
|
# MDEV-14835: conversion to TVC with BIGINT or YEAR values
|
||||||
#
|
#
|
||||||
SET @@in_predicate_conversion_threshold= 2;
|
SET @@in_predicate_conversion_threshold= 2;
|
||||||
CREATE TABLE t1 (a BIGINT);
|
CREATE TABLE t1 (a BIGINT);
|
||||||
@@ -654,3 +654,36 @@ y
|
|||||||
2011
|
2011
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
SET @@in_predicate_conversion_threshold= default;
|
SET @@in_predicate_conversion_threshold= default;
|
||||||
|
#
|
||||||
|
# MDEV-17222: conversion to TVC with no names for constants
|
||||||
|
# conversion to TVC with the same constants in the first row
|
||||||
|
#
|
||||||
|
SET @@in_predicate_conversion_threshold= 2;
|
||||||
|
CREATE TABLE t1 (f BINARY(16)) ENGINE=MYISAM;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(x'BAE56AF2B1C2397D99D58E2A06761DDB'), (x'9B9B698BCCB939EE8F1EA56C1A2E5DAA'),
|
||||||
|
(x'A0A1C4FE39A239BABD3E0D8985E6BEA5');
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE f IN
|
||||||
|
(x'9B9B698BCCB939EE8F1EA56C1A2E5DAA', x'E2362DBAB5EA30B5804917A0A7D881E2',
|
||||||
|
x'B78B2EEAD13635088D93EA3309E24802', x'BAE56AF2B1C2397D99D58E2A06761DDB');
|
||||||
|
COUNT(*)
|
||||||
|
2
|
||||||
|
CREATE TABLE t2 (f1 BINARY(16), f2 BINARY(16)) ENGINE=MYISAM;
|
||||||
|
INSERT INTO t2 VALUES
|
||||||
|
(x'55FB3B14D6B83D39859E42533906350D', x'00F3458C47FA39DDBEAD918A13F8342E'),
|
||||||
|
(x'86052C062AAF368D84247ED0F6346A70', x'BF5C35045C6037C79E11026ABB9A3A4E');
|
||||||
|
SELECT COUNT(*) FROM t2 WHERE (f1,f2) IN
|
||||||
|
((x'9B9B698BCCB939EE8F1EA56C1A2E5DAA', x'E2362DBAB5EA30B5804917A0A7D881E2'),
|
||||||
|
(x'B78B2EEAD13635088D93EA3309E24802', x'BAE56AF2B1C2397D99D58E2A06761DDB'),
|
||||||
|
(x'55FB3B14D6B83D39859E42533906350D', x'00F3458C47FA39DDBEAD918A13F8342E'),
|
||||||
|
(x'1606014E7C4A312F83EDC9D91BBFCACA', x'33F6068E56FD3A1D8326517F0D81CB5A'));
|
||||||
|
COUNT(*)
|
||||||
|
1
|
||||||
|
CREATE TABLE t3 (f1 int, f2 int) ENGINE=MYISAM;
|
||||||
|
INSERT INTO t3 VALUES (2,5), (2,3), (1,2), (7,8), (1,1);
|
||||||
|
SELECT * FROM t3 WHERE (f1,f2) IN ((2, 2), (1, 2), (3, 5), (1, 1));
|
||||||
|
f1 f2
|
||||||
|
1 2
|
||||||
|
1 1
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
SET @@in_predicate_conversion_threshold= default;
|
||||||
|
@@ -320,7 +320,7 @@ drop table t1, t2, t3;
|
|||||||
set @@in_predicate_conversion_threshold= default;
|
set @@in_predicate_conversion_threshold= default;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-14947: conversion of TVC with only NULL values
|
--echo # MDEV-14947: conversion to TVC with only NULL values
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
CREATE TABLE t1 (i INT);
|
CREATE TABLE t1 (i INT);
|
||||||
@@ -342,7 +342,7 @@ SET in_predicate_conversion_threshold= default;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-14835: conversion of TVC with BIGINT or YEAR values
|
--echo # MDEV-14835: conversion to TVC with BIGINT or YEAR values
|
||||||
--echo #
|
--echo #
|
||||||
|
|
||||||
SET @@in_predicate_conversion_threshold= 2;
|
SET @@in_predicate_conversion_threshold= 2;
|
||||||
@@ -360,3 +360,39 @@ SELECT * FROM t2 WHERE y IN ('2009','2011');
|
|||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
SET @@in_predicate_conversion_threshold= default;
|
SET @@in_predicate_conversion_threshold= default;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-17222: conversion to TVC with no names for constants
|
||||||
|
--echo # conversion to TVC with the same constants in the first row
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET @@in_predicate_conversion_threshold= 2;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (f BINARY(16)) ENGINE=MYISAM;
|
||||||
|
INSERT INTO t1 VALUES
|
||||||
|
(x'BAE56AF2B1C2397D99D58E2A06761DDB'), (x'9B9B698BCCB939EE8F1EA56C1A2E5DAA'),
|
||||||
|
(x'A0A1C4FE39A239BABD3E0D8985E6BEA5');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t1 WHERE f IN
|
||||||
|
(x'9B9B698BCCB939EE8F1EA56C1A2E5DAA', x'E2362DBAB5EA30B5804917A0A7D881E2',
|
||||||
|
x'B78B2EEAD13635088D93EA3309E24802', x'BAE56AF2B1C2397D99D58E2A06761DDB');
|
||||||
|
|
||||||
|
CREATE TABLE t2 (f1 BINARY(16), f2 BINARY(16)) ENGINE=MYISAM;
|
||||||
|
INSERT INTO t2 VALUES
|
||||||
|
(x'55FB3B14D6B83D39859E42533906350D', x'00F3458C47FA39DDBEAD918A13F8342E'),
|
||||||
|
(x'86052C062AAF368D84247ED0F6346A70', x'BF5C35045C6037C79E11026ABB9A3A4E');
|
||||||
|
|
||||||
|
SELECT COUNT(*) FROM t2 WHERE (f1,f2) IN
|
||||||
|
((x'9B9B698BCCB939EE8F1EA56C1A2E5DAA', x'E2362DBAB5EA30B5804917A0A7D881E2'),
|
||||||
|
(x'B78B2EEAD13635088D93EA3309E24802', x'BAE56AF2B1C2397D99D58E2A06761DDB'),
|
||||||
|
(x'55FB3B14D6B83D39859E42533906350D', x'00F3458C47FA39DDBEAD918A13F8342E'),
|
||||||
|
(x'1606014E7C4A312F83EDC9D91BBFCACA', x'33F6068E56FD3A1D8326517F0D81CB5A'));
|
||||||
|
|
||||||
|
CREATE TABLE t3 (f1 int, f2 int) ENGINE=MYISAM;
|
||||||
|
INSERT INTO t3 VALUES (2,5), (2,3), (1,2), (7,8), (1,1);
|
||||||
|
|
||||||
|
SELECT * FROM t3 WHERE (f1,f2) IN ((2, 2), (1, 2), (3, 5), (1, 1));
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
|
SET @@in_predicate_conversion_threshold= default;
|
||||||
|
@@ -470,6 +470,7 @@ bool Item_func_in::create_value_list_for_tvc(THD *thd,
|
|||||||
|
|
||||||
for (uint i=1; i < arg_count; i++)
|
for (uint i=1; i < arg_count; i++)
|
||||||
{
|
{
|
||||||
|
char col_name[8];
|
||||||
List<Item> *tvc_value;
|
List<Item> *tvc_value;
|
||||||
if (!(tvc_value= new (thd->mem_root) List<Item>()))
|
if (!(tvc_value= new (thd->mem_root) List<Item>()))
|
||||||
return true;
|
return true;
|
||||||
@@ -480,13 +481,27 @@ bool Item_func_in::create_value_list_for_tvc(THD *thd,
|
|||||||
|
|
||||||
for (uint j=0; j < row_list->cols(); j++)
|
for (uint j=0; j < row_list->cols(); j++)
|
||||||
{
|
{
|
||||||
|
if (i == 1)
|
||||||
|
{
|
||||||
|
sprintf(col_name, "_col_%i", j+1);
|
||||||
|
row_list->element_index(j)->set_name(thd, col_name, strlen(col_name),
|
||||||
|
thd->charset());
|
||||||
|
}
|
||||||
if (tvc_value->push_back(row_list->element_index(j),
|
if (tvc_value->push_back(row_list->element_index(j),
|
||||||
thd->mem_root))
|
thd->mem_root))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tvc_value->push_back(args[i]->real_item()))
|
else
|
||||||
return true;
|
{
|
||||||
|
if (i == 1)
|
||||||
|
{
|
||||||
|
sprintf(col_name, "_col_%i", 1);
|
||||||
|
args[i]->set_name(thd, col_name, strlen(col_name), thd->charset());
|
||||||
|
}
|
||||||
|
if (tvc_value->push_back(args[i]->real_item()))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (values->push_back(tvc_value, thd->mem_root))
|
if (values->push_back(tvc_value, thd->mem_root))
|
||||||
return true;
|
return true;
|
||||||
|
Reference in New Issue
Block a user