-
-
Save Aunmag/6737e50815ed10832e8790d6ee6e3aa4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@use crate::model::Model; | |
@use crate::utils::to_pascal_case; | |
@use crate::utils::aggregate_string; | |
@(model: &Model) | |
CREATE OR REPLACE FUNCTION @(model.schema).@(model.get_function_name_set())(INOUT _id integer, @(model.get_function_parameters_set(true))) RETURNS integer | |
LANGUAGE plpgsql SECURITY DEFINER | |
AS $$ | |
@if model.has_audit() || model.has_audit_full() {DECLARE | |
@if model.has_audit() {_procedure text = '@(to_pascal_case(&model.get_function_name_set()))';} | |
@if model.has_audit_full() {_view_string_old text; | |
_view_string_new text;}} | |
BEGIN | |
IF _id IS NULL THEN | |
INSERT INTO @(model.schema).@(model.name) (@(model.get_inline_columns())) | |
VALUES (@(model.get_function_parameters_set(false))) | |
RETURNING id INTO _id; | |
@if model.has_audit() { | |
_procedure = _procedure || '#Ins';} | |
ELSE | |
@if model.has_audit_full() { | |
_view_string_old = public.getViewString('@(model.get_view_name().to_uppercase())_AUDIT', _id, NULL); | |
} | |
UPDATE @(model.schema).@(model.name) SET | |
@aggregate_string(&model.get_columns_real(), ",", |_, column, _, _| format!(" | |
{} = {}", column.name, column.get_variable_name())) | |
WHERE id = _id; | |
@if model.has_audit_full() { | |
_view_string_new = public.getViewString('@(model.get_view_name().to_uppercase())_AUDIT', _id, NULL); | |
PERFORM public.doAudit(_id, '@(model.get_view_name().to_uppercase())_AUDIT', _view_string_old, _view_string_new); | |
} | |
END IF;@if model.has_audit() || model.has_localized_column() { | |
}@for column in &model.get_columns_real() {@if column.is_localized() { | |
PERFORM i18n.translate_object_sync(_id, '@(column.get_localization_code(model))', 1, @(column.get_variable_name())); -- TODO: Verify language ID}} | |
@if model.has_audit() { | |
PERFORM public.auditAdd('@(model.get_class_name())', _id, _procedure);} | |
END; | |
$$; | |
ALTER FUNCTION @(model.schema).@(model.get_function_name_set())(INOUT _id integer, @(model.get_function_parameters_set(true))) OWNER TO maindb; | |
REVOKE ALL ON FUNCTION @(model.schema).@(model.get_function_name_set())(INOUT _id integer, @(model.get_function_parameters_set(true))) FROM PUBLIC; | |
GRANT ALL ON FUNCTION @(model.schema).@(model.get_function_name_set())(INOUT _id integer, @(model.get_function_parameters_set(true))) TO maindb_exec; | |
-- TODO: Complete comment | |
COMMENT ON FUNCTION @(model.schema).@(model.get_function_name_set())(INOUT _id integer, @(model.get_function_parameters_set(true))) IS 'Добавить/изменить TODO'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment