mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-19334: bool is_eits_usable(Field*): Assertion `field->table->stats_is_read' failed.
Fixed the assert by making sure that not to use EITS if the column statistics was not allocated.
This commit is contained in:
@ -1735,4 +1735,18 @@ rename table t1 to t2, t3 to t4;
|
|||||||
ERROR 42S02: Table 'test.t3' doesn't exist
|
ERROR 42S02: Table 'test.t3' doesn't exist
|
||||||
drop table t1, mysql.table_stats;
|
drop table t1, mysql.table_stats;
|
||||||
rename table test.table_stats to mysql.table_stats;
|
rename table test.table_stats to mysql.table_stats;
|
||||||
|
#
|
||||||
|
# MDEV-19334: bool is_eits_usable(Field*): Assertion `field->table->stats_is_read' failed.
|
||||||
|
#
|
||||||
|
create temporary table t1(a int);
|
||||||
|
insert into t1 values (1),(2),(3);
|
||||||
|
set use_stat_tables=preferably;
|
||||||
|
set @optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||||
|
set optimizer_use_condition_selectivity=4;
|
||||||
|
select * from t1 where a >= 2;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
3
|
||||||
|
drop table t1;
|
||||||
|
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
|
@ -809,4 +809,19 @@ rename table t1 to t2, t3 to t4;
|
|||||||
drop table t1, mysql.table_stats;
|
drop table t1, mysql.table_stats;
|
||||||
rename table test.table_stats to mysql.table_stats;
|
rename table test.table_stats to mysql.table_stats;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19334: bool is_eits_usable(Field*): Assertion `field->table->stats_is_read' failed.
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create temporary table t1(a int);
|
||||||
|
insert into t1 values (1),(2),(3);
|
||||||
|
|
||||||
|
set use_stat_tables=preferably;
|
||||||
|
set @optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity;
|
||||||
|
set optimizer_use_condition_selectivity=4;
|
||||||
|
|
||||||
|
select * from t1 where a >= 2;
|
||||||
|
drop table t1;
|
||||||
|
set @@optimizer_use_condition_selectivity= @save_optimizer_use_condition_selectivity;
|
||||||
|
|
||||||
set use_stat_tables=@save_use_stat_tables;
|
set use_stat_tables=@save_use_stat_tables;
|
||||||
|
@ -4067,6 +4067,14 @@ bool is_stat_table(const char *db, const char *table)
|
|||||||
|
|
||||||
bool is_eits_usable(Field *field)
|
bool is_eits_usable(Field *field)
|
||||||
{
|
{
|
||||||
|
Column_statistics* col_stats= field->read_stats;
|
||||||
|
|
||||||
|
// check if column_statistics was allocated for this field
|
||||||
|
if (!col_stats)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
DBUG_ASSERT(field->table->stats_is_read);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
(1): checks if we have EITS statistics for a particular column
|
(1): checks if we have EITS statistics for a particular column
|
||||||
(2): Don't use EITS for GEOMETRY columns
|
(2): Don't use EITS for GEOMETRY columns
|
||||||
@ -4074,10 +4082,9 @@ bool is_eits_usable(Field *field)
|
|||||||
partition list of a table. We assume the selecticivity for
|
partition list of a table. We assume the selecticivity for
|
||||||
such columns would be handled during partition pruning.
|
such columns would be handled during partition pruning.
|
||||||
*/
|
*/
|
||||||
DBUG_ASSERT(field->table->stats_is_read);
|
|
||||||
Column_statistics* col_stats= field->read_stats;
|
return !col_stats->no_stat_values_provided() && //(1)
|
||||||
return col_stats && !col_stats->no_stat_values_provided() && //(1)
|
field->type() != MYSQL_TYPE_GEOMETRY && //(2)
|
||||||
field->type() != MYSQL_TYPE_GEOMETRY && //(2)
|
|
||||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||||
(!field->table->part_info ||
|
(!field->table->part_info ||
|
||||||
!field->table->part_info->field_in_partition_expr(field)) && //(3)
|
!field->table->part_info->field_in_partition_expr(field)) && //(3)
|
||||||
|
Reference in New Issue
Block a user