diff options
author | Sergei Petrunia <sergey@mariadb.com> | 2023-02-03 15:23:38 +0200 |
---|---|---|
committer | Sergei Petrunia <sergey@mariadb.com> | 2023-02-03 15:23:38 +0200 |
commit | b368a0e933538caa629f151a90e59ca2a503c314 (patch) | |
tree | aa96fba25c0b3264bc28f13c7ab99a135e41993c | |
parent | 05b9dbdc7f8cc2a823855b3f7db3c63327278268 (diff) | |
download | mariadb-git-bb-11.0-before-feb.tar.gz |
MDEV-30529: Assertion `rnd_records <= s->found_records' failed in best_access_pathbb-11.0-before-feb
best_access_path() has an assertion:
DBUG_ASSERT(rnd_records <= s->found_records);
make it rounding-safe.
-rw-r--r-- | mysql-test/main/selectivity_no_engine.result | 19 | ||||
-rw-r--r-- | mysql-test/main/selectivity_no_engine.test | 21 | ||||
-rw-r--r-- | sql/sql_select.cc | 2 |
3 files changed, 41 insertions, 1 deletions
diff --git a/mysql-test/main/selectivity_no_engine.result b/mysql-test/main/selectivity_no_engine.result index 3811b12a1be..5df1c61e758 100644 --- a/mysql-test/main/selectivity_no_engine.result +++ b/mysql-test/main/selectivity_no_engine.result @@ -314,6 +314,25 @@ id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a ALL NULL NULL NULL NULL 5 Using where 1 SIMPLE b hash_ALL NULL #hash#$hj 1341 test.a.Host,test.a.User,test.a.Password,test.a.Select_priv,test.a.Insert_priv,test.a.Update_priv,test.a.Delete_priv,test.a.Create_priv,test.a.Drop_priv,test.a.Reload_priv,test.a.Shutdown_priv,test.a.Process_priv,test.a.File_priv,test.a.Grant_priv,test.a.References_priv,test.a.Index_priv,test.a.Alter_priv,test.a.Show_db_priv,test.a.Super_priv,test.a.Create_tmp_table_priv,test.a.Lock_tables_priv,test.a.Execute_priv,test.a.Repl_slave_priv,test.a.Repl_client_priv,test.a.Create_view_priv,test.a.Show_view_priv,test.a.Create_routine_priv,test.a.Alter_routine_priv,test.a.Create_user_priv,test.a.Event_priv,test.a.Trigger_priv,test.a.Create_tablespace_priv,test.a.Delete_history_priv,test.a.ssl_type,test.a.ssl_cipher,test.a.x509_issuer,test.a.x509_subject,test.a.max_questions,test.a.max_updates,test.a.max_connections,test.a.max_user_connections,test.a.plugin,test.a.authentication_string,test.a.password_expired,test.a.is_role,test.a.default_role,test.a.max_statement_time 5 Using where; Using join buffer (flat, BNLH join) DROP TABLE t1,t2,t3; +# +# MDEV-30529: Assertion `rnd_records <= s->found_records' failed in best_access_path +# +CREATE TABLE t1 (a INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (b VARCHAR(1), c INT, d VARCHAR(1), e VARCHAR(1), KEY(b), KEY(d), KEY(e)) ENGINE=MyISAM; +INSERT INTO t2 VALUES ('x',0,'-','-'), +('x',0,'-','-'),('x',5,'-','-'),('x',0,'-','-'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'w','-'),('x',0,'-','-'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','u'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'-','t'),('x',0,'-','-'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','p'), +('x',0,'z','-'),('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','v'); +set @tmp_jcl=@@join_cache_level; +SET JOIN_CACHE_LEVEL= 3; +SELECT * FROM t1 JOIN t2 ON t1.a = t2.c WHERE t2.b IN ('o') OR t2.e >= 'f' OR t2.d > 'p'; +a b c d e +set join_cache_level=@tmp_jcl; +drop table t1,t2; # # End of the test file # diff --git a/mysql-test/main/selectivity_no_engine.test b/mysql-test/main/selectivity_no_engine.test index 5bc78e03781..8596fce9bf2 100644 --- a/mysql-test/main/selectivity_no_engine.test +++ b/mysql-test/main/selectivity_no_engine.test @@ -250,6 +250,27 @@ SELECT * FROM t1 AS a NATURAL JOIN t1 AS b; DROP TABLE t1,t2,t3; +--echo # +--echo # MDEV-30529: Assertion `rnd_records <= s->found_records' failed in best_access_path +--echo # +CREATE TABLE t1 (a INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1),(2); + +CREATE TABLE t2 (b VARCHAR(1), c INT, d VARCHAR(1), e VARCHAR(1), KEY(b), KEY(d), KEY(e)) ENGINE=MyISAM; +INSERT INTO t2 VALUES ('x',0,'-','-'), +('x',0,'-','-'),('x',5,'-','-'),('x',0,'-','-'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'w','-'),('x',0,'-','-'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','u'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'-','t'),('x',0,'-','-'),('x',0,'-','-'), +('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','p'), +('x',0,'z','-'),('x',0,'-','-'),('x',0,'-','-'),('x',0,'-','v'); + +set @tmp_jcl=@@join_cache_level; +SET JOIN_CACHE_LEVEL= 3; +SELECT * FROM t1 JOIN t2 ON t1.a = t2.c WHERE t2.b IN ('o') OR t2.e >= 'f' OR t2.d > 'p'; +set join_cache_level=@tmp_jcl; + +drop table t1,t2; --echo # --echo # End of the test file --echo # diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 44da2947049..6015df9f84b 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -8803,7 +8803,7 @@ best_access_path(JOIN *join, use_found_constraint(rnd_records) : rnd_records); - DBUG_ASSERT(rnd_records <= s->found_records); + DBUG_ASSERT(rnd_records <= rows2double(s->found_records) + 0.5); set_if_smaller(best.records_out, records_table_filter); /* |