From f7e9ac0d889d5a68ab28d8acda219d052d16634b Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Mon, 12 Jun 2023 15:58:55 +0300 Subject: [PATCH] MDEV-31449: Assertion s->table->opt_range_condition_rows <= s->found_records Fix a typo in make_join_statistics(): when updating statistics for derived table, set s->table->... not "table->..." --- mysql-test/main/join.result | 15 +++++++++++++++ mysql-test/main/join.test | 19 +++++++++++++++++++ sql/sql_select.cc | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/mysql-test/main/join.result b/mysql-test/main/join.result index 859bc588ed4..e4b92b4234b 100644 --- a/mysql-test/main/join.result +++ b/mysql-test/main/join.result @@ -3424,3 +3424,18 @@ COUNT(*) 2 DROP TABLE t1, t2, t3; # End of 10.5 tests +# +# MDEV-31449: Assertion s->table->opt_range_condition_rows <= s->found_records +# +CREATE TABLE t1 (a INT, b INT); +INSERT INTO t1 VALUES (1,2),(3,4); +CREATE TABLE t2 (c INT); +INSERT INTO t2 VALUES (5),(6); +SET @tmp=@@OPTIMIZER_USE_CONDITION_SELECTIVITY, OPTIMIZER_USE_CONDITION_SELECTIVITY = 1; +SELECT * FROM +(SELECT t1.* FROM t1 WHERE t1.a IN (SELECT MAX(t2.c) FROM t2 JOIN t1)) AS sq1, +(SELECT t2.* FROM t2 JOIN t1 ON (t1.b IN (SELECT t1.b FROM t2 STRAIGHT_JOIN t1))) AS sq2; +a b c +SET OPTIMIZER_USE_CONDITION_SELECTIVITY=@tmp; +DROP TABLE t1,t2; +# End of 10.6 tests diff --git a/mysql-test/main/join.test b/mysql-test/main/join.test index c8bd2886b30..b665f034813 100644 --- a/mysql-test/main/join.test +++ b/mysql-test/main/join.test @@ -1835,3 +1835,22 @@ SELECT COUNT(*) FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t2.b = t3.c) ON t1.a = t2. DROP TABLE t1, t2, t3; --echo # End of 10.5 tests + +--echo # +--echo # MDEV-31449: Assertion s->table->opt_range_condition_rows <= s->found_records +--echo # +CREATE TABLE t1 (a INT, b INT); +INSERT INTO t1 VALUES (1,2),(3,4); + +CREATE TABLE t2 (c INT); +INSERT INTO t2 VALUES (5),(6); + +SET @tmp=@@OPTIMIZER_USE_CONDITION_SELECTIVITY, OPTIMIZER_USE_CONDITION_SELECTIVITY = 1; + +SELECT * FROM +(SELECT t1.* FROM t1 WHERE t1.a IN (SELECT MAX(t2.c) FROM t2 JOIN t1)) AS sq1, +(SELECT t2.* FROM t2 JOIN t1 ON (t1.b IN (SELECT t1.b FROM t2 STRAIGHT_JOIN t1))) AS sq2; + +SET OPTIMIZER_USE_CONDITION_SELECTIVITY=@tmp; +DROP TABLE t1,t2; +--echo # End of 10.6 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index f87c01f5681..afa5593bd7e 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -5575,7 +5575,7 @@ make_join_statistics(JOIN *join, List &tables_list, get_delayed_table_estimates(s->table, &s->records, &s->read_time, &s->startup_cost); s->found_records= s->records; - table->opt_range_condition_rows=s->records; + s->table->opt_range_condition_rows=s->records; } else s->scan_time();