summaryrefslogtreecommitdiffstats
path: root/database/scripts/plpgsqlfuncs.sql
blob: b5c553800c655c8c25179ea19a06e56f3e95c191 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- Inserts or updates a row in the 'ranking' table.
CREATE OR REPLACE FUNCTION merge_ranking(
    contextId_ BIGINT, benchmarkId_ BIGINT, metricId_ BIGINT, statId_ BIGINT,
    value_ REAL, pos_ BIGINT) RETURNS VOID AS
$$
BEGIN
    BEGIN
        INSERT INTO ranking(
            contextId, benchmarkId, metricId, statId, value, pos)
        VALUES (contextId_, benchmarkId_, metricId_, statId_, value_, pos_);
        RETURN;
    EXCEPTION WHEN unique_violation THEN
        UPDATE ranking
        SET value = value_, pos = pos_
        WHERE contextId = contextId_
          AND benchmarkId = benchmarkId_
          AND metricId = metricId_
          AND statId = statId_;
    END;
END;
$$
LANGUAGE plpgsql;