Files
medical-monitoring-system/migrations/functions.sql
T
2026-07-12 15:08:43 +04:00

73 lines
1.6 KiB
PL/PgSQL

-- Функция: нет двойных пробелов подряд
CREATE OR REPLACE FUNCTION no_double_space (str text)
RETURNS boolean
AS $$
BEGIN
RETURN str !~ E'\s{2,}';
END;
$$
LANGUAGE plpgsql
IMMUTABLE;
-- Функция: нет пробелов в начале и конце строки
CREATE OR REPLACE FUNCTION no_space_start_end (str text)
RETURNS boolean
AS $$
BEGIN
RETURN str !~ E'^\s'
AND str !~ E'\s$';
END;
$$
LANGUAGE plpgsql
IMMUTABLE;
-- Функция: нет пробелов вообще
CREATE OR REPLACE FUNCTION no_space (str text)
RETURNS boolean
AS $$
BEGIN
RETURN str !~ E'\s';
END;
$$
LANGUAGE plpgsql
IMMUTABLE;
-- Функция: длина строки в заданных границах
CREATE OR REPLACE FUNCTION str_length_between (str text, min_len int, max_len int)
RETURNS boolean
AS $$
BEGIN
RETURN LENGTH(str) BETWEEN min_len AND max_len;
END;
$$
LANGUAGE plpgsql
IMMUTABLE;
-- Функция: стандартная проверка для слова
CREATE OR REPLACE FUNCTION default_word_check (str text)
RETURNS boolean
AS $$
BEGIN
RETURN str IS NULL
OR no_space (str)
AND str_length_between (str, 1, 64);
END;
$$
LANGUAGE plpgsql
IMMUTABLE;
-- Функция: стандартная проверка для строки
CREATE OR REPLACE FUNCTION default_str_check (str text)
RETURNS boolean
AS $$
BEGIN
RETURN str IS NULL
OR no_double_space (str)
AND no_space_start_end (str)
AND str_length_between (str, 1, 128);
END;
$$
LANGUAGE plpgsql
IMMUTABLE;