Skip to content
Permalink
Browse files
MDEV-19334: bool is_eits_usable(Field*): Assertion `field->table->sta…
…ts_is_read' failed.

Fixed the assert by making sure that not to use EITS if the column statistics was not allocated.
  • Loading branch information
Varun Gupta committed Apr 27, 2019
1 parent f239fd5 commit 0d5aabd
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 4 deletions.
@@ -1735,4 +1735,18 @@ rename table t1 to t2, t3 to t4;
ERROR 42S02: Table 'test.t3' doesn't exist
drop table t1, 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;
@@ -809,4 +809,19 @@ rename table t1 to t2, t3 to t4;
drop table t1, 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;
@@ -4067,17 +4067,24 @@ bool is_stat_table(const char *db, const char *table)

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
(2): Don't use EITS for GEOMETRY columns
(3): Disabling reading EITS statistics for columns involved in the
partition list of a table. We assume the selecticivity for
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 && !col_stats->no_stat_values_provided() && //(1)
field->type() != MYSQL_TYPE_GEOMETRY && //(2)

return !col_stats->no_stat_values_provided() && //(1)
field->type() != MYSQL_TYPE_GEOMETRY && //(2)
#ifdef WITH_PARTITION_STORAGE_ENGINE
(!field->table->part_info ||
!field->table->part_info->field_in_partition_expr(field)) && //(3)

0 comments on commit 0d5aabd

Please sign in to comment.