From 9f53c310d8fb76963d88e8a87a650d93469cdab2 Mon Sep 17 00:00:00 2001 From: Igor Babaev Date: Thu, 19 Apr 2012 09:49:53 -0700 Subject: [PATCH] Fixed a problem for Q18 from DBT3/SF30 with innodb database instance: the server crashed when running the query with persistent statistics enabled. The field KEY::read_stat.avg_frequency must be initialized to NULL for the keys of temporary tables. --- sql/sql_select.cc | 1 + sql/sql_statistics.cc | 3 ++- sql/table.cc | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 5279db17029..e482b6a8c96 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -14657,6 +14657,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List &fields, keyinfo->algorithm= HA_KEY_ALG_UNDEF; keyinfo->is_statistics_from_stat_tables= FALSE; keyinfo->rec_per_key=0; + keyinfo->read_stat.avg_frequency= NULL; /* Create an extra field to hold NULL bits so that unique indexes on diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc index 27aa77ae1a3..3c6f5829e6b 100644 --- a/sql/sql_statistics.cc +++ b/sql/sql_statistics.cc @@ -1636,6 +1636,7 @@ void set_statistics_for_table(THD *thd, TABLE *table) key_info < key_info_end; key_info++) { key_info->is_statistics_from_stat_tables= - (use_stat_table_mode > 1 && key_info->read_stat.avg_frequency[0] > 0.5); + (use_stat_table_mode > 1 && key_info->read_stat.avg_frequency && + key_info->read_stat.avg_frequency[0] > 0.5); } } diff --git a/sql/table.cc b/sql/table.cc index 78449d0498d..bbccd38d83c 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -5957,6 +5957,7 @@ bool TABLE::add_tmp_key(uint key, uint key_parts, if (!keyinfo->rec_per_key) return TRUE; bzero(keyinfo->rec_per_key, sizeof(ulong)*key_parts); + keyinfo->read_stat.avg_frequency= NULL; for (i= 0; i < key_parts; i++) {