From 37dc7c80a5e0e6436ae2ee4a39f2b11ff1e32e4f Mon Sep 17 00:00:00 2001
From: unknown <gluh@mysql.com>
Date: Mon, 9 May 2005 16:22:49 +0000
Subject: [PATCH] Fix for bug #9404: information_schema: Weird error messages
 with SELECT SUM() ... GROUP BY queries

heap/hp_hash.c:
  Fix for bug #9404: information_schema: Weird error messages with SELECT SUM() ... GROUP BY queries
      use length in symbols instead of length in bytes
      to calculate record length and key length
---
 heap/hp_hash.c                         | 13 ++++++-------
 mysql-test/r/information_schema.result |  4 ++++
 mysql-test/t/information_schema.test   |  8 +++++++-
 3 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/heap/hp_hash.c b/heap/hp_hash.c
index 52a250bd7a..7f02eb587a 100644
--- a/heap/hp_hash.c
+++ b/heap/hp_hash.c
@@ -635,13 +635,12 @@ int hp_key_cmp(HP_KEYDEF *keydef, const byte *rec, const byte *key)
       key+= 2;                                  /* skip key pack length */
       if (cs->mbmaxlen > 1)
       {
-        uint char_length= seg->length / cs->mbmaxlen;
-        char_length_key= my_charpos(cs, key, key + char_length_key,
-                                    char_length);
-        set_if_smaller(char_length_key, seg->length);
-        char_length_rec= my_charpos(cs, pos, pos + char_length_rec,
-                                    char_length);
-        set_if_smaller(char_length_rec, seg->length);
+        uint char_length1, char_length2;
+        char_length1= char_length2= seg->length / cs->mbmaxlen; 
+        char_length1= my_charpos(cs, key, key + char_length_key, char_length1);
+        set_if_smaller(char_length_key, char_length1);
+        char_length2= my_charpos(cs, pos, pos + char_length_rec, char_length2);
+        set_if_smaller(char_length_rec, char_length2);
       }
 
       if (cs->coll->strnncollsp(seg->charset,
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index 0aa5e75920..6104fc772b 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -734,3 +734,7 @@ x_real	NULL	NULL
 x_float	NULL	NULL
 x_double_precision	NULL	NULL
 drop table t1;
+SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
+table_schema	count(*)
+information_schema	15
+mysql	17
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 1739604372..2da814526a 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -1,4 +1,4 @@
-# This test uses grants, which can't get tested for embedded server
+# This test  uses grants, which can't get tested for embedded server
 -- source include/not_embedded.inc
 
 # Test for information_schema.schemata &
@@ -473,3 +473,9 @@ SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME= 't1';
 drop table t1;
+
+#
+# Bug #9404  information_schema: Weird error messages 
+# with SELECT SUM() ... GROUP BY queries
+#
+SELECT table_schema, count(*) FROM information_schema.TABLES GROUP BY TABLE_SCHEMA;
-- 
2.30.9