File: GetLastChangeIndex.sql

package info (click to toggle)
orthanc-postgresql 5.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 1,372 kB
  • sloc: cpp: 18,362; python: 388; sql: 275; makefile: 30; sh: 13
file content (27 lines) | stat: -rw-r--r-- 783 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
-- In PostgreSQL, the most straightforward query would be to run:

--   SELECT currval(pg_get_serial_sequence('Changes', 'seq'))".

-- Unfortunately, this raises the error message "currval of sequence
-- "changes_seq_seq" is not yet defined in this session" if no change
-- has been inserted before the SELECT. We thus track the sequence
-- index with a trigger.
-- http://www.neilconway.org/docs/sequences/

INSERT INTO GlobalIntegers
SELECT 6, CAST(COALESCE(MAX(seq), 0) AS BIGINT) FROM Changes;


CREATE FUNCTION InsertedChangeFunc() 
RETURNS TRIGGER AS $body$
BEGIN
  UPDATE GlobalIntegers SET value = new.seq WHERE key = 6;
  RETURN NULL;
END;
$body$ LANGUAGE plpgsql;


CREATE TRIGGER InsertedChange
AFTER INSERT ON Changes
FOR EACH ROW
EXECUTE PROCEDURE InsertedChangeFunc();