mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-31199: Assertion `field->table->stats_is_read' fails with hash_join_cardinality=on
Derived table creation code would call Field::make_new_field() which would memcpy the Field object from the source table, including Field::read_stats. But the temp. table as a whole had table->stats_is_read=false. Which was correct but not consistent with Field::read_stats and caused an assertion. Fixed by making sure that Field::read_stats=NULL for fields in the new temporary (i.e. work) tables.
This commit is contained in:
@ -314,6 +314,29 @@ 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-31199: Assertion `field->table->stats_is_read' fails with hash_join_cardinality=on
|
||||
#
|
||||
CREATE TABLE t1 (a VARCHAR(255));
|
||||
INSERT INTO t1 VALUES ('u'),('uu');
|
||||
CREATE TABLE t2 (b VARCHAR(255)) CHARACTER SET utf8mb4;
|
||||
INSERT INTO t2 VALUES ('x'),('xx');
|
||||
CREATE TABLE t3 (c VARCHAR(255));
|
||||
INSERT INTO t3 VALUES ('z'),('zz');
|
||||
ANALYZE TABLE t1, t2, t3 PERSISTENT FOR ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Engine-independent statistics collected
|
||||
test.t1 analyze status OK
|
||||
test.t2 analyze status Engine-independent statistics collected
|
||||
test.t2 analyze status OK
|
||||
test.t3 analyze status Engine-independent statistics collected
|
||||
test.t3 analyze status OK
|
||||
set @tmp1=@@optimizer_switch, @tmp2=@@join_cache_level;
|
||||
set optimizer_switch='hash_join_cardinality=on', join_cache_level=3;
|
||||
SELECT t1.* FROM t1 JOIN (SELECT DISTINCT b FROM t2 JOIN t3) sq ON sq.b = t1.a;
|
||||
a
|
||||
set optimizer_switch=@tmp1, join_cache_level=@tmp2;
|
||||
DROP TABLE t1, t2, t3;
|
||||
#
|
||||
# End of the test file
|
||||
#
|
||||
|
Reference in New Issue
Block a user