Hi Evgeny,
the fix is approved.
Roy
On 18.03.11 09.59, Evgeny Potemkin wrote:
> #At file:///work/bzrroot/11807437-bug/ based on
> revid:epotemkin@stripped
>
> 3002 Evgeny Potemkin 2011-03-18
> Bug#11807437: VALGRIND WARNING IN MYSQL_DERIVED_OPTIMIZE() LINE 293
> After a merge initialization of JOIN::best_rowcount wasn't added in few
> cases, thus valgrind was throwing reported warning.
> Added initialization of JOIN::best_rowcount.
> @ mysql-test/r/derived.result
> Added a test case for the bug#11807437.
> @ mysql-test/t/derived.test
> Added a test case for the bug#11807437.
> @ sql/sql_select.cc
> Bug#11807437: VALGRIND WARNING IN MYSQL_DERIVED_OPTIMIZE() LINE 293
> Added initialization of JOIN::best_rowcount.
>
> modified:
> mysql-test/r/derived.result
> mysql-test/t/derived.test
> sql/sql_select.cc
> === modified file 'mysql-test/r/derived.result'
> --- a/mysql-test/r/derived.result 2011-02-17 12:14:26 +0000
> +++ b/mysql-test/r/derived.result 2011-03-18 08:59:36 +0000
> @@ -1328,3 +1328,20 @@ f1 f11 f2 f22 f3 f33
> DROP TABLE t1,t2,t3;
> DROP VIEW v1,v2,v3,v4,v6,v7;
> #
> +#
> +# Bug#11807437: VALGRIND WARNING IN MYSQL_DERIVED_OPTIMIZE() LINE 293
> +#
> +CREATE TABLE t1 (
> +f1 int(11) DEFAULT NULL
> +);
> +SELECT 1
> +FROM (
> +SELECT 1, 2 FROM DUAL
> +WHERE EXISTS (
> +SELECT f1
> +FROM t1
> +)) AS tt
> +;
> +1
> +DROP TABLE t1;
> +#
>
> === modified file 'mysql-test/t/derived.test'
> --- a/mysql-test/t/derived.test 2011-02-17 12:14:26 +0000
> +++ b/mysql-test/t/derived.test 2011-03-18 08:59:36 +0000
> @@ -693,3 +693,22 @@ DROP VIEW v1,v2,v3,v4,v6,v7;
>
> --echo #
>
> +--echo #
> +--echo # Bug#11807437: VALGRIND WARNING IN MYSQL_DERIVED_OPTIMIZE() LINE 293
> +--echo #
> +CREATE TABLE t1 (
> + f1 int(11) DEFAULT NULL
> +);
> +
> +SELECT 1
> +FROM (
> + SELECT 1, 2 FROM DUAL
> + WHERE EXISTS (
> + SELECT f1
> + FROM t1
> + )) AS tt
> +;
> +
> +DROP TABLE t1;
> +--echo #
> +
>
> === modified file 'sql/sql_select.cc'
> --- a/sql/sql_select.cc 2011-02-17 12:14:26 +0000
> +++ b/sql/sql_select.cc 2011-03-18 08:59:36 +0000
> @@ -1853,6 +1853,7 @@ JOIN::optimize()
> zero_result_cause= select_lex->having_value == Item::COND_FALSE ?
> "Impossible HAVING" : "Impossible WHERE";
> tables= 0;
> + best_rowcount= 0;
> goto setup_subq_exit;
> }
> }
> @@ -1898,6 +1899,7 @@ JOIN::optimize()
> */
> if ((res=opt_sum_query(select_lex->leaf_tables, all_fields, conds)))
> {
> + best_rowcount= 0;
> if (res == HA_ERR_KEY_NOT_FOUND)
> {
> DBUG_PRINT("info",("No matching min/max row"));
> @@ -1921,6 +1923,7 @@ JOIN::optimize()
> DBUG_PRINT("info",("Select tables optimized away"));
> zero_result_cause= "Select tables optimized away";
> tables_list= 0; // All tables resolved
> + best_rowcount= 1;
> const_tables= tables;
> /*
> Extract all table-independent conditions and replace the WHERE
>
>
>
>