mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
MDEV-19185: Pushdown constant function defined with subquery
The bug occurs because of the wrong pushdown of constant function defined with subquery from HAVING into WHERE. Subqueries can't be pushed into WHERE. To fix it with_subquery() call is added to check if the function contains subquery.
This commit is contained in:
parent
c84dde148f
commit
694d1a50bd
4 changed files with 36 additions and 4 deletions
|
@ -4625,3 +4625,19 @@ a MAX(t1.b) c
|
|||
1 22 3
|
||||
deallocate prepare stmt1;
|
||||
DROP TABLE t1,t3;
|
||||
#
|
||||
# MDEV-19185: pushdown constant function with subquery
|
||||
#
|
||||
CREATE TABLE t1 (pk INT, c1 VARCHAR(64));
|
||||
INSERT INTO t1 VALUES (1,'bbb'),(2,'aaa'),(3,'ccc');
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
SELECT pk
|
||||
FROM t1
|
||||
GROUP BY pk
|
||||
HAVING (1 NOT IN (SELECT COUNT(t1.c1) FROM (v1, t1)));
|
||||
pk
|
||||
1
|
||||
2
|
||||
3
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
|
|
|
@ -1301,3 +1301,20 @@ execute stmt1;
|
|||
deallocate prepare stmt1;
|
||||
|
||||
DROP TABLE t1,t3;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-19185: pushdown constant function with subquery
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (pk INT, c1 VARCHAR(64));
|
||||
INSERT INTO t1 VALUES (1,'bbb'),(2,'aaa'),(3,'ccc');
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
|
||||
SELECT pk
|
||||
FROM t1
|
||||
GROUP BY pk
|
||||
HAVING (1 NOT IN (SELECT COUNT(t1.c1) FROM (v1, t1)));
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
|
|
|
@ -9060,9 +9060,8 @@ bool Item_args::excl_dep_on_grouping_fields(st_select_lex *sel)
|
|||
{
|
||||
for (uint i= 0; i < arg_count; i++)
|
||||
{
|
||||
if (args[i]->type() == Item::SUBSELECT_ITEM ||
|
||||
(args[i]->type() == Item::FUNC_ITEM &&
|
||||
((Item_func *)args[i])->functype() == Item_func::UDF_FUNC))
|
||||
if (args[i]->type() == Item::FUNC_ITEM &&
|
||||
((Item_func *)args[i])->functype() == Item_func::UDF_FUNC)
|
||||
return false;
|
||||
if (args[i]->const_item())
|
||||
continue;
|
||||
|
|
|
@ -342,7 +342,7 @@ public:
|
|||
|
||||
bool excl_dep_on_grouping_fields(st_select_lex *sel)
|
||||
{
|
||||
if (has_rand_bit())
|
||||
if (has_rand_bit() || with_subquery())
|
||||
return false;
|
||||
return Item_args::excl_dep_on_grouping_fields(sel);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue