diff --git a/sql/v01/11.create.client.sql b/sql/v01/11.create.client.sql index e35a6ec..39a0758 100644 --- a/sql/v01/11.create.client.sql +++ b/sql/v01/11.create.client.sql @@ -174,28 +174,49 @@ CREATE TABLE member_email_address ( ON DELETE CASCADE ) STRICT; -CREATE TABLE area_commitment ( +CREATE TABLE area_commitment_contract ( fbnr INTEGER NOT NULL, - mgnr INTEGER NOT NULL, - - vtrgid TEXT NOT NULL, - cultid TEXT DEFAULT NULL, - area INTEGER NOT NULL, kgnr INTEGER NOT NULL, - gstnr TEXT NOT NULL, rdnr INTEGER, - year_from INTEGER CHECK (year_from >= 1000 AND year_from <= 9999) DEFAULT NULL, - year_to INTEGER CHECK (year_to >= 1000 AND year_to <= 9999) DEFAULT NULL, - comment TEXT DEFAULT NULL, ctime INTEGER NOT NULL DEFAULT (UNIXEPOCH()), mtime INTEGER NOT NULL DEFAULT (UNIXEPOCH()), xtime INTEGER DEFAULT NULL, itime INTEGER DEFAULT NULL, - CONSTRAINT pk_area_commitment PRIMARY KEY (fbnr), + CONSTRAINT area_commitment_contract PRIMARY KEY (fbnr), + CONSTRAINT fk_area_commitment_contract_wb_kg FOREIGN KEY (kgnr) REFERENCES wb_kg (kgnr) + ON UPDATE CASCADE + ON DELETE RESTRICT, + CONSTRAINT fk_area_commitment_contract_wb_rd FOREIGN KEY (kgnr, rdnr) REFERENCES wb_rd (kgnr, rdnr) + ON UPDATE CASCADE + ON DELETE RESTRICT +) STRICT; + +CREATE TABLE area_commitment ( + fbnr INTEGER NOT NULL, + revnr INTEGER NOT NULL, + mgnr INTEGER NOT NULL, + + vtrgid TEXT NOT NULL, + cultid TEXT DEFAULT NULL, + area INTEGER NOT NULL, + gstnr TEXT NOT NULL, + + year_from INTEGER CHECK (year_from >= 1000 AND year_from <= 9999) DEFAULT NULL, + year_to INTEGER CHECK (year_to >= 1000 AND year_to <= 9999) DEFAULT NULL, + + ctime INTEGER NOT NULL DEFAULT (UNIXEPOCH()), + mtime INTEGER NOT NULL DEFAULT (UNIXEPOCH()), + xtime INTEGER DEFAULT NULL, + itime INTEGER DEFAULT NULL, + + CONSTRAINT pk_area_commitment PRIMARY KEY (fbnr, revnr), + CONSTRAINT fk_area_commitment_area_commitment_contract FOREIGN KEY (fbnr) REFERENCES area_commitment_contract (fbnr) + ON UPDATE CASCADE + ON DELETE CASCADE, CONSTRAINT fk_area_commitment_member FOREIGN KEY (mgnr) REFERENCES member (mgnr) ON UPDATE CASCADE ON DELETE RESTRICT, @@ -203,12 +224,6 @@ CREATE TABLE area_commitment ( ON UPDATE CASCADE ON DELETE RESTRICT, CONSTRAINT fk_area_commitment_wine_cultivation FOREIGN KEY (cultid) REFERENCES wine_cultivation (cultid) - ON UPDATE CASCADE - ON DELETE RESTRICT, - CONSTRAINT fk_area_commitment_wb_kg FOREIGN KEY (kgnr) REFERENCES wb_kg (kgnr) - ON UPDATE CASCADE - ON DELETE RESTRICT, - CONSTRAINT fk_area_commitment_wb_rd FOREIGN KEY (kgnr, rdnr) REFERENCES wb_rd (kgnr, rdnr) ON UPDATE CASCADE ON DELETE RESTRICT ) STRICT; diff --git a/sql/v01/20.create.timestamp-trigger.sql b/sql/v01/20.create.timestamp-trigger.sql index b0b1072..3c20d6f 100644 --- a/sql/v01/20.create.timestamp-trigger.sql +++ b/sql/v01/20.create.timestamp-trigger.sql @@ -79,11 +79,41 @@ END; ---------------------------------------------------------------- +CREATE TRIGGER t_area_commitment_contract_i_ctime + AFTER INSERT ON area_commitment_contract FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND NEW.ctime != UNIXEPOCH() +BEGIN + UPDATE area_commitment_contract SET ctime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; +END; + +CREATE TRIGGER t_area_commitment_contract_u_ctime + BEFORE UPDATE ON area_commitment_contract FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND OLD.ctime != NEW.ctime +BEGIN + SELECT RAISE(ABORT, 'It is not allowed to change ctime'); +END; + +CREATE TRIGGER t_area_commitment_contract_i_mtime + AFTER INSERT ON area_commitment_contract FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND NEW.mtime != UNIXEPOCH() +BEGIN + UPDATE area_commitment_contract SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; +END; + +CREATE TRIGGER t_area_commitment_contract_u_mtime + AFTER UPDATE ON area_commitment_contract FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND NEW.mtime != UNIXEPOCH() +BEGIN + UPDATE area_commitment_contract SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; +END; + +---------------------------------------------------------------- + CREATE TRIGGER t_area_commitment_i_ctime AFTER INSERT ON area_commitment FOR EACH ROW WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND NEW.ctime != UNIXEPOCH() BEGIN - UPDATE area_commitment SET ctime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; + UPDATE area_commitment SET ctime = UNIXEPOCH() WHERE (fbnr, revnr) = (NEW.fbnr, NEW.revnr); END; CREATE TRIGGER t_area_commitment_u_ctime @@ -97,14 +127,56 @@ CREATE TRIGGER t_area_commitment_i_mtime AFTER INSERT ON area_commitment FOR EACH ROW WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND NEW.mtime != UNIXEPOCH() BEGIN - UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; + UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE (fbnr, revnr) = (NEW.fbnr, NEW.revnr); END; CREATE TRIGGER t_area_commitment_u_mtime AFTER UPDATE ON area_commitment FOR EACH ROW WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 AND NEW.mtime != UNIXEPOCH() BEGIN - UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; + UPDATE area_commitment SET mtime = UNIXEPOCH() WHERE (fbnr, revnr) = (NEW.fbnr, NEW.revnr); +END; + +CREATE TRIGGER t_area_commitment_i_mtime_contract + AFTER INSERT ON area_commitment FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 +BEGIN + UPDATE area_commitment_contract SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr; +END; + +CREATE TRIGGER t_area_commitment_u_mtime_contract + AFTER UPDATE ON area_commitment FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 +BEGIN + UPDATE area_commitment_contract SET mtime = UNIXEPOCH() WHERE fbnr = NEW.fbnr OR fbnr = OLD.fbnr; +END; + +CREATE TRIGGER t_area_commitment_d_mtime_contract + AFTER DELETE ON area_commitment FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 +BEGIN + UPDATE area_commitment_contract SET mtime = UNIXEPOCH() WHERE fbnr = OLD.fbnr; +END; + +CREATE TRIGGER t_area_commitment_i_mtime_member + AFTER INSERT ON area_commitment FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 +BEGIN + UPDATE member SET mtime = UNIXEPOCH() WHERE mgnr = NEW.mgnr; +END; + +CREATE TRIGGER t_area_commitment_u_mtime_member + AFTER UPDATE ON area_commitment FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 +BEGIN + UPDATE member SET mtime = UNIXEPOCH() WHERE mgnr = NEW.mgnr OR mgnr = OLD.mgnr; +END; + +CREATE TRIGGER t_area_commitment_d_mtime_member + AFTER DELETE ON area_commitment FOR EACH ROW + WHEN (SELECT value FROM client_parameter WHERE param = 'ENABLE_TIME_TRIGGERS') = 1 +BEGIN + UPDATE member SET mtime = UNIXEPOCH() WHERE mgnr = OLD.mgnr; END; ---------------------------------------------------------------- diff --git a/sql/v01/99.schema_version.sql b/sql/v01/99.schema_version.sql index cd437ab..444196e 100644 --- a/sql/v01/99.schema_version.sql +++ b/sql/v01/99.schema_version.sql @@ -1,3 +1,3 @@ -- This value MUST NOT be changed while other connections are open! -PRAGMA schema_version = 3600; +PRAGMA schema_version = 3800;