53ea7d34e6
Start adding Textract + UUID changes * base * startclient * ts * short * tests
79 lines
2.3 KiB
PL/PgSQL
79 lines
2.3 KiB
PL/PgSQL
CREATE TYPE queryType AS ENUM ('context_full', 'json_extractor');
|
|
|
|
CREATE TABLE queries (
|
|
id uuid primary key DEFAULT uuid_generate_v7(),
|
|
type queryType not null
|
|
);
|
|
|
|
CREATE TABLE queryVersions (
|
|
queryId uuid not null,
|
|
id int not null,
|
|
addedAt timestamp not null default current_timestamp,
|
|
primary key (id, queryId),
|
|
foreign key (queryId) references queries(id)
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION setQueryVersionNumber()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
SELECT COALESCE(MAX(id), 0) + 1
|
|
INTO NEW.id
|
|
FROM queryVersions
|
|
WHERE queryId = NEW.queryId;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER setQueryVersionNumberTrigger
|
|
BEFORE INSERT ON queryVersions
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION setQueryVersionNumber();
|
|
|
|
CREATE TABLE queryActiveVersions (
|
|
id uuid primary key DEFAULT uuid_generate_v7(),
|
|
queryId uuid not null,
|
|
versionId int not null,
|
|
foreign key (queryId, versionId) references queryVersions(queryId, id)
|
|
);
|
|
|
|
CREATE TABLE requiredQueries (
|
|
id uuid primary key DEFAULT uuid_generate_v7(),
|
|
queryId uuid not null,
|
|
requiredQueryId uuid not null,
|
|
addedVersion int not null,
|
|
removedVersion int,
|
|
foreign key (queryId) references queries(id),
|
|
foreign key (requiredQueryId) references queries(id),
|
|
foreign key (queryId, addedVersion) references queryVersions(queryId, id),
|
|
foreign key (queryId, removedVersion) references queryVersions(queryId, id),
|
|
unique (queryId, requiredQueryId, removedVersion)
|
|
);
|
|
|
|
CREATE TABLE queryConfigs (
|
|
id uuid primary key DEFAULT uuid_generate_v7(),
|
|
queryId uuid not null,
|
|
config jsonb not null,
|
|
addedVersion int not null,
|
|
removedVersion int,
|
|
foreign key (queryId) references queries(id),
|
|
foreign key (queryId, addedVersion) references queryVersions(queryId, id),
|
|
foreign key (queryId, removedVersion) references queryVersions(queryId, id),
|
|
unique (queryId, removedVersion)
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION removeQueryConfig()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
UPDATE queryConfigs
|
|
SET removedVersion = NEW.addedVersion
|
|
WHERE queryId = NEW.queryId and removedVersion is null;
|
|
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER removeQueryConfigTrigger
|
|
BEFORE INSERT ON queryConfigs
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION removeQueryConfig(); |