From bde7ba29711796579d9575ab0024335600e3a7dc Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Wed, 24 May 2023 14:26:09 +0200 Subject: [PATCH] Change delivery_part triggers to raise exception on invalid kgnr/hkid combination --- sql/v01/10.create.sql | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/sql/v01/10.create.sql b/sql/v01/10.create.sql index 4265a96..e9bac4b 100644 --- a/sql/v01/10.create.sql +++ b/sql/v01/10.create.sql @@ -526,29 +526,35 @@ CREATE TABLE delivery_part ( ) STRICT; CREATE TRIGGER t_delivery_part_i - AFTER INSERT ON delivery_part FOR EACH ROW + BEFORE INSERT ON delivery_part FOR EACH ROW WHEN NEW.kgnr IS NOT NULL BEGIN - UPDATE delivery_part SET hkid = ( - SELECT hkid - FROM wb_kg wk + SELECT RAISE(ABORT, 'Invalid kgnr and hkid combination') + WHERE 0 = ( + SELECT COUNT(*) FROM wb_kg wk JOIN AT_kg k ON wk.kgnr = k.kgnr JOIN wb_gem wg ON wg.gkz = k.gkz - WHERE wk.kgnr = NEW.kgnr - ) WHERE (year, did, dpnr) = (NEW.year, NEW.did, NEW.dpnr); + LEFT JOIN wine_origin wo1 ON wg.hkid = wo1.hkid + LEFT JOIN wine_origin wo2 ON wo1.parent_hkid = wo2.hkid + LEFT JOIN wine_origin wo3 ON wo2.parent_hkid = wo3.hkid + LEFT JOIN wine_origin wo4 ON wo3.parent_hkid = wo4.hkid + WHERE wk.kgnr = NEW.kgnr AND NEW.hkid IN (wo1.hkid, wo2.hkid, wo3.hkid, wo4.hkid)); END; CREATE TRIGGER t_delivery_part_u - AFTER UPDATE OF kgnr ON delivery_part FOR EACH ROW + BEFORE UPDATE ON delivery_part FOR EACH ROW WHEN NEW.kgnr IS NOT NULL BEGIN - UPDATE delivery_part SET hkid = ( - SELECT hkid - FROM wb_kg wk + SELECT RAISE(ABORT, 'Invalid kgnr and hkid combination') + WHERE 0 = ( + SELECT COUNT(*) FROM wb_kg wk JOIN AT_kg k ON wk.kgnr = k.kgnr JOIN wb_gem wg ON wg.gkz = k.gkz - WHERE wk.kgnr = NEW.kgnr - ) WHERE (year, did, dpnr) = (NEW.year, NEW.did, NEW.dpnr); + LEFT JOIN wine_origin wo1 ON wg.hkid = wo1.hkid + LEFT JOIN wine_origin wo2 ON wo1.parent_hkid = wo2.hkid + LEFT JOIN wine_origin wo3 ON wo2.parent_hkid = wo3.hkid + LEFT JOIN wine_origin wo4 ON wo3.parent_hkid = wo4.hkid + WHERE wk.kgnr = NEW.kgnr AND NEW.hkid IN (wo1.hkid, wo2.hkid, wo3.hkid, wo4.hkid)); END; CREATE TABLE delivery_part_attribute (