diff options
author | Igor Babaev <igor@askmonty.org> | 2023-01-25 11:46:28 -0800 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2023-01-25 14:27:55 -0800 |
commit | 4652260d656ea871fe1ff31176b6d85eeffde932 (patch) | |
tree | b614fe36abb9e77f9fa78fac2d5a80bb380fb6e4 /mysql-test/main/derived.result | |
parent | 2279dddad6bea00c5774a76f410c11fd56ad168f (diff) | |
download | mariadb-git-bb-10.3-igor.tar.gz |
MDEV-28616 Crash when using derived table over union with order by clausebb-10.3-igor
This bug manifested itself when the server processed a query containing
a derived table over union whose ORDER BY clause included a subquery
with unresolvable column reference. For such a query the server crashed
when trying to resolve column references in the ORDER BY clause used by
union.
For any union with ORDER BY clause an extra SELECT_LEX structure is created
and it is attached to SELECT_LEX_UNIT structure of the union via the field
fake_select_lex. The outer context for fake_select_lex must be the same as
for other selects of the union. If the union is used in the FROM list of
a derived table then the outer context for fake_select_lex must be set to
NULL in line with other selects of the union. It was not done and it
caused a crash when searching for possible resolution of an unresolvable
column reference occurred in a subquery used in the ORDER BY clause.
Approved by Oleksandr Byelkin <sanja@mariadb.com>
Diffstat (limited to 'mysql-test/main/derived.result')
-rw-r--r-- | mysql-test/main/derived.result | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/mysql-test/main/derived.result b/mysql-test/main/derived.result index 2761fdfa287..0cb029fa7a4 100644 --- a/mysql-test/main/derived.result +++ b/mysql-test/main/derived.result @@ -1327,5 +1327,28 @@ a b DROP VIEW v1; DROP TABLE t1; # +# MDEV-28616: derived table over union with order by clause that +# contains subquery with unresolvable column reference +# +SELECT 1 FROM ( +SELECT 1 UNION SELECT 2 ORDER BY (SELECT 1 FROM DUAL WHERE xxx = 0) +) dt; +ERROR 42S22: Unknown column 'xxx' in 'where clause' +create table t1 (a int, b int); +insert into t1 values (3,8), (7,2), (1,4), (5,9); +create table t2 (a int, b int); +insert into t2 values (9,1), (7,3), (2,6); +create table t3 (c int, d int); +insert into t3 values (7,8), (1,2), (3,8); +select * from +( +select a,b from t1 where t1.a > 3 +union +select a,b from t2 where t2.b < 6 +order by (a - b / (select a + max(c) from t3 where d = x)) +) dt; +ERROR 42S22: Unknown column 'x' in 'where clause' +drop table t1,t2,t3; +# # End of 10.3 tests # |