From 1147e0027424acfed7cd833d0edbd6f111208f8a Mon Sep 17 00:00:00 2001 From: "ingo@mysql.com" <> Date: Sun, 7 Aug 2005 20:39:17 +0200 Subject: [PATCH] Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO Give the user a warning if he tries to destroy the default key cache. --- mysql-test/r/key_cache.result | 6 ++++++ mysql-test/t/key_cache.test | 7 +++++++ sql/set_var.cc | 5 +++++ sql/share/errmsg.txt | 3 +++ 4 files changed, 21 insertions(+) diff --git a/mysql-test/r/key_cache.result b/mysql-test/r/key_cache.result index b3aa4c5061c..de9a2b2c003 100644 --- a/mysql-test/r/key_cache.result +++ b/mysql-test/r/key_cache.result @@ -289,3 +289,9 @@ check table t1; Table Op Msg_type Msg_text test.t1 check status OK drop table t1; +set @@global.key_buffer_size=0; +Warnings: +Warning 1438 Cannot drop default keycache +select @@global.key_buffer_size; +@@global.key_buffer_size +2097152 diff --git a/mysql-test/t/key_cache.test b/mysql-test/t/key_cache.test index 5d0f904a716..df584021af1 100644 --- a/mysql-test/t/key_cache.test +++ b/mysql-test/t/key_cache.test @@ -168,4 +168,11 @@ check table t1; drop table t1; +# +# Bug#10473 - Can't set 'key_buffer_size' system variable to ZERO +# (One cannot drop the default key cache.) +# +set @@global.key_buffer_size=0; +select @@global.key_buffer_size; + # End of 4.1 tests diff --git a/sql/set_var.cc b/sql/set_var.cc index ff37c46349d..637b33f18d2 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -2293,7 +2293,12 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var) if (!tmp) // Zero size means delete { if (key_cache == dflt_key_cache) + { + push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_WARN_CANT_DROP_DEFAULT_KEYCACHE, + ER(ER_WARN_CANT_DROP_DEFAULT_KEYCACHE)); goto end; // Ignore default key cache + } if (key_cache->key_cache_inited) // If initied { diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 5dd5cd9c775..c47b3bb7dd9 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5388,3 +5388,6 @@ ER_STACK_OVERRUN_NEED_MORE eng "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack." ER_TOO_LONG_BODY 42000 S1009 eng "Routine body for '%-.100s' is too long" +ER_WARN_CANT_DROP_DEFAULT_KEYCACHE + eng "Cannot drop default keycache" + ger "Der Default-Keycache kann nicht gel�scht werden"