MDEV-11935: Queries in stored procedures with and EXISTS(SELECT * FROM VIEW) crashes and closes hte conneciton.
Use correct start point even for taken out from subselect items in process of exists2in conversion.
This commit is contained in:
parent
fdeeab01c0
commit
e5b877ce27
@ -7952,3 +7952,41 @@ set global table_open_cache= @tmp_toc;
|
||||
set global table_definition_cache= @tmp_tdc;
|
||||
drop procedure p1;
|
||||
drop table t1,t2,t3,t4,t5,t6;
|
||||
#
|
||||
# MDEV-11935: Queries in stored procedures with and
|
||||
# EXISTS(SELECT * FROM VIEW) crashes and closes hte conneciton.
|
||||
#
|
||||
CREATE TABLE ANY_TABLE (
|
||||
ENTITY_UID BIGINT NOT NULL
|
||||
);
|
||||
CREATE TABLE SECURITY_PATH(
|
||||
origid BIGINT UNSIGNED NOT NULL,
|
||||
destid BIGINT UNSIGNED NOT NULL,
|
||||
KEY (destid)
|
||||
);
|
||||
CREATE VIEW ENTITY_ACCESS (
|
||||
ENTITY_UID,
|
||||
OWNER_UID
|
||||
) AS
|
||||
SELECT SP1.origid,
|
||||
SP2.destid
|
||||
FROM SECURITY_PATH SP1
|
||||
JOIN SECURITY_PATH SP2 ON SP1.destid = SP2.origid
|
||||
;
|
||||
CREATE PROCEDURE SP_EXAMPLE_SELECT ()
|
||||
BEGIN
|
||||
SELECT *
|
||||
FROM ANY_TABLE AT1
|
||||
WHERE EXISTS ( SELECT *
|
||||
FROM ENTITY_ACCESS EA
|
||||
WHERE AT1.ENTITY_UID = EA.ENTITY_UID
|
||||
AND EA.OWNER_UID IS NULL );
|
||||
END
|
||||
//
|
||||
CALL SP_EXAMPLE_SELECT ();
|
||||
ENTITY_UID
|
||||
CALL SP_EXAMPLE_SELECT ();
|
||||
ENTITY_UID
|
||||
drop procedure SP_EXAMPLE_SELECT;
|
||||
drop view ENTITY_ACCESS;
|
||||
drop table ANY_TABLE, SECURITY_PATH;
|
||||
|
@ -9422,3 +9422,43 @@ drop procedure p1;
|
||||
|
||||
drop table t1,t2,t3,t4,t5,t6;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-11935: Queries in stored procedures with and
|
||||
--echo # EXISTS(SELECT * FROM VIEW) crashes and closes hte conneciton.
|
||||
--echo #
|
||||
|
||||
CREATE TABLE ANY_TABLE (
|
||||
ENTITY_UID BIGINT NOT NULL
|
||||
);
|
||||
CREATE TABLE SECURITY_PATH(
|
||||
origid BIGINT UNSIGNED NOT NULL,
|
||||
destid BIGINT UNSIGNED NOT NULL,
|
||||
KEY (destid)
|
||||
);
|
||||
CREATE VIEW ENTITY_ACCESS (
|
||||
ENTITY_UID,
|
||||
OWNER_UID
|
||||
) AS
|
||||
SELECT SP1.origid,
|
||||
SP2.destid
|
||||
FROM SECURITY_PATH SP1
|
||||
JOIN SECURITY_PATH SP2 ON SP1.destid = SP2.origid
|
||||
;
|
||||
--delimiter //
|
||||
CREATE PROCEDURE SP_EXAMPLE_SELECT ()
|
||||
BEGIN
|
||||
SELECT *
|
||||
FROM ANY_TABLE AT1
|
||||
WHERE EXISTS ( SELECT *
|
||||
FROM ENTITY_ACCESS EA
|
||||
WHERE AT1.ENTITY_UID = EA.ENTITY_UID
|
||||
AND EA.OWNER_UID IS NULL );
|
||||
END
|
||||
//
|
||||
--delimiter ;
|
||||
CALL SP_EXAMPLE_SELECT ();
|
||||
CALL SP_EXAMPLE_SELECT ();
|
||||
|
||||
drop procedure SP_EXAMPLE_SELECT;
|
||||
drop view ENTITY_ACCESS;
|
||||
drop table ANY_TABLE, SECURITY_PATH;
|
||||
|
@ -6628,7 +6628,7 @@ find_field_in_tables(THD *thd, Item_ident *item,
|
||||
if (!table_ref->belong_to_view &&
|
||||
!table_ref->belong_to_derived)
|
||||
{
|
||||
SELECT_LEX *current_sel= thd->lex->current_select;
|
||||
SELECT_LEX *current_sel= item->context->select_lex;
|
||||
SELECT_LEX *last_select= table_ref->select_lex;
|
||||
bool all_merged= TRUE;
|
||||
for (SELECT_LEX *sl= current_sel; sl && sl!=last_select;
|
||||
|
Loading…
x
Reference in New Issue
Block a user