diff options
author | Sergei Golubchik <sergii@pisem.net> | 2010-11-02 10:12:29 +0100 |
---|---|---|
committer | Sergei Golubchik <sergii@pisem.net> | 2010-11-02 10:12:29 +0100 |
commit | 74711a46153088e5e9159977b42ba7615a3af2df (patch) | |
tree | 16b52e05f461a0f9392f4c2bfaeacb3dadfeb126 /sql | |
parent | 8e7ebfbce89a472b3c5a6c30e6de101e567a8218 (diff) | |
parent | 5789f96c624d00aeef137602ab0c4828620748e8 (diff) | |
download | mariadb-git-74711a46153088e5e9159977b42ba7615a3af2df.tar.gz |
merge w/ 5.2
Diffstat (limited to 'sql')
-rw-r--r-- | sql/mysql_priv.h | 3 | ||||
-rw-r--r-- | sql/mysqld.cc | 48 | ||||
-rw-r--r-- | sql/sql_show.cc | 38 | ||||
-rw-r--r-- | sql/sql_test.cc | 14 | ||||
-rw-r--r-- | sql/table.cc | 5 |
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); |