mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 20:36:16 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			184 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			184 lines
		
	
	
	
		
			4 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
-- source include/have_ucs2.inc
 | 
						||
 | 
						||
delimiter |;
 | 
						||
 | 
						||
#
 | 
						||
# BUG#17615: problem with character set
 | 
						||
#
 | 
						||
--disable_warnings
 | 
						||
drop function if exists bug17615|
 | 
						||
--enable_warnings
 | 
						||
 | 
						||
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|
 | 
						||
 | 
						||
drop function bug17615|
 | 
						||
drop table t3|
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# Testing COLLATE clause in
 | 
						||
# - IN parameter
 | 
						||
# - RETURNS
 | 
						||
# - DELCARE
 | 
						||
#
 | 
						||
 | 
						||
CREATE FUNCTION f(f1 VARCHAR(64) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci)
 | 
						||
  RETURNS VARCHAR(64) CHARACTER SET ucs2 COLLATE ucs2_danish_ci
 | 
						||
BEGIN
 | 
						||
  DECLARE f2 VARCHAR(64) CHARACTER SET ucs2 COLLATE ucs2_swedish_ci;
 | 
						||
  DECLARE f3 VARCHAR(64) CHARACTER SET ucs2 COLLATE ucs2_bin;
 | 
						||
  SET f1= concat(collation(f1), ' ', collation(f2), ' ', collation(f3));
 | 
						||
  RETURN f1;
 | 
						||
END|
 | 
						||
SELECT f('a')|
 | 
						||
SELECT collation(f('a'))|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
#
 | 
						||
# Testing keywords UNICODE + BINARY
 | 
						||
#
 | 
						||
CREATE FUNCTION f()
 | 
						||
  RETURNS VARCHAR(64) UNICODE BINARY
 | 
						||
BEGIN
 | 
						||
  RETURN '';
 | 
						||
END|
 | 
						||
SHOW CREATE FUNCTION f|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
CREATE FUNCTION f()
 | 
						||
  RETURNS VARCHAR(64) BINARY UNICODE
 | 
						||
BEGIN
 | 
						||
  RETURN '';
 | 
						||
END|
 | 
						||
SHOW CREATE FUNCTION f|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# Testing keywords ASCII + BINARY
 | 
						||
#
 | 
						||
CREATE FUNCTION f()
 | 
						||
  RETURNS VARCHAR(64) ASCII BINARY
 | 
						||
BEGIN
 | 
						||
  RETURN '';
 | 
						||
END|
 | 
						||
SHOW CREATE FUNCTION f|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
CREATE FUNCTION f()
 | 
						||
  RETURNS VARCHAR(64) BINARY ASCII
 | 
						||
BEGIN
 | 
						||
  RETURN '';
 | 
						||
END|
 | 
						||
SHOW CREATE FUNCTION f|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
#
 | 
						||
# Testing COLLATE in OUT parameter
 | 
						||
#
 | 
						||
 | 
						||
CREATE PROCEDURE p1(IN  f1 VARCHAR(64) CHARACTER SET ucs2 COLLATE ucs2_czech_ci,
 | 
						||
                    OUT f2 VARCHAR(64) CHARACTER SET ucs2 COLLATE ucs2_polish_ci)
 | 
						||
BEGIN
 | 
						||
  SET f2= f1;
 | 
						||
  SET f2= concat(collation(f1), ' ', collation(f2));
 | 
						||
END|
 | 
						||
 | 
						||
 | 
						||
CREATE FUNCTION f1()
 | 
						||
  RETURNS VARCHAR(64) CHARACTER SET ucs2
 | 
						||
BEGIN
 | 
						||
  DECLARE f1 VARCHAR(64) CHARACTER SET ucs2;
 | 
						||
  DECLARE f2 VARCHAR(64) CHARACTER SET ucs2;
 | 
						||
  SET f1='str';
 | 
						||
  CALL p1(f1, f2);
 | 
						||
  RETURN f2;
 | 
						||
END|
 | 
						||
 | 
						||
 | 
						||
SELECT f1()|
 | 
						||
DROP PROCEDURE p1|
 | 
						||
DROP FUNCTION f1|
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# COLLATE with no CHARACTER SET in IN param
 | 
						||
#
 | 
						||
CREATE FUNCTION f(f1 VARCHAR(64) COLLATE ucs2_unicode_ci)
 | 
						||
  RETURNS VARCHAR(64) CHARACTER SET ucs2
 | 
						||
BEGIN
 | 
						||
  RETURN 'str';
 | 
						||
END|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# COLLATE with no CHARACTER SET in RETURNS
 | 
						||
#
 | 
						||
CREATE FUNCTION f(f1 VARCHAR(64) CHARACTER SET ucs2)
 | 
						||
  RETURNS VARCHAR(64) COLLATE ucs2_unicode_ci
 | 
						||
BEGIN
 | 
						||
  RETURN 'str';
 | 
						||
END|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
 | 
						||
#
 | 
						||
# COLLATE with no CHARACTER SET in DECLARE
 | 
						||
#
 | 
						||
CREATE FUNCTION f(f1 VARCHAR(64) CHARACTER SET ucs2)
 | 
						||
  RETURNS VARCHAR(64) CHARACTER SET ucs2
 | 
						||
BEGIN
 | 
						||
  DECLARE f2 VARCHAR(64) COLLATE ucs2_unicode_ci;
 | 
						||
  RETURN 'str';
 | 
						||
END|
 | 
						||
DROP FUNCTION f|
 | 
						||
 | 
						||
 | 
						||
delimiter ;|
 | 
						||
 | 
						||
#
 | 
						||
# Bug#48766 SHOW CREATE FUNCTION returns extra data in return clause
 | 
						||
#
 | 
						||
SET NAMES utf8;
 | 
						||
#
 | 
						||
# Test that Latin letters are not prepended with extra '\0'.
 | 
						||
#
 | 
						||
CREATE FUNCTION bug48766 ()
 | 
						||
  RETURNS ENUM( 'w' ) CHARACTER SET ucs2
 | 
						||
  RETURN 0;
 | 
						||
SHOW CREATE FUNCTION bug48766;
 | 
						||
SELECT DTD_IDENTIFIER FROM INFORMATION_SCHEMA.ROUTINES
 | 
						||
WHERE ROUTINE_NAME='bug48766';
 | 
						||
DROP FUNCTION bug48766;
 | 
						||
#
 | 
						||
# Test non-Latin characters
 | 
						||
#
 | 
						||
CREATE FUNCTION bug48766 ()
 | 
						||
  RETURNS ENUM('а','б','в','г') CHARACTER SET ucs2
 | 
						||
  RETURN 0;
 | 
						||
SHOW CREATE FUNCTION bug48766;
 | 
						||
SELECT DTD_IDENTIFIER FROM INFORMATION_SCHEMA.ROUTINES
 | 
						||
WHERE ROUTINE_NAME='bug48766';
 | 
						||
 | 
						||
DROP FUNCTION bug48766;
 | 
						||
 | 
						||
#
 | 
						||
#
 | 
						||
#
 | 
						||
call mtr.add_suppression('invalid value in column mysql.proc.');
 | 
						||
set collation_connection=ucs2_general_ci;
 | 
						||
insert into mysql.proc (db, name, type, specific_name, language, sql_data_access, is_deterministic, security_type, param_list, returns, body, definer, created, modified, sql_mode, comment, character_set_client, collation_connection, db_collation, body_utf8 ) values ( 'a', 'a', 'function', 'bug14233_1', 'sql', 'reads_sql_data', 'no', 'definer', '', 'int(10)', 'select * from mysql.user', 'root@localhost', now(), '0000-00-00 00:00:00', '', '', '', '', '', 'select * from mysql.user' );
 | 
						||
select routine_name from information_schema.routines where routine_name='a';
 | 
						||
set collation_connection=default;
 | 
						||
delete from mysql.proc where name='a';
 |