diff options
author | Georgi Kodinov <Georgi.Kodinov@Oracle.com> | 2010-06-25 16:32:47 +0300 |
---|---|---|
committer | Georgi Kodinov <Georgi.Kodinov@Oracle.com> | 2010-06-25 16:32:47 +0300 |
commit | dbd40508f0983677bff6d65c6428a50758b23eeb (patch) | |
tree | 45ae72f4a1e319c48f0c80ac2781c4246338f0c1 | |
parent | 68c5b5445e9dd2b3cc92ca139a622347e78b2db6 (diff) | |
parent | 8fc01031bfbb5618a9168bd7629e577b4866ede9 (diff) | |
download | mariadb-git-dbd40508f0983677bff6d65c6428a50758b23eeb.tar.gz |
merge
-rw-r--r-- | mysql-test/r/subselect.result | 17 | ||||
-rw-r--r-- | mysql-test/t/subselect.test | 25 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 |
3 files changed, 44 insertions, 1 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index e3aa87876ed..72d63e47d9a 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -4988,3 +4988,20 @@ t1_id total_amount DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; +# +# Bug #52711: Segfault when doing EXPLAIN SELECT with +# union...order by (select... where...) +# +CREATE TABLE t1 (a VARCHAR(10), FULLTEXT KEY a (a)); +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (b INT); +INSERT INTO t2 VALUES (1),(2); +# Should not crash +EXPLAIN +SELECT * FROM t2 UNION SELECT * FROM t2 +ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); +# Should not crash +SELECT * FROM t2 UNION SELECT * FROM t2 +ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); +DROP TABLE t1,t2; +End of 5.1 tests diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 06aaf5dfb7f..2e442e7f897 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -3921,3 +3921,28 @@ GROUP BY DROP TABLE t3; DROP TABLE t2; DROP TABLE t1; + + +--echo # +--echo # Bug #52711: Segfault when doing EXPLAIN SELECT with +--echo # union...order by (select... where...) +--echo # + +CREATE TABLE t1 (a VARCHAR(10), FULLTEXT KEY a (a)); +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (b INT); +INSERT INTO t2 VALUES (1),(2); + +--echo # Should not crash +--disable_result_log +EXPLAIN +SELECT * FROM t2 UNION SELECT * FROM t2 + ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); + +--echo # Should not crash +SELECT * FROM t2 UNION SELECT * FROM t2 + ORDER BY (SELECT * FROM t1 WHERE MATCH(a) AGAINST ('+abc' IN BOOLEAN MODE)); +DROP TABLE t1,t2; +--enable_result_log + +--echo End of 5.1 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 3e03920980f..211119de6f1 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -7358,7 +7358,8 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond, *simple_order=0; // Must do a temp table to sort else if (!(order_tables & not_const_tables)) { - if (order->item[0]->with_subselect) + if (order->item[0]->with_subselect && + !(join->select_lex->options & SELECT_DESCRIBE)) order->item[0]->val_str(&order->item[0]->str_value); DBUG_PRINT("info",("removing: %s", order->item[0]->full_name())); continue; // skip const item |