diff --git a/mysql-test/main/cte_nonrecursive.result b/mysql-test/main/cte_nonrecursive.result index 992c218a10eed..59365d71be1da 100644 --- a/mysql-test/main/cte_nonrecursive.result +++ b/mysql-test/main/cte_nonrecursive.result @@ -2683,3 +2683,11 @@ cte as (select t1.a as t1a, t2.a as t2a from t as t1, t as t2 where t1.a=t2.a) select * from cte; ERROR 42S02: Table 'test.t' doesn't exist # End of 10.4 tests +# +# Start of 12.2 tests +# +# +# MDEV-38099: Assertion failed in st_select_lex::optimize_unflattened_subqueries +# +SELECT (WITH cte AS (SELECT RAND()) SELECT * FROM cte); +# End of 12.2 tests diff --git a/mysql-test/main/cte_nonrecursive.test b/mysql-test/main/cte_nonrecursive.test index 1816888626398..5950c71399141 100644 --- a/mysql-test/main/cte_nonrecursive.test +++ b/mysql-test/main/cte_nonrecursive.test @@ -2026,3 +2026,16 @@ drop table t,s; eval $q1; --echo # End of 10.4 tests + +--echo # +--echo # Start of 12.2 tests +--echo # + +--echo # +--echo # MDEV-38099: Assertion failed in st_select_lex::optimize_unflattened_subqueries +--echo # +--disable_result_log +SELECT (WITH cte AS (SELECT RAND()) SELECT * FROM cte); +--enable_result_log + +--echo # End of 12.2 tests diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 73d97861325ef..7779411ff8a98 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -11130,6 +11130,8 @@ void st_select_lex::register_unit(SELECT_LEX_UNIT *unit, slave= unit; unit->master= this; uncacheable|= unit->uncacheable; + if (master && (unit->uncacheable & UNCACHEABLE_RAND)) + master->uncacheable|= UNCACHEABLE_RAND; for(SELECT_LEX *sel= unit->first_select();sel; sel= sel->next_select()) {