summaryrefslogtreecommitdiff
path: root/sql/sp.cc
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mysql.com>2009-12-02 15:17:08 +0400
committerAlexander Barkov <bar@mysql.com>2009-12-02 15:17:08 +0400
commitd7abca9ac38fc36eb3ff7f96409c0cabe5f5c03e (patch)
tree5ee906770183fa2022e546a452dee5181fc3c2f1 /sql/sp.cc
parentb19ae492c06176733c5cd96a6869d91de3b1e579 (diff)
downloadmariadb-git-d7abca9ac38fc36eb3ff7f96409c0cabe5f5c03e.tar.gz
Bug#48766 SHOW CREATE FUNCTION returns extra data in return clause
Problem: SHOW CREATE FUNCTION and SELECT DTD_IDENTIFIER FROM I_S.ROUTINES returned wrong values in case of ENUM return data type and UCS2 character set. Fix: the string to collect returned data type was incorrectly set to "binary" character set, therefore UCS2 values where returned with extra '\0' characters. Setting string character set to creation_ctx->get_client_cs() in sp_find_routine(), and to system_charset_info in sp_create_routine fixes the problem. Adding tests: - the original test with Latin letters - an extra test with non-Latin letters
Diffstat (limited to 'sql/sp.cc')
-rw-r--r--sql/sp.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/sql/sp.cc b/sql/sp.cc
index d3c5dfb96d0..6fad1d70ffd 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -900,6 +900,7 @@ sp_create_routine(THD *thd, int type, sp_head *sp)
DBUG_PRINT("enter", ("type: %d name: %.*s",type, (int) sp->m_name.length,
sp->m_name.str));
String retstr(64);
+ retstr.set_charset(system_charset_info);
DBUG_ASSERT(type == TYPE_ENUM_PROCEDURE ||
type == TYPE_ENUM_FUNCTION);
@@ -1403,6 +1404,7 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp,
64 -- size of "returns" column of mysql.proc.
*/
String retstr(64);
+ retstr.set_charset(sp->get_creation_ctx()->get_client_cs());
DBUG_PRINT("info", ("found: 0x%lx", (ulong)sp));
if (sp->m_first_free_instance)