Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- db=> \d r_locks
- Table "public.r_locks"
- Column | Type | Modifiers
- ---------+-------------------------+--------------------
- code | character varying(1024) | not null
- version | numeric(38,0) | not null default 1
- Indexes:
- "r_locks_pkey" PRIMARY KEY, btree (code)
- CREATE OR REPLACE FUNCTION public.get_r_lock(codein CHARACTER VARYING,
- exclusive BOOLEAN)
- RETURNS NUMERIC
- LANGUAGE plpgsql
- AS $function$
- DECLARE
- ver NUMERIC;
- BEGIN
- IF exclusive
- THEN
- SELECT
- version
- FROM r_locks
- WHERE code = codeIn
- INTO ver
- FOR UPDATE;
- IF found
- THEN
- ver := ver + 1;
- UPDATE r_locks
- SET version = ver
- WHERE code = codeIn;
- END IF;
- ELSE
- BEGIN
- SELECT
- version
- FROM r_locks
- WHERE code = codeIn
- INTO ver
- FOR SHARE NOWAIT;
- EXCEPTION WHEN lock_not_available
- THEN
- RETURN -2;
- END;
- END IF;
- IF NOT found
- THEN
- RETURN -1;
- END IF;
- RETURN ver;
- END;
- $function$
- create or replace function
- make_r_code(tagIn numeric, blockId numeric)
- returns varchar immutable as $$
- begin
- if tagIn = 0 then
- return '-' || blockId;
- else
- return blockId || '-';
- end if;
- end;
- $$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement