Skip to content

Commit eb9f052

Browse files
committed
Merge branch 'develop'
2 parents 36b9b22 + bb4b643 commit eb9f052

File tree

6 files changed

+232
-95
lines changed

6 files changed

+232
-95
lines changed

Database/PostgreSQL/pg-build-schema.psql

Lines changed: 97 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -258,17 +258,19 @@ CREATE TABLE date_company_assignment (
258258

259259
CREATE TABLE project (
260260
project_id INT NOT NULL,
261-
object_version INT,
261+
object_version INT NOT NULL,
262262
owner_id INT NOT NULL,
263263
team_id INT,
264-
number VARCHAR(100),
265-
name VARCHAR(255),
264+
number VARCHAR(100) NOT NULL,
265+
name VARCHAR(255) NOT NULL,
266266
start_date TIMESTAMP WITH TIME ZONE,
267267
end_date TIMESTAMP WITH TIME ZONE,
268+
-- 00_sleeping, 05_processing, 10_out_of_date, 30_archived
268269
status VARCHAR(255),
269270
is_fake SMALLINT, -- whether this is the doc store for a company
270-
db_status VARCHAR(50),
271+
db_status VARCHAR(50) NOT NULL,
271272
kind VARCHAR(50),
273+
-- this is the document storage URL, either skyrix:// for DB or empty/file://
272274
url VARCHAR(100),
273275
parent_project_id INT,
274276
CONSTRAINT pk_project PRIMARY KEY (project_id),
@@ -476,14 +478,14 @@ CREATE TABLE job (
476478
);
477479

478480
CREATE TABLE job_history (
479-
job_history_id INT NOT NULL,
480-
object_version INT NOT NULL,
481-
job_id INT NOT NULL,
482-
actor_id INT,
483-
action VARCHAR(50),
484-
action_date TIMESTAMP WITH TIME ZONE,
485-
job_status VARCHAR(50),
486-
db_status VARCHAR(50),
481+
job_history_id INT NOT NULL,
482+
object_version INT NOT NULL,
483+
job_id INT NOT NULL,
484+
actor_id INT NOT NULL,
485+
action VARCHAR(50) NOT NULL,
486+
action_date TIMESTAMP WITH TIME ZONE NOT NULL,
487+
job_status VARCHAR(50) NOT NULL,
488+
db_status VARCHAR(50) NOT NULL,
487489
CONSTRAINT pk_job_history PRIMARY KEY (job_history_id)
488490
);
489491

@@ -783,8 +785,12 @@ CREATE RULE employment_add AS ON INSERT TO employment DO INSTEAD
783785
new.company_assignment_id, new.enterprise_id, new.person_id,
784786
new.is_headquarter, new.is_chief, new."function", new.db_status,
785787
new.start_date, new.end_date
786-
);
787-
788+
)
789+
RETURNING
790+
company_assignment_id, company_id, sub_company_id,
791+
is_headquarter, is_chief, "function", db_status,
792+
start_date, end_date
793+
;
788794
CREATE RULE employment_set AS ON UPDATE TO employment DO INSTEAD
789795
UPDATE company_assignment
790796
SET company_id = new.enterprise_id,
@@ -825,7 +831,12 @@ CREATE RULE company_hierarchy_add AS ON INSERT TO company_hierarchy DO INSTEAD
825831
new.company_assignment_id, new.parent_id, new.company_id,
826832
new.is_headquarter, new.is_chief, new."function", new.db_status,
827833
new.start_date, new.end_date
828-
);
834+
)
835+
RETURNING
836+
company_assignment_id, company_id, sub_company_id,
837+
is_headquarter, is_chief, "function", db_status,
838+
start_date, end_date
839+
;
829840

830841
CREATE RULE company_hierarchy_set AS ON UPDATE TO company_hierarchy DO INSTEAD
831842
UPDATE company_assignment
@@ -868,7 +879,12 @@ CREATE RULE person_relationship_add AS
868879
new.company_assignment_id, new.person_id, new.related_person_id,
869880
new.relationship, new.db_status,
870881
new.start_date, new.end_date
871-
);
882+
)
883+
RETURNING
884+
company_assignment_id, company_id, sub_company_id,
885+
"function", db_status,
886+
start_date, end_date
887+
;
872888

873889
CREATE RULE person_relationship_set AS
874890
ON UPDATE TO person_relationship DO INSTEAD
@@ -899,6 +915,46 @@ CREATE VIEW team_membership AS
899915
FROM company_assignment ca
900916
INNER JOIN team t USING (company_id)
901917
INNER JOIN person p ON (p.company_id = ca.sub_company_id);
918+
CREATE OR REPLACE FUNCTION insert_team_membership() RETURNS trigger AS $$
919+
DECLARE
920+
_team_exists BOOLEAN;
921+
_person_exists BOOLEAN;
922+
BEGIN
923+
SELECT EXISTS ( SELECT 1 FROM team WHERE company_id = NEW.team_id )
924+
INTO _team_exists;
925+
IF NOT _team_exists THEN
926+
RAISE EXCEPTION 'Team with id % does not exist', NEW.team_id;
927+
END IF;
928+
SELECT EXISTS ( SELECT 1 FROM person WHERE company_id = NEW.person_id )
929+
INTO _person_exists;
930+
IF NOT _person_exists THEN
931+
RAISE EXCEPTION 'Person with id % does not exist', NEW.person_id;
932+
END IF;
933+
INSERT INTO company_assignment (
934+
company_assignment_id, company_id, sub_company_id, is_headquarter,
935+
is_chief, "function", db_status, start_date, end_date
936+
)
937+
VALUES (
938+
NEW.company_assignment_id, NEW.team_id, NEW.person_id, NEW.is_headquarter,
939+
NEW.is_chief, NEW."function", NEW.db_status, NEW.start_date, NEW.end_date
940+
);
941+
RETURN NEW;
942+
END;
943+
$$ LANGUAGE plpgsql;
944+
CREATE OR REPLACE FUNCTION delete_team_membership() RETURNS trigger AS $$
945+
BEGIN
946+
DELETE FROM company_assignment
947+
WHERE company_assignment_id = OLD.company_assignment_id;
948+
RETURN OLD;
949+
END;
950+
$$ LANGUAGE plpgsql;
951+
952+
CREATE TRIGGER trigger_insert_team_membership
953+
INSTEAD OF INSERT ON team_membership
954+
FOR EACH ROW EXECUTE FUNCTION insert_team_membership();
955+
CREATE TRIGGER trigger_delete_team_membership
956+
INSTEAD OF DELETE ON team_membership
957+
FOR EACH ROW EXECUTE FUNCTION delete_team_membership();
902958

903959
CREATE VIEW team_hierarchy AS
904960
SELECT
@@ -921,21 +977,24 @@ CREATE VIEW project_teams AS
921977
CREATE RULE project_teams_add AS ON INSERT TO project_teams DO INSTEAD
922978
INSERT INTO project_company_assignment (
923979
project_company_assignment_id, company_id, project_id, info,
924-
has_access, access_right, db_status,
925-
start_date, end_date
980+
has_access, access_right, db_status, start_date, end_date
926981
)
927982
VALUES (
928-
new.project_company_assignment_id, new.company_id, new.project_id, new.info,
929-
new.has_access, new.access_right, new.db_status, new.start_date, new.end_date
930-
);
983+
NEW.project_company_assignment_id, NEW.company_id, NEW.project_id, NEW.info,
984+
NEW.has_access, NEW.access_right, NEW.db_status,
985+
NEW.start_date, NEW.end_date
986+
)
987+
RETURNING
988+
project_company_assignment_id, company_id, project_id, info,
989+
has_access, access_right, db_status, start_date, end_date
990+
;
931991
CREATE RULE project_teams_set AS ON UPDATE TO project_teams DO INSTEAD
932992
UPDATE project_company_assignment
933-
SET company_id = new.company_id, project_id = new.project_id, info = new.info,
934-
has_access = new.has_access, access_right = new.access_right,
935-
db_status = new.db_status,
936-
start_date = new.start_date, end_date = new.end_date
993+
SET company_id = NEW.company_id, project_id = NEW.project_id, info = NEW.info,
994+
has_access = NEW.has_access, access_right = NEW.access_right,
995+
db_status = NEW.db_status,
996+
start_date = NEW.start_date, end_date = NEW.end_date
937997
WHERE project_company_assignment_id = old.project_company_assignment_id;
938-
939998
CREATE RULE project_teams_del AS ON DELETE TO project_teams DO INSTEAD
940999
DELETE FROM project_company_assignment
9411000
WHERE project_company_assignment_id = old.project_company_assignment_id;
@@ -955,7 +1014,11 @@ CREATE RULE project_persons_add AS ON INSERT TO project_persons DO INSTEAD
9551014
new.project_company_assignment_id, new.company_id, new.project_id, new.info,
9561015
new.has_access, new.access_right, new.db_status,
9571016
new.start_date, new.end_date
958-
);
1017+
)
1018+
RETURNING
1019+
project_company_assignment_id, company_id, project_id, info, has_access,
1020+
access_right, db_status, start_date, end_date
1021+
;
9591022
CREATE RULE project_persons_set AS ON UPDATE TO project_persons DO INSTEAD
9601023
UPDATE project_company_assignment
9611024
SET company_id = new.company_id, project_id = new.project_id, info = new.info,
@@ -983,7 +1046,11 @@ CREATE RULE project_companies_add AS ON INSERT TO project_companies DO INSTEAD
9831046
new.project_company_assignment_id, new.company_id, new.project_id, new.info,
9841047
new.has_access, new.access_right, new.db_status,
9851048
new.start_date, new.end_date
986-
);
1049+
)
1050+
RETURNING
1051+
project_company_assignment_id, company_id, project_id, info, has_access,
1052+
access_right, db_status, start_date, end_date
1053+
;
9871054
CREATE RULE project_companies_set AS ON UPDATE TO project_companies DO INSTEAD
9881055
UPDATE project_company_assignment
9891056
SET company_id = new.company_id, project_id = new.project_id, info = new.info,
@@ -1455,7 +1522,7 @@ INSERT INTO table_version (table_name, table_version)
14551522
VALUES ('date_company_assignment', 55);
14561523

14571524
INSERT INTO table_version (table_name, table_version)
1458-
VALUES ('project', 54);
1525+
VALUES ('project', 56);
14591526
INSERT INTO table_version (table_name, table_version)
14601527
VALUES ('project_info', 56);
14611528
INSERT INTO table_version (table_name, table_version)
@@ -1475,7 +1542,7 @@ INSERT INTO table_version (table_name, table_version)
14751542
INSERT INTO table_version (table_name, table_version)
14761543
VALUES ('job', 55);
14771544
INSERT INTO table_version (table_name, table_version)
1478-
VALUES ('job_history', 56);
1545+
VALUES ('job_history', 57);
14791546
INSERT INTO table_version (table_name, table_version)
14801547
VALUES ('job_history_info', 42);
14811548

0 commit comments

Comments
 (0)