mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
d7abca9ac3
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
40 lines
1.4 KiB
Text
40 lines
1.4 KiB
Text
drop function if exists bug17615|
|
||
create table t3 (a varchar(256) unicode)|
|
||
create function bug17615() returns varchar(256) unicode
|
||
begin
|
||
declare tmp_res varchar(256) unicode;
|
||
set tmp_res= 'foo string';
|
||
return tmp_res;
|
||
end|
|
||
insert into t3 values(bug17615())|
|
||
select * from t3|
|
||
a
|
||
foo string
|
||
drop function bug17615|
|
||
drop table t3|
|
||
SET NAMES utf8;
|
||
DROP FUNCTION IF EXISTS bug48766;
|
||
CREATE FUNCTION bug48766 ()
|
||
RETURNS ENUM( 'w' ) CHARACTER SET ucs2
|
||
RETURN 0;
|
||
SHOW CREATE FUNCTION bug48766;
|
||
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||
bug48766 CREATE DEFINER=`root`@`localhost` FUNCTION `bug48766`() RETURNS enum('w') CHARSET ucs2
|
||
RETURN 0 utf8 utf8_general_ci latin1_swedish_ci
|
||
SELECT DTD_IDENTIFIER FROM INFORMATION_SCHEMA.ROUTINES
|
||
WHERE ROUTINE_NAME='bug48766';
|
||
DTD_IDENTIFIER
|
||
enum('w') CHARSET ucs2
|
||
DROP FUNCTION bug48766;
|
||
CREATE FUNCTION bug48766 ()
|
||
RETURNS ENUM('а','б','в','г') CHARACTER SET ucs2
|
||
RETURN 0;
|
||
SHOW CREATE FUNCTION bug48766;
|
||
Function sql_mode Create Function character_set_client collation_connection Database Collation
|
||
bug48766 CREATE DEFINER=`root`@`localhost` FUNCTION `bug48766`() RETURNS enum('а','б','в','г') CHARSET ucs2
|
||
RETURN 0 utf8 utf8_general_ci latin1_swedish_ci
|
||
SELECT DTD_IDENTIFIER FROM INFORMATION_SCHEMA.ROUTINES
|
||
WHERE ROUTINE_NAME='bug48766';
|
||
DTD_IDENTIFIER
|
||
enum('а','б','в','г') CHARSET ucs2
|
||
DROP FUNCTION bug48766;
|