Initial commit
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
-- Creates new own dictionary.
|
||||
CREATE OR REPLACE FUNCTION dictionary_new (
|
||||
_name_sl dictionary.name_sl%type,
|
||||
_name_sl_short dictionary.name_sl_short%type,
|
||||
_name_en dictionary.name_en%type,
|
||||
_author dictionary.author%type,
|
||||
_issn dictionary.issn%type,
|
||||
_domain_primary_id dictionary.domain_primary_id%type,
|
||||
_entries_have_domain_labels dictionary.entries_have_domain_labels%type,
|
||||
_entries_have_label dictionary.entries_have_label%type,
|
||||
_entries_have_definition dictionary.entries_have_definition%type,
|
||||
_entries_have_synonyms dictionary.entries_have_synonyms%type,
|
||||
_entries_have_links dictionary.entries_have_links%type,
|
||||
_entries_have_other dictionary.entries_have_other%type,
|
||||
_entries_have_foreign_languages dictionary.entries_have_foreign_languages%type,
|
||||
_entries_have_foreign_definitions dictionary.entries_have_foreign_definitions%type,
|
||||
_entries_have_foreign_synonyms dictionary.entries_have_foreign_synonyms%type,
|
||||
_entries_have_images dictionary.entries_have_images%type,
|
||||
_entries_have_audio dictionary.entries_have_audio%type,
|
||||
_entries_have_videos dictionary.entries_have_videos%type,
|
||||
_domain_secondary smallint[],
|
||||
_domain_secondary_new_name_sl varchar[],
|
||||
_domain_secondary_new_name_en varchar[],
|
||||
_language int[],
|
||||
_creator_id user_role.user_id%type,
|
||||
OUT _dictionary_id dictionary.id%type
|
||||
)
|
||||
LANGUAGE plpgsql AS $$
|
||||
DECLARE
|
||||
_domain_secondary_id domain_secondary.id%type;
|
||||
_secondary_domain_id domain_secondary.id%type;
|
||||
|
||||
BEGIN
|
||||
-- Check uniqueness of names within own dictionaries.
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM dictionary
|
||||
WHERE
|
||||
count_comments IS NOT NULL AND -- Indicator of own dictionaries.
|
||||
(
|
||||
name_sl = _name_sl OR
|
||||
name_sl_short = _name_sl_short OR
|
||||
name_en = _name_en
|
||||
)
|
||||
) THEN
|
||||
RAISE EXCEPTION 'One of dictionary names not unique among own dictionaries.';
|
||||
END IF;
|
||||
|
||||
-- Create new dictionary.
|
||||
INSERT INTO dictionary (
|
||||
name_sl,
|
||||
name_sl_short,
|
||||
name_en,
|
||||
author,
|
||||
issn,
|
||||
domain_primary_id,
|
||||
count_comments,
|
||||
entries_have_domain_labels,
|
||||
entries_have_label,
|
||||
entries_have_definition,
|
||||
entries_have_synonyms,
|
||||
entries_have_links,
|
||||
entries_have_other,
|
||||
entries_have_foreign_languages,
|
||||
entries_have_foreign_definitions,
|
||||
entries_have_foreign_synonyms,
|
||||
entries_have_images,
|
||||
entries_have_audio,
|
||||
entries_have_videos
|
||||
)
|
||||
VALUES (
|
||||
_name_sl,
|
||||
_name_sl_short,
|
||||
_name_en,
|
||||
_author,
|
||||
_issn,
|
||||
_domain_primary_id,
|
||||
0,
|
||||
_entries_have_domain_labels,
|
||||
_entries_have_label,
|
||||
_entries_have_definition,
|
||||
_entries_have_synonyms,
|
||||
_entries_have_links,
|
||||
_entries_have_other,
|
||||
_entries_have_foreign_languages,
|
||||
_entries_have_foreign_definitions,
|
||||
_entries_have_foreign_synonyms,
|
||||
_entries_have_images,
|
||||
_entries_have_audio,
|
||||
_entries_have_videos
|
||||
)
|
||||
RETURNING id
|
||||
INTO _dictionary_id;
|
||||
|
||||
-- Create new secondary domains, if any.
|
||||
FOR i IN 1..COALESCE(array_length(_domain_secondary_new_name_sl, 1), 0) LOOP
|
||||
INSERT INTO domain_secondary (name_sl, name_en)
|
||||
VALUES
|
||||
(_domain_secondary_new_name_sl[i], _domain_secondary_new_name_en[i])
|
||||
RETURNING id
|
||||
INTO _domain_secondary_id;
|
||||
|
||||
_domain_secondary := _domain_secondary || _domain_secondary_id;
|
||||
END LOOP;
|
||||
|
||||
-- Associate secondary domains, if any.
|
||||
FOREACH _secondary_domain_id IN ARRAY _domain_secondary LOOP
|
||||
INSERT INTO dictionary_domain_secondary (dictionary_id, domain_secondary_id)
|
||||
VALUES (_dictionary_id, _secondary_domain_id);
|
||||
END LOOP;
|
||||
|
||||
-- Associate languages, if any.
|
||||
FOR i IN 1..COALESCE(array_length(_language, 1), 0) LOOP
|
||||
INSERT INTO dictionary_language (dictionary_id, language_id, selection_order)
|
||||
VALUES (_dictionary_id, _language[i], i);
|
||||
END LOOP;
|
||||
|
||||
-- Make the creator its administrator.
|
||||
INSERT INTO user_role (user_id, role_name, dictionary_id, administration, editing, terminology_review, language_review)
|
||||
VALUES (_creator_id, 'editor', _dictionary_id, TRUE, TRUE, TRUE, TRUE);
|
||||
|
||||
END
|
||||
$$
|
||||
Reference in New Issue
Block a user