Skip to content

Instantly share code, notes, and snippets.

@Aunmag

Aunmag/rust.sql Secret

Created January 21, 2020 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Aunmag/6737e50815ed10832e8790d6ee6e3aa4 to your computer and use it in GitHub Desktop.
Save Aunmag/6737e50815ed10832e8790d6ee6e3aa4 to your computer and use it in GitHub Desktop.
@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