128 lines
2.9 KiB
PL/PgSQL
128 lines
2.9 KiB
PL/PgSQL
-- LegacyWorlds Beta 6
|
|
-- PostgreSQL database scripts
|
|
--
|
|
-- Definitions management functions
|
|
--
|
|
-- Copyright(C) 2004-2010, DeepClone Development
|
|
-- --------------------------------------------------------
|
|
|
|
--
|
|
-- Creates or updates a language definition
|
|
--
|
|
-- Parameters:
|
|
-- lid Language identifier
|
|
-- lnm Language name
|
|
--
|
|
|
|
CREATE OR REPLACE FUNCTION defs.uoc_language( lid TEXT , lnm TEXT )
|
|
RETURNS VOID
|
|
STRICT
|
|
VOLATILE
|
|
SECURITY DEFINER
|
|
AS $$
|
|
BEGIN
|
|
INSERT INTO defs.languages ( language , name )
|
|
VALUES ( lower( lid ) , lnm );
|
|
EXCEPTION
|
|
WHEN unique_violation THEN
|
|
UPDATE defs.languages SET name = lnm
|
|
WHERE language = lower( lid );
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
GRANT EXECUTE ON FUNCTION defs.uoc_language( TEXT , TEXT ) TO :dbuser;
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION defs.uoc_language( lid TEXT , lnm TEXT , a_id INT )
|
|
RETURNS VOID
|
|
STRICT VOLATILE
|
|
SECURITY DEFINER
|
|
AS $$
|
|
BEGIN
|
|
PERFORM admin.write_log( a_id , 'INFO'::log_level , 'Updating language ' || lid );
|
|
PERFORM defs.uoc_language( lid , lnm );
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
GRANT EXECUTE ON FUNCTION defs.uoc_language( TEXT, TEXT , INT ) TO :dbuser;
|
|
|
|
|
|
--
|
|
-- Creates or updates a translation
|
|
--
|
|
-- Parameters:
|
|
-- lid Language identifier
|
|
-- sid String identifier
|
|
-- txt Translation
|
|
--
|
|
|
|
CREATE OR REPLACE FUNCTION defs.uoc_translation( lid TEXT , sid TEXT , txt TEXT )
|
|
RETURNS VOID
|
|
STRICT
|
|
VOLATILE
|
|
SECURITY DEFINER
|
|
AS $$
|
|
DECLARE
|
|
isid INT;
|
|
ilid INT;
|
|
BEGIN
|
|
-- Get language
|
|
SELECT INTO ilid id FROM defs.languages
|
|
WHERE language = lid;
|
|
|
|
-- Create string, if needed
|
|
BEGIN
|
|
INSERT INTO defs.strings (name) VALUES ( sid )
|
|
RETURNING id INTO isid;
|
|
EXCEPTION
|
|
WHEN unique_violation THEN
|
|
SELECT INTO isid id FROM defs.strings
|
|
WHERE name = sid;
|
|
END;
|
|
|
|
-- Create or update translation
|
|
BEGIN
|
|
INSERT INTO defs.translations ( string_id , lang_id , translated_string )
|
|
VALUES ( isid , ilid , txt );
|
|
EXCEPTION
|
|
WHEN unique_violation THEN
|
|
UPDATE defs.translations SET translated_string = txt
|
|
WHERE string_id = isid AND lang_id = ilid;
|
|
END;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
GRANT EXECUTE ON FUNCTION defs.uoc_translation( TEXT , TEXT , TEXT ) TO :dbuser;
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION defs.uoc_translation( lid TEXT , sid TEXT , txt TEXT , a_id INT )
|
|
RETURNS VOID
|
|
STRICT VOLATILE
|
|
SECURITY DEFINER
|
|
AS $$
|
|
BEGIN
|
|
PERFORM admin.write_log( a_id , 'INFO'::log_level , 'Updating string ' || sid || ' in language ' || lid );
|
|
PERFORM defs.uoc_translation( lid , sid , txt );
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
GRANT EXECUTE ON FUNCTION defs.uoc_translation( TEXT, TEXT , TEXT , INT ) TO :dbuser;
|
|
|
|
|
|
|
|
--
|
|
-- Translations view (used to load all translations)
|
|
--
|
|
|
|
CREATE VIEW defs.translations_view
|
|
AS SELECT l.language AS language_id , l.name AS language_name ,
|
|
s.name AS string_id , t.translated_string AS translation
|
|
FROM defs.translations t
|
|
INNER JOIN defs.strings s
|
|
ON s.id = t.string_id
|
|
INNER JOIN defs.languages l
|
|
ON l.id = t.lang_id;
|
|
|
|
GRANT SELECT ON defs.translations_view TO :dbuser;
|
|
|
|
|