Files
query-orchestration/database/migrations/00000000000100_query_views.up.sql
T
Michael McGuinness 750abe1be3 Merged in feature/entitylogs (pull request #67)
Query Version Update
2025-02-14 18:43:26 +00:00

59 lines
2.2 KiB
SQL

CREATE VIEW queryCurrentActiveVersions as
SELECT DISTINCT
av.queryId,
(FIRST_VALUE(av.versionId) OVER (PARTITION BY av.queryId ORDER BY av.id DESC))::int as id
FROM queryActiveVersions as av;
CREATE VIEW queryLatestVersions as
SELECT queryId, max(id)::int as id
FROM queryVersions
GROUP BY queryId;
CREATE VIEW fullActiveQueries AS
with config as (
SELECT c.queryId, c.config
FROM queries AS q
LEFT JOIN queryCurrentActiveVersions as av on q.id = av.queryId
LEFT JOIN queryConfigs AS c ON q.id = c.queryId
and isInVersion(av.id, c.addedVersion, c.removedVersion)
),
requiredIds as (
SELECT r.queryId,
ARRAY_AGG(DISTINCT r.requiredQueryId)
FILTER (WHERE r.requiredQueryId != '00000000-0000-0000-0000-000000000000')::uuid[]
as requiredIds
FROM queries AS q
LEFT JOIN queryCurrentActiveVersions as av on q.id = av.queryId
LEFT JOIN requiredQueries AS r ON q.id = r.queryId
and isInVersion(av.id, r.addedVersion, r.removedVersion)
GROUP BY r.queryId
)
SELECT DISTINCT q.id, q.type, coalesce(av.id, 0) as activeVersion, coalesce(lv.id, 0) as latestVersion, c.config,
coalesce(
r.requiredIds,
array[]::uuid[]
)::uuid[] as requiredIds
FROM queries AS q
LEFT JOIN queryCurrentActiveVersions as av on q.id = av.queryId
LEFT JOIN queryLatestVersions as lv on lv.queryId = q.id
LEFT JOIN config AS c ON q.id = c.queryId
LEFT JOIN requiredIds AS r ON q.id = r.queryId;
CREATE VIEW queryActiveDependencies AS
with recursive queryActiveDependencies AS (
SELECT q.id, r.requiredQueryId
FROM queries AS q
LEFT JOIN queryCurrentActiveVersions as av on q.id = av.queryId
LEFT JOIN requiredQueries AS r ON q.id = r.queryId
and isInVersion(av.id, r.addedVersion, r.removedVersion)
UNION ALL
SELECT qd.id, r.requiredQueryId
FROM queries AS q
LEFT JOIN queryCurrentActiveVersions as av on q.id = av.queryId
LEFT JOIN requiredQueries AS r ON q.id = r.queryId
and isInVersion(av.id, r.addedVersion, r.removedVersion)
JOIN queryActiveDependencies as qd on q.id = qd.requiredQueryId
)
SELECT DISTINCT id, requiredQueryId FROM queryActiveDependencies;