File: union.sql

package info (click to toggle)
libpg-query 17-6.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,416 kB
  • sloc: ansic: 175,684; sql: 79,564; ruby: 1,605; makefile: 276; cpp: 221
file content (30 lines) | stat: -rw-r--r-- 913 bytes parent folder | download
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
WITH input AS (
    SELECT database_id, fingerprint, last_occurred_at, index
    FROM unnest($1::int[], $2::bigint[], $3::date[], $4::int[]) _(database_id, fingerprint, last_occurred_at, index)
), existing_queries AS (
    SELECT
        queries.id AS query_id, input.database_id, input.fingerprint,
        input.last_occurred_at, input.index
    FROM
        queries
        JOIN input USING (database_id, fingerprint)
), update_occurrences AS (
    UPDATE query_occurrences
    SET last = last_occurred_at
    FROM existing_queries q
    WHERE
        q.query_id = query_occurrences.query_id
        AND last < last_occurred_at
    RETURNING index
)
SELECT index, $5 AS "exists"
FROM update_occurrences
UNION (
    SELECT input.index, $6 AS "exists"
    FROM
        input
        LEFT JOIN existing_queries USING (database_id, fingerprint)
    WHERE existing_queries.database_id IS NULL
    LIMIT 1
)
LIMIT 5