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"