Initial commit
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
CREATE OR REPLACE FUNCTION entry_update (
|
||||
_entry_id entry.id%type,
|
||||
_is_valid entry.is_valid%type,
|
||||
_is_published entry.is_published%type,
|
||||
_is_terminology_reviewed entry.is_terminology_reviewed%type,
|
||||
_is_language_reviewed entry.is_language_reviewed%type,
|
||||
_status entry.status%type,
|
||||
_term entry.term%type,
|
||||
_version_author entry.version_author%type,
|
||||
_homonym_sort entry.homonym_sort%type,
|
||||
_domain_label_name_list VARCHAR[],
|
||||
_label entry.label%type,
|
||||
_definition entry.definition%type,
|
||||
_synonym entry.synonym%type,
|
||||
_link_list JSON[],
|
||||
_other entry.other%type,
|
||||
_foreign_language_content_list JSON[],
|
||||
_image entry.image%type,
|
||||
_audio entry.audio%type,
|
||||
_video entry.video%type,
|
||||
OUT _dictionary_id entry.dictionary_id%type
|
||||
)
|
||||
LANGUAGE plpgsql AS $$
|
||||
DECLARE
|
||||
_domain_label_id_list INT[] := ARRAY[]::INT[];
|
||||
_domain_label_name_to_associate domain_label.name%type;
|
||||
_domain_label_id_to_associate domain_label.id%type;
|
||||
_link_to_associate JSON;
|
||||
_foreign_language_content JSON;
|
||||
_foreign_language_id_to_associate language.id%type;
|
||||
|
||||
BEGIN
|
||||
-- Get associated dictionary's id.
|
||||
SELECT dictionary_id
|
||||
INTO _dictionary_id
|
||||
FROM entry
|
||||
WHERE id = _entry_id;
|
||||
|
||||
-- Update entry table.
|
||||
UPDATE entry
|
||||
SET
|
||||
is_valid = _is_valid,
|
||||
is_published = _is_published,
|
||||
is_terminology_reviewed = _is_terminology_reviewed,
|
||||
is_language_reviewed = _is_language_reviewed,
|
||||
status = _status,
|
||||
term = _term,
|
||||
version_author = _version_author,
|
||||
homonym_sort = _homonym_sort,
|
||||
wordforms = 'no content',
|
||||
accent = 'no content',
|
||||
pronunciation = 'no content',
|
||||
label = _label,
|
||||
definition = _definition,
|
||||
synonym = _synonym,
|
||||
other = _other,
|
||||
image = _image,
|
||||
audio = _audio,
|
||||
video = _video
|
||||
WHERE id = _entry_id;
|
||||
|
||||
-- Delete all existing domain label associations.
|
||||
DELETE
|
||||
FROM entry_domain_label
|
||||
WHERE entry_id = _entry_id;
|
||||
|
||||
-- Create new domain labels, if any.
|
||||
FOREACH _domain_label_name_to_associate IN ARRAY _domain_label_name_list LOOP
|
||||
_domain_label_id_to_associate := (SELECT id FROM domain_label WHERE name = _domain_label_name_to_associate);
|
||||
IF _domain_label_id_to_associate IS NULL THEN
|
||||
INSERT INTO domain_label (name, dictionary_id) VALUES (_domain_label_name_to_associate, _dictionary_id)
|
||||
returning id
|
||||
INTO _domain_label_id_to_associate;
|
||||
END IF;
|
||||
_domain_label_id_list := _domain_label_id_list || _domain_label_id_to_associate;
|
||||
END LOOP;
|
||||
|
||||
-- Associate domain labels, if any.
|
||||
FOREACH _domain_label_id_to_associate IN ARRAY _domain_label_id_list LOOP
|
||||
INSERT INTO entry_domain_label (entry_id, domain_label_id)
|
||||
VALUES (_entry_id, _domain_label_id_to_associate);
|
||||
END LOOP;
|
||||
|
||||
-- Delete all existing links.
|
||||
DELETE
|
||||
FROM entry_link
|
||||
WHERE entry_id = _entry_id;
|
||||
|
||||
-- Associate links, if any.
|
||||
FOREACH _link_to_associate IN ARRAY _link_list LOOP
|
||||
INSERT INTO entry_link (entry_id, type, link)
|
||||
VALUES (_entry_id, (_link_to_associate ->> 'type')::entry_link_type, _link_to_associate ->> 'link');
|
||||
END LOOP;
|
||||
|
||||
-- Delete all existing associated foreign content.
|
||||
DELETE
|
||||
FROM entry_foreign
|
||||
WHERE entry_id = _entry_id;
|
||||
|
||||
-- Associate new foreign content, if any.
|
||||
FOREACH _foreign_language_content IN ARRAY _foreign_language_content_list LOOP
|
||||
_foreign_language_id_to_associate := (SELECT id FROM language WHERE code = _foreign_language_content ->> 'language');
|
||||
INSERT INTO entry_foreign (entry_id, language_id, term, definition, synonym)
|
||||
VALUES (
|
||||
_entry_id, _foreign_language_id_to_associate,
|
||||
json_to_array(_foreign_language_content -> 'terms'),
|
||||
_foreign_language_content ->> 'definition',
|
||||
json_to_array(_foreign_language_content -> 'synonyms')
|
||||
);
|
||||
END LOOP;
|
||||
|
||||
END
|
||||
$$
|
||||
Reference in New Issue
Block a user