summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/mysql_priv.h1
-rw-r--r--sql/mysqld.cc3
-rw-r--r--sql/sql_class.cc1
-rw-r--r--sql/sql_class.h2
-rw-r--r--sql/sql_select.cc3
-rw-r--r--sql/sql_show.cc3
-rw-r--r--sql/structs.h3
7 files changed, 9 insertions, 7 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 5d11a047a8f..b333660059e 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -1059,7 +1059,6 @@ extern char language[FN_REFLEN], reg_ext[FN_EXTLEN];
extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN];
extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file;
extern char log_error_file[FN_REFLEN], *opt_tc_log_file;
-extern double last_query_cost;
extern double log_10[32];
extern ulonglong log_10_int[20];
extern ulonglong keybuff_size;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 8c5ce22f7a6..5254214c992 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -368,7 +368,6 @@ ulong thread_id=1L,current_pid;
ulong slow_launch_threads = 0, sync_binlog_period;
ulong expire_logs_days = 0;
ulong rpl_recovery_rank=0;
-double last_query_cost= -1; /* -1 denotes that no query was compiled yet */
double log_10[32]; /* 10 potences */
time_t start_time;
@@ -5727,7 +5726,7 @@ struct show_var_st status_vars[]= {
{"Key_reads", (char*) &dflt_key_cache_var.global_cache_read, SHOW_KEY_CACHE_LONG},
{"Key_write_requests", (char*) &dflt_key_cache_var.global_cache_w_requests, SHOW_KEY_CACHE_LONG},
{"Key_writes", (char*) &dflt_key_cache_var.global_cache_write, SHOW_KEY_CACHE_LONG},
- {"Last_query_cost", (char*) &last_query_cost, SHOW_DOUBLE},
+ {"Last_query_cost", (char*) offsetof(STATUS_VAR, last_query_cost), SHOW_DOUBLE_STATUS},
{"Max_used_connections", (char*) &max_used_connections, SHOW_LONG},
#ifdef HAVE_NDBCLUSTER_DB
{"Ndb_", (char*) &ndb_status_variables, SHOW_VARS},
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 2a500610479..48cdb47a7ff 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -444,6 +444,7 @@ void add_to_status(STATUS_VAR *to_var, STATUS_VAR *from_var)
while (to != end)
*(to++)+= *(from++);
+ /* it doesn't make sense to add last_query_cost values */
}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 211648e63f7..47987f3a0c6 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -635,6 +635,8 @@ typedef struct system_status_var
ulong filesort_range_count;
ulong filesort_rows;
ulong filesort_scan_count;
+
+ double last_query_cost;
} STATUS_VAR;
/*
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 3b4db62d1f4..c68379baa75 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -3796,8 +3796,7 @@ choose_plan(JOIN *join, table_map join_tables)
Don't update last_query_cost for 'show status' command
*/
if (join->thd->lex->orig_sql_command != SQLCOM_SHOW_STATUS)
- last_query_cost= join->best_read;
-
+ join->thd->status_var.last_query_cost= join->best_read;
DBUG_VOID_RETURN;
}
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 267d584d9eb..c873b9be369 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1382,8 +1382,9 @@ static bool show_status_array(THD *thd, const char *wild,
end= strend(pos);
break;
}
- case SHOW_DOUBLE:
+ case SHOW_DOUBLE_STATUS:
{
+ value= ((char *) status_var + (ulong) value);
end= buff + sprintf(buff, "%f", *(double*) value);
break;
}
diff --git a/sql/structs.h b/sql/structs.h
index 14c0100f5be..8f053f20776 100644
--- a/sql/structs.h
+++ b/sql/structs.h
@@ -164,7 +164,8 @@ typedef struct st_known_date_time_format {
enum SHOW_TYPE
{
SHOW_UNDEF,
- SHOW_LONG, SHOW_LONGLONG, SHOW_INT, SHOW_CHAR, SHOW_CHAR_PTR, SHOW_DOUBLE,
+ SHOW_LONG, SHOW_LONGLONG, SHOW_INT, SHOW_CHAR, SHOW_CHAR_PTR,
+ SHOW_DOUBLE_STATUS,
SHOW_BOOL, SHOW_MY_BOOL, SHOW_OPENTABLES, SHOW_STARTTIME, SHOW_QUESTION,
SHOW_LONG_CONST, SHOW_INT_CONST, SHOW_HAVE, SHOW_SYS, SHOW_HA_ROWS,
SHOW_VARS,