Commit 75063440 authored by Vasil Dimov's avatar Vasil Dimov

Merge mysql-5.1-innodb -> mysql-5.5-innodb

parents 626b2d6a 50c69f93
cardinality
10
Table Op Msg_type Msg_text
test.bug57252 analyze status OK
cardinality
10
#
# Bug#57252 disabling innobase_stats_on_metadata disables ANALYZE
# http://bugs.mysql.com/57252
#
-- source include/have_innodb.inc
-- disable_query_log
-- disable_result_log
SET @innodb_stats_on_metadata_orig = @@innodb_stats_on_metadata;
CREATE TABLE bug57252 (a INT, KEY akey (a)) ENGINE=INNODB;
BEGIN;
let $i = 10;
while ($i) {
eval INSERT INTO bug57252 VALUES ($i);
dec $i;
}
COMMIT;
-- enable_result_log
SET GLOBAL innodb_stats_on_metadata=0;
# this calls ::info() without HA_STATUS_CONST and so
# index->stat_n_diff_key_vals[] is not copied to the mysql-visible
# rec_per_key
SELECT cardinality FROM information_schema.statistics
WHERE table_name='bug57252' AND index_name='akey';
# this calls ::info() with HA_STATUS_CONST and so
# index->stat_n_diff_key_vals[] is copied to the mysql-visible
# rec_per_key at the end; when the bug is present dict_update_statistics()
# is not called beforehand and so index->stat_n_diff_key_vals[] contains
# an outdated data and thus we get an outdated data in the result when the
# bug is present
ANALYZE TABLE bug57252;
SELECT cardinality FROM information_schema.statistics
WHERE table_name='bug57252' AND index_name='akey';
DROP TABLE bug57252;
SET GLOBAL innodb_stats_on_metadata = @innodb_stats_on_metadata_orig;
...@@ -7689,9 +7689,12 @@ Returns statistics information of the table to the MySQL interpreter, ...@@ -7689,9 +7689,12 @@ Returns statistics information of the table to the MySQL interpreter,
in various fields of the handle object. */ in various fields of the handle object. */
UNIV_INTERN UNIV_INTERN
int int
ha_innobase::info( ha_innobase::info_low(
/*==============*/ /*==================*/
uint flag) /*!< in: what information MySQL requests */ uint flag, /*!< in: what information MySQL
requests */
bool called_from_analyze) /* in: TRUE if called from
::analyze() */
{ {
dict_table_t* ib_table; dict_table_t* ib_table;
dict_index_t* index; dict_index_t* index;
...@@ -7722,7 +7725,7 @@ ha_innobase::info( ...@@ -7722,7 +7725,7 @@ ha_innobase::info(
ib_table = prebuilt->table; ib_table = prebuilt->table;
if (flag & HA_STATUS_TIME) { if (flag & HA_STATUS_TIME) {
if (innobase_stats_on_metadata) { if (called_from_analyze || innobase_stats_on_metadata) {
/* In sql_show we call with this flag: update /* In sql_show we call with this flag: update
then statistics so that they are up-to-date */ then statistics so that they are up-to-date */
...@@ -7970,6 +7973,18 @@ ha_innobase::info( ...@@ -7970,6 +7973,18 @@ ha_innobase::info(
DBUG_RETURN(0); DBUG_RETURN(0);
} }
/*********************************************************************//**
Returns statistics information of the table to the MySQL interpreter,
in various fields of the handle object. */
UNIV_INTERN
int
ha_innobase::info(
/*==============*/
uint flag) /*!< in: what information MySQL requests */
{
return(info_low(flag, false /* not called from analyze */));
}
/**********************************************************************//** /**********************************************************************//**
Updates index cardinalities of the table, based on 8 random dives into Updates index cardinalities of the table, based on 8 random dives into
each index tree. This does NOT calculate exact statistics on the table. each index tree. This does NOT calculate exact statistics on the table.
...@@ -7982,7 +7997,8 @@ ha_innobase::analyze( ...@@ -7982,7 +7997,8 @@ ha_innobase::analyze(
HA_CHECK_OPT* check_opt) /*!< in: currently ignored */ HA_CHECK_OPT* check_opt) /*!< in: currently ignored */
{ {
/* Simply call ::info() with all the flags */ /* Simply call ::info() with all the flags */
info(HA_STATUS_TIME | HA_STATUS_CONST | HA_STATUS_VARIABLE); info_low(HA_STATUS_TIME | HA_STATUS_CONST | HA_STATUS_VARIABLE,
true /* called from analyze */);
return(0); return(0);
} }
......
...@@ -109,6 +109,7 @@ class ha_innobase: public handler ...@@ -109,6 +109,7 @@ class ha_innobase: public handler
ulint innobase_update_autoinc(ulonglong auto_inc); ulint innobase_update_autoinc(ulonglong auto_inc);
void innobase_initialize_autoinc(); void innobase_initialize_autoinc();
dict_index_t* innobase_get_index(uint keynr); dict_index_t* innobase_get_index(uint keynr);
int info_low(uint flag, bool called_from_analyze);
/* Init values for the class: */ /* Init values for the class: */
public: public:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment