summaryrefslogtreecommitdiffstats
path: root/lint_summarizer.fnc
blob: 240eff383e8dfe8caa2d9e1660e3adf93e06372a (plain)
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
28
29
30
31
32
33
34
35
CREATE OR REPLACE FUNCTION lint_summarizer(
) RETURNS TRIGGER
AS $$
DECLARE
	t_noOfCerts		lint_summary.NO_OF_CERTS%TYPE;
BEGIN
	IF TG_OP = 'INSERT' THEN
		INSERT INTO lint_summary (
				LINT_ISSUE_ID, ISSUER_CA_ID, NOT_BEFORE_DATE, NO_OF_CERTS
			)
			VALUES (
				new.LINT_ISSUE_ID, new.ISSUER_CA_ID, new.NOT_BEFORE_DATE, 1
			)
			ON CONFLICT (LINT_ISSUE_ID, ISSUER_CA_ID, NOT_BEFORE_DATE) DO UPDATE
				SET NO_OF_CERTS = lint_summary.NO_OF_CERTS + 1;
		RETURN NEW;
	ELSIF TG_OP = 'DELETE' THEN
		UPDATE lint_summary
			SET NO_OF_CERTS = NO_OF_CERTS - 1
			WHERE LINT_ISSUE_ID = old.LINT_ISSUE_ID
				AND ISSUER_CA_ID = old.ISSUER_CA_ID
				AND NOT_BEFORE_DATE = old.NOT_BEFORE_DATE
			RETURNING NO_OF_CERTS
				INTO t_noOfCerts;
		IF FOUND AND (t_noOfCerts = 0) THEN
			DELETE FROM lint_summary
				WHERE LINT_ISSUE_ID = old.LINT_ISSUE_ID
					AND ISSUER_CA_ID = old.ISSUER_CA_ID
					AND NOT_BEFORE_DATE = old.NOT_BEFORE_DATE
					AND NO_OF_CERTS = 0;
		END IF;
		RETURN OLD;
	END IF;
END;
$$ LANGUAGE plpgsql STRICT;