Files
query-orchestration/database/migrations/00000000000005_collectors.up.sql
T
Michael McGuinness 4bbc24e8aa Merged in feature/codeversions (pull request #69)
Code Versions

* split

* latestVersion

* test

* config

* codeversions
2025-02-17 14:30:37 +00:00

106 lines
3.3 KiB
PL/PgSQL

CREATE TABLE collectors (
id uuid primary key DEFAULT uuid_generate_v7(),
jobId uuid not null,
foreign key (jobId) references jobs(id),
unique (jobId)
);
CREATE TABLE collectorVersions (
collectorId uuid not null,
id int not null,
addedAt timestamp not null default current_timestamp,
primary key (id, collectorId),
foreign key (collectorId) references collectors(id)
);
CREATE OR REPLACE FUNCTION setCollectorVersionNumber()
RETURNS TRIGGER AS $$
BEGIN
SELECT COALESCE(MAX(id), 0) + 1
INTO NEW.id
FROM collectorVersions
WHERE collectorId = NEW.collectorId;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER setCollectorVersionNumberTrigger
BEFORE INSERT ON collectorVersions
FOR EACH ROW
EXECUTE FUNCTION setCollectorVersionNumber();
CREATE TABLE collectorActiveVersions (
id uuid primary key DEFAULT uuid_generate_v7(),
collectorId uuid not null,
versionId int not null,
foreign key (collectorId, versionId) references collectorVersions(collectorId, id)
);
CREATE TABLE collectorMinCleanVersions (
id uuid primary key DEFAULT uuid_generate_v7(),
collectorId uuid not null,
versionId int not null,
addedVersion int not null,
removedVersion int,
foreign key (collectorId, addedVersion) references collectorVersions(collectorId, id),
foreign key (collectorId, removedVersion) references collectorVersions(collectorId, id),
foreign key (collectorId) references collectors(id)
);
CREATE OR REPLACE FUNCTION removeMinCleanVersion()
RETURNS TRIGGER AS $$
BEGIN
UPDATE collectorMinCleanVersions
SET removedVersion = NEW.addedVersion
WHERE collectorId = NEW.collectorId and removedVersion is null;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER removeMinCleanVersionTrigger
BEFORE INSERT ON collectorMinCleanVersions
FOR EACH ROW
EXECUTE FUNCTION removeMinCleanVersion();
CREATE TABLE collectorMinTextVersions (
id uuid primary key DEFAULT uuid_generate_v7(),
collectorId uuid not null,
versionId int not null,
addedVersion int not null,
removedVersion int,
foreign key (collectorId, addedVersion) references collectorVersions(collectorId, id),
foreign key (collectorId, removedVersion) references collectorVersions(collectorId, id),
foreign key (collectorId) references collectors(id)
);
CREATE OR REPLACE FUNCTION removeMinTextVersion()
RETURNS TRIGGER AS $$
BEGIN
UPDATE collectorMinTextVersions
SET removedVersion = NEW.addedVersion
WHERE collectorId = NEW.collectorId and removedVersion is null;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER removeMinTextVersionTrigger
BEFORE INSERT ON collectorMinTextVersions
FOR EACH ROW
EXECUTE FUNCTION removeMinTextVersion();
CREATE TABLE collectorQueries (
id uuid primary key DEFAULT uuid_generate_v7(),
collectorId uuid not null,
name varchar(255) not null,
queryId uuid not null,
addedVersion int not null,
removedVersion int,
foreign key (queryId) references queries(id),
foreign key (collectorId) references collectors(id),
foreign key (collectorId, addedVersion) references collectorVersions(collectorId, id),
foreign key (collectorId, removedVersion) references collectorVersions(collectorId, id),
unique (collectorId, name, removedVersion)
);