/
telnov.ob
/
postgresql-patterns-library
Обзор
Документация
Войти
/
telnov.ob
/
postgresql-patterns-library
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
functions/encode/zigzag_decode.sql
67 строк
1 KB
rin-nas
language sql RETURN expression
14 апр 2026, 13:54
14 апр 2026, 13:54
cfbed9d
Код
Авторство
О чём код?
create or replace function public.zigzag_decode(n int) returns int immutable strict -- returns null if any parameter is null parallel safe security invoker language sql set search_path = '' return (n >> 1) # - (n & 1); comment on function public.zigzag_decode(n int) is $$ Converts a zigzag-encoded unsigned integer to signed integer. Examples: 9 => -5 7 => -4 5 => -3 3 => -2 1 => -1 0 => 0 2 => 1 4 => 2 6 => 3 8 => 4 10 => 5 $$; --TEST DO $$ BEGIN assert ( select (count(*), sum(i), sum(x)) = (11, 55, 0) from generate_series(0, 10) as i cross join public.zigzag_decode(i) as x ); END $$; ------------------------------------------------------------------------------------------------------------------------ create or replace function public.zigzag_decode(a int[], delta int default 0) returns int[] immutable strict -- returns null if any parameter is null parallel safe security invoker language plpgsql set search_path = '' as $func$ declare len int := cardinality(a); i int := 0; begin while i < len loop i := i + 1; a[i] := public.zigzag_decode(a[i]) + delta; end loop; return a; end; $func$; --TEST do $$ begin assert public.zigzag_decode('{3,1,0,2,4}'::int[]) = '{-2,-1,0,1,2}'::int[]; end; $$;