Commit 8df65c85 authored by MySQL Build Team's avatar MySQL Build Team

Backport into build-201003230706-5.1.43sp1

> ------------------------------------------------------------
> revno: 3324
> revision-id: joro@sun.com-20091223151122-ada73up1yydh0emt
> parent: joro@sun.com-20100119124841-38vva51cuq3if7dc
> committer: Georgi Kodinov <joro@sun.com>
> branch nick: B49512-5.1-bugteam
> timestamp: Wed 2009-12-23 17:11:22 +0200
> message:
>   Bug #49512 : subquery with aggregate function crash
>     subselect_single_select_engine::exec()
>   
>   When a subquery doesn't need to be evaluated because
>   it returns only aggregate functions and these aggregates
>   can be calculated from the metadata about the table it
>   was not updating all the relevant members of the JOIN 
>   structure to reflect that this is a constant query.
>   This caused problems to the enclosing subquery 
>   ('<> SOME' in the test case above) trying to read some
>   data about the tables.
>   
>   Fixed by setting const_tables to the number of tables 
>   when the SELECT is optimized away.
parent 023f774d
......@@ -4602,4 +4602,17 @@ SELECT 1 FROM t1 GROUP BY
1
1
DROP TABLE t1;
#
# Bug #49512 : subquery with aggregate function crash
# subselect_single_select_engine::exec()
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES();
# should not crash
SELECT 1 FROM t1 WHERE a <> SOME
(
SELECT MAX((SELECT a FROM t1 LIMIT 1)) AS d
FROM t1,t1 a
);
1
DROP TABLE t1;
End of 5.1 tests.
......@@ -3585,4 +3585,19 @@ SELECT 1 FROM t1 GROUP BY
(SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1);
DROP TABLE t1;
--echo #
--echo # Bug #49512 : subquery with aggregate function crash
--echo # subselect_single_select_engine::exec()
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES();
--echo # should not crash
SELECT 1 FROM t1 WHERE a <> SOME
(
SELECT MAX((SELECT a FROM t1 LIMIT 1)) AS d
FROM t1,t1 a
);
DROP TABLE t1;
--echo End of 5.1 tests.
......@@ -942,6 +942,7 @@ JOIN::optimize()
DBUG_PRINT("info",("Select tables optimized away"));
zero_result_cause= "Select tables optimized away";
tables_list= 0; // All tables resolved
const_tables= tables;
/*
Extract all table-independent conditions and replace the WHERE
clause with them. All other conditions were computed by opt_sum_query
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment