summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2010-11-02 10:12:29 +0100
committerSergei Golubchik <sergii@pisem.net>2010-11-02 10:12:29 +0100
commit74711a46153088e5e9159977b42ba7615a3af2df (patch)
tree16b52e05f461a0f9392f4c2bfaeacb3dadfeb126 /sql
parent8e7ebfbce89a472b3c5a6c30e6de101e567a8218 (diff)
parent5789f96c624d00aeef137602ab0c4828620748e8 (diff)
downloadmariadb-git-74711a46153088e5e9159977b42ba7615a3af2df.tar.gz
merge w/ 5.2
Diffstat (limited to 'sql')
-rw-r--r--sql/mysql_priv.h3
-rw-r--r--sql/mysqld.cc48
-rw-r--r--sql/sql_show.cc38
-rw-r--r--sql/sql_test.cc14
-rw-r--r--sql/table.cc5
5 files changed, 56 insertions, 52 deletions
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 84c07dbf2b3..255e22005d3 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -33,8 +33,7 @@
that is defined in mysql/plugin.h
it has to be before mysql/plugin.h is included.
*/
-#define SHOW_always_last SHOW_KEY_CACHE_LONG, \
- SHOW_KEY_CACHE_LONGLONG, SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, \
+#define SHOW_always_last SHOW_LONG_STATUS, SHOW_DOUBLE_STATUS, \
SHOW_HAVE, SHOW_MY_BOOL, SHOW_HA_ROWS, SHOW_SYS, \
SHOW_LONG_NOFLUSH, SHOW_LONGLONG_STATUS
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 763515c9e9c..f8da9432732 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -7988,6 +7988,46 @@ static int show_ssl_get_cipher_list(THD *thd, SHOW_VAR *var, char *buff)
#endif /* HAVE_OPENSSL */
+static int show_default_keycache(THD *thd, SHOW_VAR *var, char *buff)
+{
+ struct st_data {
+ KEY_CACHE_STATISTICS stats;
+ SHOW_VAR var[8];
+ } *data;
+ SHOW_VAR *v;
+
+ data=(st_data *)buff;
+ v= data->var;
+
+ var->type= SHOW_ARRAY;
+ var->value= (char*)v;
+
+ get_key_cache_statistics(dflt_key_cache, 0, &data->stats);
+
+#define set_one_keycache_var(X,Y) \
+ v->name= X; \
+ v->type= SHOW_LONGLONG; \
+ v->value= (char*)&data->stats.Y; \
+ v++;
+
+ set_one_keycache_var("blocks_not_flushed", blocks_changed);
+ set_one_keycache_var("blocks_unused", blocks_unused);
+ set_one_keycache_var("blocks_used", blocks_used);
+ set_one_keycache_var("blocks_warm", blocks_warm);
+ set_one_keycache_var("read_requests", read_requests);
+ set_one_keycache_var("reads", reads);
+ set_one_keycache_var("write_requests", write_requests);
+ set_one_keycache_var("writes", writes);
+
+ v->name= 0;
+
+ DBUG_ASSERT((char*)(v+1) <= buff + SHOW_VAR_FUNC_BUFF_SIZE);
+
+#undef set_one_keycache_var
+
+ return 0;
+}
+
/*
Variables shown by SHOW STATUS in alphabetical order
@@ -8030,13 +8070,7 @@ SHOW_VAR status_vars[]= {
{"Handler_savepoint_rollback",(char*) offsetof(STATUS_VAR, ha_savepoint_rollback_count), SHOW_LONG_STATUS},
{"Handler_update", (char*) offsetof(STATUS_VAR, ha_update_count), SHOW_LONG_STATUS},
{"Handler_write", (char*) offsetof(STATUS_VAR, ha_write_count), SHOW_LONG_STATUS},
- {"Key_blocks_not_flushed", (char*) offsetof(KEY_CACHE, global_blocks_changed), SHOW_KEY_CACHE_LONG},
- {"Key_blocks_unused", (char*) offsetof(KEY_CACHE, blocks_unused), SHOW_KEY_CACHE_LONG},
- {"Key_blocks_used", (char*) offsetof(KEY_CACHE, blocks_used), SHOW_KEY_CACHE_LONG},
- {"Key_read_requests", (char*) offsetof(KEY_CACHE, global_cache_r_requests), SHOW_KEY_CACHE_LONGLONG},
- {"Key_reads", (char*) offsetof(KEY_CACHE, global_cache_read), SHOW_KEY_CACHE_LONGLONG},
- {"Key_write_requests", (char*) offsetof(KEY_CACHE, global_cache_w_requests), SHOW_KEY_CACHE_LONGLONG},
- {"Key_writes", (char*) offsetof(KEY_CACHE, global_cache_write), SHOW_KEY_CACHE_LONGLONG},
+ {"Key", (char*) &show_default_keycache, SHOW_FUNC},
{"Last_query_cost", (char*) offsetof(STATUS_VAR, last_query_cost), SHOW_DOUBLE_STATUS},
{"Max_used_connections", (char*) &max_used_connections, SHOW_LONG},
{"Not_flushed_delayed_rows", (char*) &delayed_rows_in_use, SHOW_LONG_NOFLUSH},
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index e05ea4a5dcd..0bd3367de86 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -2292,34 +2292,6 @@ void remove_status_vars(SHOW_VAR *list)
-static void update_key_cache_stat_var(KEY_CACHE *key_cache, size_t ofs)
-{
- uint var_no;
- if (ofs == offsetof(KEY_CACHE, blocks_used) ||
- ofs == offsetof(KEY_CACHE, blocks_unused) ||
- ofs == offsetof(KEY_CACHE, global_blocks_changed))
- {
- var_no= (ofs-offsetof(KEY_CACHE, blocks_used))/sizeof(ulong);
- *(ulong *)((char *) key_cache + ofs)=
- (ulong) get_key_cache_stat_value(key_cache, var_no);
- return;
- }
-
- if (ofs == offsetof(KEY_CACHE, global_cache_r_requests) ||
- ofs == offsetof(KEY_CACHE, global_cache_read) ||
- ofs == offsetof(KEY_CACHE, global_cache_w_requests) ||
- ofs == offsetof(KEY_CACHE, global_cache_write))
- {
- var_no= NUM_LONG_KEY_CACHE_STAT_VARIABLES +
- (ofs-offsetof(KEY_CACHE, global_cache_w_requests))/
- sizeof(ulonglong);
- *(ulonglong *)((char *) key_cache + ofs)=
- get_key_cache_stat_value(key_cache, var_no);
- return;
- }
-}
-
-
static bool show_status_array(THD *thd, const char *wild,
SHOW_VAR *variables,
enum enum_var_type value_type,
@@ -2451,16 +2423,6 @@ static bool show_status_array(THD *thd, const char *wild,
end= strend(pos);
break;
}
- case SHOW_KEY_CACHE_LONG:
- update_key_cache_stat_var(dflt_key_cache, (size_t) value);
- value= (char*) dflt_key_cache + (ulong)value;
- end= int10_to_str(*(long*) value, buff, 10);
- break;
- case SHOW_KEY_CACHE_LONGLONG:
- update_key_cache_stat_var(dflt_key_cache, (size_t) value);
- value= (char*) dflt_key_cache + (ulong)value;
- end= longlong10_to_str(*(longlong*) value, buff, 10);
- break;
case SHOW_UNDEF:
break; // Return empty string
case SHOW_SYS: // Cannot happen
diff --git a/sql/sql_test.cc b/sql/sql_test.cc
index 76cb7cec3c7..401a413b2dc 100644
--- a/sql/sql_test.cc
+++ b/sql/sql_test.cc
@@ -500,6 +500,9 @@ static int print_key_cache_status(const char *name, KEY_CACHE *key_cache)
}
else
{
+ KEY_CACHE_STATISTICS stats;
+ get_key_cache_statistics(key_cache, 0, &stats);
+
printf("%s\n\
Buffer_size: %10lu\n\
Block_size: %10lu\n\
@@ -516,11 +519,12 @@ reads: %10s\n\n",
(ulong) key_cache->param_buff_size, key_cache->param_block_size,
key_cache->param_division_limit, key_cache->param_age_threshold,
key_cache->param_partitions,
- key_cache->blocks_used,key_cache->global_blocks_changed,
- llstr(key_cache->global_cache_w_requests,llbuff1),
- llstr(key_cache->global_cache_write,llbuff2),
- llstr(key_cache->global_cache_r_requests,llbuff3),
- llstr(key_cache->global_cache_read,llbuff4));
+ (ulong)stats.blocks_used,
+ (ulong)stats.blocks_changed,
+ llstr(stats.write_requests,llbuff1),
+ llstr(stats.writes,llbuff2),
+ llstr(stats.read_requests,llbuff3),
+ llstr(stats.reads,llbuff4));
}
return 0;
}
diff --git a/sql/table.cc b/sql/table.cc
index 302c5090925..1711fe8c426 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -2066,6 +2066,7 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
bool error_reported= FALSE;
uchar *record, *bitmaps;
Field **field_ptr, **vfield_ptr;
+ bool save_view_prepare_mode= thd->lex->view_prepare_mode;
DBUG_ENTER("open_table_from_share");
DBUG_PRINT("enter",("name: '%s.%s' form: 0x%lx", share->db.str,
share->table_name.str, (long) outparam));
@@ -2073,6 +2074,8 @@ int open_table_from_share(THD *thd, TABLE_SHARE *share, const char *alias,
/* Parsing of partitioning information from .frm needs thd->lex set up. */
DBUG_ASSERT(thd->lex->is_lex_started);
+ thd->lex->view_prepare_mode= FALSE; // not a view
+
error= 1;
bzero((char*) outparam, sizeof(*outparam));
outparam->in_use= thd;
@@ -2404,6 +2407,7 @@ partititon_err:
HA_HAS_OWN_BINLOGGING);
thd->status_var.opened_tables++;
+ thd->lex->view_prepare_mode= save_view_prepare_mode;
DBUG_RETURN (0);
err:
@@ -2416,6 +2420,7 @@ partititon_err:
#endif
outparam->file= 0; // For easier error checking
outparam->db_stat=0;
+ thd->lex->view_prepare_mode= save_view_prepare_mode;
free_root(&outparam->mem_root, MYF(0)); // Safe to call on bzero'd root
my_free((char*) outparam->alias, MYF(MY_ALLOW_ZERO_PTR));
DBUG_RETURN (error);