Start database api work

This commit is contained in:
wqy
2022-09-03 14:04:44 +08:00
parent 45bb0483ce
commit 19b690b665
63 changed files with 606 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
-- get_title()
create function get_title() returns text as
$$
select value from title;
$$ language sql;
-- update_title()
create function update_title(new_title text) returns void as
$$
declare
old_title text;
redo text;
undo text;
begin
select get_title() into old_title;
update title set value = new_title where value = old_title;
redo := concat('update title set value = ''', new_title, ''' where value = ''', old_title, '''');
undo := concat('update title set value = ''', old_title, ''' where value = ''', new_title, '''');
insert into operation values (default, redo, undo);
end;
$$ language plpgsql;

View File

@@ -0,0 +1,25 @@
create type tj.node_type as enum ('junction', 'reservoir', 'tank');
create type tj.link_type as enum ('pipe', 'pump', 'valve');
create table tj.node
(
id varchar(32) primary key
, type tj.node_type not null
);
create table tj.link
(
id varchar(32) primary key
, type tj.link_type not null
);
create table tj.curve
(
id varchar(32) primary key
);
create table tj.pattern
(
id varchar(32) primary key
);

View File

@@ -0,0 +1,8 @@
-- [TITLE]
CREATE TABLE TITLE
(
Value TEXT
);
INSERT INTO TITLE (Value) VALUES ('');

View File

@@ -0,0 +1,29 @@
-- [STATUS]
CREATE TYPE STATUS_PIPE_PUMP_STATUS AS ENUM ('OPEN', 'CLOSED');
CREATE TABLE STATUS_PIPE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES PIPES(ID)
, Status STATUS_PIPE_PUMP_STATUS NOT NULL
);
CREATE TABLE STATUS_PUMP
(
ID VARCHAR(32) PRIMARY KEY REFERENCES PUMPS(ID)
, Status STATUS_PIPE_PUMP_STATUS NOT NULL
);
CREATE TYPE STATUS_VALVE_STATUS AS ENUM ('OPEN', 'CLOSED', 'ACTIVE');
CREATE TABLE STATUS_VALVE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES VALVES(ID)
, Status STATUS_VALVE_STATUS NOT NULL
);
CREATE TABLE STATUS_LINK
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Setting NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [PATTERNS]
CREATE TABLE PATTERNS
(
ID VARCHAR(32) REFERENCES _PATTERN(ID) NOT NULL
, Multipliers NUMERIC NOT NULL
);

View File

@@ -0,0 +1,8 @@
-- [CURVES]
CREATE TABLE CURVES
(
ID VARCHAR(32) REFERENCES _CURVE(ID) NOT NULL
, X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
);

View File

@@ -0,0 +1,30 @@
-- [CONTROLS]
CREATE TYPE CONTROLS_1_PREP AS ENUM ('ABOVE', 'BELOW');
-- LINK linkID status IF NODE nodeID ABOVE / BELOW value
CREATE TABLE CONTROLS_1
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, NodeID VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Prep CONTROLS_1_PREP NOT NULL
, Value NUMERIC NOT NULL
);
-- LINK linkID status AT TIME time
CREATE TABLE CONTROLS_2
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, Time INTERVAL HOUR
);
-- LINK linkID status AT CLOCKTIME clocktime AM / PM
CREATE TABLE CONTROLS_3
(
LinkID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Status TEXT NOT NULL -- OPEN / CLOSED, a pump speed setting, or a control valve setting
, ClockTimeHour INTERVAL HOUR -- get AM/PM from it
, ClockTimeMin INTERVAL MINUTE
);

View File

@@ -0,0 +1,6 @@
-- [RULES]
CREATE TABLE RULES
(
Content TEXT PRIMARY KEY
);

View File

@@ -0,0 +1,24 @@
-- [ENERGY]
CREATE TYPE ENERGY_PARAM AS ENUM ('PRICE', 'PATTERN', 'EFFIC');
-- GLOBAL PRICE / PATTERN / EFFIC value
CREATE TABLE ENERGY_GLOBAL
(
Param ENERGY_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
-- PUMP pumpID PRICE / PATTERN / EFFIC value
CREATE TABLE ENERGY_PUMP
(
ID VARCHAR(32) REFERENCES PUMPS(ID) NOT NULL
, Param ENERGY_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
-- DEMAND CHARGE value
CREATE TABLE ENERGY_DEMAND_CHARGE
(
Value NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [EMITTERS]
CREATE TABLE EMITTERS
(
Junction VARCHAR(32) PRIMARY KEY REFERENCES JUNCTIONS(ID)
, Coefficient NUMERIC NOT NULL
);

View File

@@ -0,0 +1,7 @@
-- [QUALITY]
CREATE TABLE QUALITY
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, InitialQual NUMERIC NOT NULL
);

View File

@@ -0,0 +1,11 @@
-- [SOURCES]
CREATE TYPE SOURCES_TYPE AS ENUM ('CONCEN', 'MASS', 'FLOWPACED', 'SETPOINT');
CREATE TABLE SOURCES
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Type SOURCES_TYPE NOT NULL
, Strength NUMERIC NOT NULL
, TimePattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,42 @@
-- [REACTIONS]
CREATE TYPE REACTIONS_ORDER_PARAM AS ENUM ('BULK', 'WALL', 'TANK');
CREATE TABLE REACTIONS_ORDER
(
Key REACTIONS_ORDER_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TYPE REACTIONS_GLOBAL_PARAM AS ENUM ('BULK', 'WALL');
CREATE TABLE REACTIONS_GLOBAL
(
Key REACTIONS_GLOBAL_PARAM NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TYPE REACTIONS_PIPE_PARAM AS ENUM ('BULK', 'WALL');
CREATE TABLE REACTIONS_PIPE
(
Key REACTIONS_PIPE_PARAM NOT NULL
, Pipe VARCHAR(32) REFERENCES PIPES(ID) NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_TANK
(
Tank VARCHAR(32) REFERENCES TANKS(ID) NOT NULL
, Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_LIMITING_POTENTIAL
(
Value NUMERIC NOT NULL
);
CREATE TABLE REACTIONS_ROUGHNESS_CORRELATION
(
Value NUMERIC NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [JUNCTIONS]
CREATE TABLE JUNCTIONS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Elevation NUMERIC NOT NULL
, Demand NUMERIC
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,10 @@
-- [MIXING]
CREATE TYPE MIXING_Model AS ENUM ('MIXED', '2COMP', 'FIFO', 'LIFO');
CREATE TABLE MIXING
(
Tank VARCHAR(32) PRIMARY KEY REFERENCES TANKS(ID)
, Model MIXING_Model NOT NULL
, Value NUMERIC
);

View File

@@ -0,0 +1,9 @@
-- [TIMES]
-- TODO: constraint
CREATE TABLE TIMES
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [REPORT]
-- TODO: constraint
CREATE TABLE REPORT
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [OPTIONS]
-- TODO: constraint
CREATE TABLE OPTIONS
(
Key TEXT NOT NULL
, Value TEXT NOT NULL
);

View File

@@ -0,0 +1,10 @@
-- [COORDINATES]
CREATE TABLE COORDINATES
(
Node VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Coord POINT NOT NULL
);
CREATE INDEX COORDINATES_SPGIST ON COORDINATES USING SPGIST(Coord);
CREATE INDEX COORDINATES_GIST ON COORDINATES USING GIST(Coord);

View File

@@ -0,0 +1,8 @@
-- [VERTICES]
CREATE TABLE VERTICES
(
Link VARCHAR(32) REFERENCES _LINK(ID) NOT NULL
, X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [LABELS]
CREATE TABLE LABELS
(
X NUMERIC NOT NULL
, Y NUMERIC NOT NULL
, Label TEXT NOT NULL
, AnchorNode VARCHAR(32) REFERENCES _NODE(ID)
);

View File

@@ -0,0 +1,6 @@
-- [BACKDROP]
CREATE TABLE BACKDROP
(
Content TEXT PRIMARY KEY
);

View File

@@ -0,0 +1 @@
-- [END]

View File

@@ -0,0 +1,8 @@
-- [RESERVOIRS]
CREATE TABLE RESERVOIRS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Head NUMERIC NOT NULL
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
);

View File

@@ -0,0 +1,16 @@
-- [TANKS]
CREATE TYPE TANKS_OVERFLOW AS ENUM ('YES', 'NO');
CREATE TABLE TANKS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Elevation NUMERIC NOT NULL
, InitLevel NUMERIC NOT NULL
, MinLevel NUMERIC NOT NULL
, MaxLevel NUMERIC NOT NULL
, Diameter NUMERIC NOT NULL
, MinVol NUMERIC NOT NULL
, VolCurve VARCHAR(32) REFERENCES _CURVE(ID)
, Overflow TANKS_OVERFLOW
);

View File

@@ -0,0 +1,15 @@
-- [PIPES]
CREATE TYPE PIPES_STATUS AS ENUM ('OPEN', 'CLOSED', 'CV');
CREATE TABLE PIPES
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Length NUMERIC NOT NULL
, Diameter NUMERIC NOT NULL
, Roughness NUMERIC NOT NULL
, MinorLoss NUMERIC NOT NULL
, Status PIPES_STATUS NOT NULL
);

View File

@@ -0,0 +1,32 @@
-- [PUMPS]
CREATE TABLE PUMPS
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_POWER
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Value VARCHAR(32) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_SPEED
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Value VARCHAR(32) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_HEAD
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Head VARCHAR(32) REFERENCES _CURVE(ID) NOT NULL
);
CREATE TABLE PUMPS_PROPERTY_PATTERN
(
ID VARCHAR PRIMARY KEY REFERENCES PUMPS(ID)
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID) NOT NULL
);

View File

@@ -0,0 +1,14 @@
-- [VALVES]
CREATE TYPE VALVES_TYPE AS ENUM ('PRV', 'PSV', 'PBV', 'FCV', 'TCV', 'GPV');
CREATE TABLE VALVES
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Node1 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Node2 VARCHAR(32) REFERENCES _NODE(ID) NOT NULL
, Diameter NUMERIC NOT NULL
, Type VALVES_TYPE NOT NULL
, Setting NUMERIC NOT NULL
, MinorLoss NUMERIC NOT NULL
);

View File

@@ -0,0 +1,13 @@
-- [TAGS]
CREATE TABLE TAGS_NODE
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _NODE(ID)
, Tag TEXT NOT NULL
);
CREATE TABLE TAGS_LINK
(
ID VARCHAR(32) PRIMARY KEY REFERENCES _LINK(ID)
, Tag TEXT NOT NULL
);

View File

@@ -0,0 +1,9 @@
-- [DEMANDS]
CREATE TABLE DEMANDS
(
Junction VARCHAR(32) REFERENCES JUNCTIONS(ID) NOT NULL
, Demand NUMERIC NOT NULL
, Pattern VARCHAR(32) REFERENCES _PATTERN(ID)
, Category TEXT NOT NULL
);

View File

@@ -0,0 +1 @@
create schema tj;

View File

@@ -0,0 +1,29 @@
CREATE TABLE OPERATION
(
ID SERIAL PRIMARY KEY
, Redo TEXT NOT NULL
, Undo TEXT NOT NULL
, Parent INTEGER REFERENCES OPERATION(ID)
, Redo_Child INTEGER REFERENCES OPERATION(ID)
);
INSERT INTO OPERATION (ID, Redo, Undo) VALUES (0, '', '');
CREATE TABLE CURRENT_OPERATION
(
ID INTEGER PRIMARY KEY REFERENCES OPERATION(ID)
);
INSERT INTO CURRENT_OPERATION (ID) VALUES (0);
CREATE TABLE SNAPSHOT_OPERATION
(
ID INTEGER PRIMARY KEY REFERENCES OPERATION(ID)
, Tag TEXT NOT NULL UNIQUE
);
CREATE TABLE TRANSACTION_OPERATION
(
ID INTEGER PRIMARY KEY REFERENCES OPERATION(ID)
, STRICT BOOLEAN NOT NULL DEFAULT FALSE
);

View File

@@ -0,0 +1,11 @@
DROP TABLE IF EXISTS _PATTERN;
DROP TABLE IF EXISTS _CURVE;
DROP TABLE IF EXISTS _LINK;
DROP TABLE IF EXISTS _NODE;
DROP TYPE IF EXISTS _LINK_TYPE;
DROP TYPE IF EXISTS _NODE_TYPE;

View File

@@ -0,0 +1,3 @@
-- [TITLE]
DROP TABLE IF EXISTS TITLE;

View File

@@ -0,0 +1,13 @@
-- [STATUS]
DROP TABLE IF EXISTS STATUS_LINK;
DROP TABLE IF EXISTS STATUS_VALVE;
DROP TYPE IF EXISTS STATUS_VALVE_STATUS;
DROP TABLE IF EXISTS STATUS_PUMP;
DROP TABLE IF EXISTS STATUS_PIPE;
DROP TYPE IF EXISTS STATUS_PIPE_PUMP_STATUS;

View File

@@ -0,0 +1,3 @@
-- [PATTERNS]
DROP TABLE IF EXISTS PATTERNS;

View File

@@ -0,0 +1,3 @@
-- [CURVES]
DROP TABLE IF EXISTS CURVES;

View File

@@ -0,0 +1,9 @@
-- [CONTROLS]
DROP TABLE IF EXISTS CONTROLS_3;
DROP TABLE IF EXISTS CONTROLS_2;
DROP TABLE IF EXISTS CONTROLS_1;
DROP TYPE IF EXISTS CONTROLS_1_PREP;

View File

@@ -0,0 +1,3 @@
-- [RULES]
DROP TABLE IF EXISTS RULES;

View File

@@ -0,0 +1,9 @@
-- [ENERGY]
DROP TABLE IF EXISTS ENERGY_DEMAND_CHARGE;
DROP TABLE IF EXISTS ENERGY_PUMP;
DROP TABLE IF EXISTS ENERGY_GLOBAL;
DROP TYPE IF EXISTS ENERGY_PARAM;

View File

@@ -0,0 +1,3 @@
-- [EMITTERS]
DROP TABLE IF EXISTS EMITTERS;

View File

@@ -0,0 +1,3 @@
-- [QUALITY]
DROP TABLE IF EXISTS QUALITY;

View File

@@ -0,0 +1,5 @@
-- [SOURCES]
DROP TABLE IF EXISTS SOURCES;
DROP TYPE IF EXISTS SOURCES_TYPE;

View File

@@ -0,0 +1,19 @@
-- [REACTIONS]
DROP TABLE IF EXISTS REACTIONS_ROUGHNESS_CORRELATION;
DROP TABLE IF EXISTS REACTIONS_LIMITING_POTENTIAL;
DROP TABLE IF EXISTS REACTIONS_TANK;
DROP TABLE IF EXISTS REACTIONS_PIPE;
DROP TYPE IF EXISTS REACTIONS_PIPE_PARAM;
DROP TABLE IF EXISTS REACTIONS_GLOBAL;
DROP TYPE IF EXISTS REACTIONS_GLOBAL_PARAM;
DROP TABLE IF EXISTS REACTIONS_ORDER;
DROP TYPE IF EXISTS REACTIONS_ORDER_PARAM;

View File

@@ -0,0 +1,3 @@
-- [JUNCTIONS]
DROP TABLE IF EXISTS JUNCTIONS;

View File

@@ -0,0 +1,5 @@
-- [MIXING]
DROP TABLE IF EXISTS MIXING;
DROP TYPE IF EXISTS MIXING_Model;

View File

@@ -0,0 +1,3 @@
-- [TIMES]
DROP TABLE IF EXISTS TIMES;

View File

@@ -0,0 +1,3 @@
-- [REPORT]
DROP TABLE IF EXISTS REPORT;

View File

@@ -0,0 +1,3 @@
-- [OPTIONS]
DROP TABLE IF EXISTS OPTIONS;

View File

@@ -0,0 +1,7 @@
-- [COORDINATES]
DROP INDEX IF EXISTS COORDINATES_GIST;
DROP INDEX IF EXISTS COORDINATES_SPGIST;
DROP TABLE IF EXISTS COORDINATES;

View File

@@ -0,0 +1,3 @@
-- [VERTICES]
DROP TABLE IF EXISTS VERTICES;

View File

@@ -0,0 +1,3 @@
-- [LABELS]
DROP TABLE IF EXISTS LABELS;

View File

@@ -0,0 +1,3 @@
-- [BACKDROP]
DROP TABLE IF EXISTS BACKDROP;

View File

@@ -0,0 +1 @@
-- [END]

View File

@@ -0,0 +1,3 @@
-- [RESERVOIRS]
DROP TABLE IF EXISTS RESERVOIRS;

View File

@@ -0,0 +1,5 @@
-- [TANKS]
DROP TABLE IF EXISTS TANKS;
DROP TYPE IF EXISTS TANKS_OVERFLOW;

View File

@@ -0,0 +1,5 @@
-- [PIPES]
DROP TABLE IF EXISTS PIPES;
DROP TYPE IF EXISTS PIPES_STATUS;

View File

@@ -0,0 +1,11 @@
-- [PUMPS]
DROP TABLE IF EXISTS PUMPS_PROPERTY_PATTERN;
DROP TABLE IF EXISTS PUMPS_PROPERTY_HEAD;
DROP TABLE IF EXISTS PUMPS_PROPERTY_SPEED;
DROP TABLE IF EXISTS PUMPS_PROPERTY_POWER;
DROP TABLE IF EXISTS PUMPS;

View File

@@ -0,0 +1,5 @@
-- [VALVES]
DROP TABLE IF EXISTS VALVES;
DROP TYPE IF EXISTS VALVES_TYPE;

View File

@@ -0,0 +1,5 @@
-- [TAGS]
DROP TABLE IF EXISTS TAGS_LINK;
DROP TABLE IF EXISTS TAGS_NODE;

View File

@@ -0,0 +1,3 @@
-- [DEMANDS]
DROP TABLE IF EXISTS DEMANDS;

View File

@@ -0,0 +1 @@
drop schema if exists tj;

View File

@@ -0,0 +1,7 @@
DROP TABLE IF EXISTS TRANSACTION_OPERATION;
DROP TABLE IF EXISTS SNAPSHOT_OPERATION;
DROP TABLE IF EXISTS CURRENT_OPERATION;
DROP TABLE IF EXISTS OPERATION;