8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-26 07:23:08 +01:00
firebird-mirror/src/misc/intl.sql
asfernandes 56cfc8fb2b Misc.
2005-07-05 22:39:03 +00:00

142 lines
3.1 KiB
MySQL

/***
*
* Usage example
* -------------
*
* input 'intl.sql';
*
* execute procedure sp_register_character_set ('CHARSET_NAME', 1);
* execute procedure sp_register_collation ('CHARSET_NAME', 'COLLATION_NAME');
* commit;
*
* execute procedure sp_unregister_collation ('CHARSET_NAME', 'COLLATION_NAME');
* execute procedure sp_unregister_character_set ('CHARSET_NAME');
* commit;
*
*/
set term !;
create or alter procedure sp_register_character_set
(
name char(31) character set unicode_fss,
max_bytes_per_character smallint
)
as
declare variable id smallint;
declare variable temp_id smallint;
begin
name = upper(name);
id = 255;
for select rdb$character_set_id
from rdb$character_sets
order by rdb$character_set_id desc
into :temp_id do
begin
if (temp_id = id) then
id = id - 1;
else
break;
end
insert into rdb$character_sets
(rdb$character_set_name, rdb$character_set_id, rdb$system_flag, rdb$bytes_per_character)
values (:name, :id, 0, :max_bytes_per_character);
insert into rdb$collations
(rdb$collation_name, rdb$collation_id, rdb$character_set_id, rdb$system_flag)
values (:name, 0, :id, 0);
end!
create or alter procedure sp_unregister_character_set
(
name char(31) character set unicode_fss
)
as
declare variable id smallint;
begin
name = upper(name);
select rdb$character_set_id
from rdb$character_sets
where rdb$character_set_name = :name
into :id;
delete from rdb$collations
where rdb$character_set_id = :id;
delete from rdb$character_sets
where rdb$character_set_id = :id;
end!
create or alter procedure sp_register_collation
(
character_set char(31) character set unicode_fss,
name char(31) character set unicode_fss,
base_name char(31) character set unicode_fss = null,
attributes smallint = null,
specific_attributes blob sub_type text character set unicode_fss = null
)
as
declare variable id smallint;
declare variable temp_id smallint;
declare variable charset_id smallint;
begin
character_set = upper(character_set);
name = upper(name);
base_name = coalesce(upper(base_name), name);
id = 126;
select rdb$character_set_id
from rdb$character_sets
where rdb$character_set_name = :character_set
into :charset_id;
for select rdb$collation_id
from rdb$collations
where rdb$character_set_id = :charset_id
order by rdb$collation_id desc
into :temp_id do
begin
if (temp_id = id) then
id = id - 1;
else
break;
end
insert into rdb$collations
(rdb$collation_name, rdb$collation_id, rdb$character_set_id, rdb$system_flag,
rdb$base_collation_name, rdb$collation_attributes, rdb$specific_attributes)
values (:name, :id, :charset_id, 0, :base_name, :attributes, :specific_attributes);
end!
create or alter procedure sp_unregister_collation
(
character_set char(31) character set unicode_fss,
name char(31) character set unicode_fss
)
as
declare variable id smallint;
begin
character_set = upper(character_set);
name = upper(name);
select rdb$character_set_id
from rdb$character_sets
where rdb$character_set_name = :character_set
into :id;
delete from rdb$collations
where rdb$character_set_id = :id and rdb$collation_name = :name;
end!
set term ;!
commit;