List:Commits« Previous MessageNext Message »
From:Evgeny Potemkin Date:June 24 2010 9:48am
Subject:Re: bzr commit into mysql-5.1-bugteam branch (joro:3454) Bug#52711
View as plain text  
Hi Joro,

It would be good to add this assertion:
void Item_singlerow_subselect::store(uint i, Item *item)
{
   DBUG_ASSERT(i < max_columns);
   row[i]->store(item);
   row[i]->cache_value();
}

Ok to push.

Regards, Evgen.

On 04/15/10 18:04, Georgi Kodinov wrote:
> #At file:///home/kgeorge/mysql/work/B52711-5.1-bugteam/ based on
> revid:joro@stripped
>
>   3454 Georgi Kodinov	2010-04-15
>        Bug #52711: Segfault when doing EXPLAIN SELECT with
>        union...order by (select... where...)
>
>        The problem is mysql is trying to materialize and
>        cache the scalar sub-queries at JOIN::optimize
>        even for EXPLAIN where the number of columns is
>        totally different from what's expected.
>        Fixed by not executing the scalar subqueries
>        for EXPLAIN.
>
>      modified:
>        mysql-test/r/subselect.result
>        mysql-test/t/subselect.test
>        sql/sql_select.cc
> === modified file 'mysql-test/r/subselect.result'
> --- a/mysql-test/r/subselect.result	2010-04-12 10:12:20 +0000
> +++ b/mysql-test/r/subselect.result	2010-04-15 14:04:24 +0000
> @@ -4717,3 +4717,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
>
> === modified file 'mysql-test/t/subselect.test'
> --- a/mysql-test/t/subselect.test	2010-04-12 10:12:20 +0000
> +++ b/mysql-test/t/subselect.test	2010-04-15 14:04:24 +0000
> @@ -3701,3 +3701,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
>
> === modified file 'sql/sql_select.cc'
> --- a/sql/sql_select.cc	2010-04-12 10:12:20 +0000
> +++ b/sql/sql_select.cc	2010-04-15 14:04:24 +0000
> @@ -7210,7 +7210,8 @@ remove_const(JOIN *join,ORDER *first_ord
>         *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
>
>
>
>
>
Thread
bzr commit into mysql-5.1-bugteam branch (joro:3454) Bug#52711Georgi Kodinov15 Apr
  • Re: bzr commit into mysql-5.1-bugteam branch (joro:3454) Bug#52711Evgeny Potemkin24 Jun