From 34cb7666ae4a9527c7cfc33726afb44062f9c2a2 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Mon, 13 Feb 2023 19:19:57 +0100 Subject: [PATCH] Fix sql REGEXP check constraints --- sql/v01/01.create.sql | 56 +++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/sql/v01/01.create.sql b/sql/v01/01.create.sql index 9f58359..54f1744 100644 --- a/sql/v01/01.create.sql +++ b/sql/v01/01.create.sql @@ -6,8 +6,8 @@ CREATE TABLE meta ( ); CREATE TABLE country ( - alpha2 TEXT NOT NULL CHECK (alpha2 REGEXP '[A-Z]{2}'), - alpha3 TEXT NOT NULL CHECK (alpha3 REGEXP '[A-Z]{3}'), + alpha2 TEXT NOT NULL CHECK (alpha2 REGEXP '^[A-Z]{2}$'), + alpha3 TEXT NOT NULL CHECK (alpha3 REGEXP '^[A-Z]{3}$'), num INTEGER NOT NULL CHECK (num >= 0), name TEXT NOT NULL, @@ -20,7 +20,7 @@ CREATE TABLE country ( ) STRICT; CREATE TABLE currency ( - code TEXT NOT NULL CHECK (code REGEXP '[A-Z]{3}'), + code TEXT NOT NULL CHECK (code REGEXP '^[A-Z]{3}$'), name TEXT NOT NULL, symbol TEXT, @@ -127,7 +127,7 @@ BEGIN END; CREATE TABLE wine_variety ( - sortid TEXT NOT NULL CHECK (sortid REGEXP '[A-Z]{2}'), + sortid TEXT NOT NULL CHECK (sortid REGEXP '^[A-Z]{2}$'), type TEXT NOT NULL CHECK (type IN ('R', 'W')), name TEXT NOT NULL, comment TEXT, @@ -136,7 +136,7 @@ CREATE TABLE wine_variety ( ) STRICT; CREATE TABLE wine_quality ( - qualid TEXT NOT NULL CHECK (qualid REGEXP '[A-Z]{3}'), + qualid TEXT NOT NULL CHECK (qualid REGEXP '^[A-Z]{3}$'), origin_level INTEGER NOT NULL, name TEXT NOT NULL, @@ -147,7 +147,7 @@ CREATE TABLE wine_quality ( ) STRICT; CREATE TABLE wine_origin ( - hkid TEXT NOT NULL CHECK (hkid REGEXP '[A-Z]{4}'), + hkid TEXT NOT NULL CHECK (hkid REGEXP '^[A-Z]{4}$'), parent_hkid TEXT, name TEXT NOT NULL, @@ -217,14 +217,14 @@ CREATE TABLE wb_rd ( CREATE TABLE branch ( - zwstid TEXT NOT NULL CHECK (zwstid REGEXP '[A-Z]'), + zwstid TEXT NOT NULL CHECK (zwstid REGEXP '^[A-Z]$'), name TEXT NOT NULL, CONSTRAINT pk_branch PRIMARY KEY (zwstid) ); CREATE TABLE wine_attribute ( - attrid TEXT NOT NULL CHECK (attrid REGEXP '[A-Z]+'), + attrid TEXT NOT NULL CHECK (attrid REGEXP '^[A-Z]+$'), name TEXT NOT NULL, kg_per_ha INTEGER NOT NULL DEFAULT 10000, @@ -233,7 +233,7 @@ CREATE TABLE wine_attribute ( ) STRICT; CREATE TABLE wine_cultivation ( - cultid TEXT NOT NULL CHECK (cultid REGEXP '[A-Z]+'), + cultid TEXT NOT NULL CHECK (cultid REGEXP '^[A-Z]+$'), name TEXT NOT NULL, CONSTRAINT pk_wine_cultivation PRIMARY KEY (cultid) @@ -249,31 +249,31 @@ CREATE TABLE member ( family_name TEXT NOT NULL, suffix TEXT DEFAULT NULL, - birthday TEXT CHECK (birthday REGEXP '[1-9][0-9]{3}(-(0[1-9]|1[012])(-(0[1-9]|[12][0-9]|3[01]))?)?') DEFAULT NULL, - entry_date TEXT NOT NULL CHECK (entry_date REGEXP '[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])') DEFAULT CURRENT_DATE, - exit_date TEXT CHECK (exit_date REGEXP '[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])') DEFAULT NULL, + birthday TEXT CHECK (birthday REGEXP '^[1-9][0-9]{3}(-(0[1-9]|1[012])(-(0[1-9]|[12][0-9]|3[01]))?)?$') DEFAULT NULL, + entry_date TEXT NOT NULL CHECK (entry_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT CURRENT_DATE, + exit_date TEXT CHECK (exit_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT NULL, business_shares INTEGER NOT NULL DEFAULT 0, accounting_nr TEXT DEFAULT NULL, zwstid TEXT NOT NULL, - betriebsnr TEXT DEFAULT NULL, - ustid TEXT CHECK (ustid REGEXP '[A-Z]{2}[A-Z0-9]{2,12}') DEFAULT NULL, - volllieferant INTEGER NOT NULL CHECK (volllieferant IN (FALSE, TRUE)) DEFAULT FALSE, - buchführend INTEGER NOT NULL CHECK (buchführend IN (FALSE, TRUE)) DEFAULT FALSE, - funktionär INTEGER NOT NULL CHECK (funktionär IN (FALSE, TRUE)) DEFAULT FALSE, - active INTEGER NOT NULL CHECK (active IN (FALSE, TRUE)) DEFAULT TRUE, + betriebsnr TEXT DEFAULT NULL, + ustid TEXT CHECK (ustid REGEXP '^[A-Z]{2}[A-Z0-9]{2,12}$') DEFAULT NULL, + volllieferant INTEGER NOT NULL CHECK (volllieferant IN (FALSE, TRUE)) DEFAULT FALSE, + buchführend INTEGER NOT NULL CHECK (buchführend IN (FALSE, TRUE)) DEFAULT FALSE, + funktionär INTEGER NOT NULL CHECK (funktionär IN (FALSE, TRUE)) DEFAULT FALSE, + active INTEGER NOT NULL CHECK (active IN (FALSE, TRUE)) DEFAULT TRUE, - iban TEXT CHECK (iban REGEXP '[A-Z]{2}[0-9]{2}[A-Z0-9]{8,30}') DEFAULT NULL, - bic TEXT CHECK (bic REGEXP '[A-Z0-9]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}?') DEFAULT NULL, + iban TEXT CHECK (iban REGEXP '^[A-Z]{2}[0-9]{2}[A-Z0-9]{8,30}$') DEFAULT NULL, + bic TEXT CHECK (bic REGEXP '^[A-Z0-9]{4}[A-Z]{2}[A-Z0-9]{2}[A-Z0-9]{3}?$') DEFAULT NULL, country TEXT NOT NULL, postal_dest TEXT NOT NULL, address TEXT NOT NULL, - email TEXT CHECK (email REGEXP '[^@]+@([a-z0-9_\x2Däöüß]+\.)[a-z]{2,}') DEFAULT NULL, - phone_landline TEXT CHECK (phone_landline REGEXP '\+[0-9]+') DEFAULT NULL, - phone_mobile TEXT CHECK (phone_mobile REGEXP '\+[0-9]+') DEFAULT NULL, + email TEXT CHECK (email REGEXP '^[^@]+@([a-z0-9_\x2Däöüß]+\.)[a-z]{2,}$') DEFAULT NULL, + phone_landline TEXT CHECK (phone_landline REGEXP '^\+[0-9]+$') DEFAULT NULL, + phone_mobile TEXT CHECK (phone_mobile REGEXP '^\+[0-9]+$') DEFAULT NULL, default_kgnr INTEGER NOT NULL, comment TEXT DEFAULT NULL, @@ -326,7 +326,7 @@ CREATE TABLE contract ( CREATE TABLE area_commitment ( vnr INTEGER NOT NULL, kgnr INTEGER NOT NULL, - gstnr TEXT NOT NULL CHECK (gstnr REGEXP '\.?[1-9][0-9]*(/[1-9][0-9]*)*'), + gstnr TEXT NOT NULL CHECK (gstnr REGEXP '^\.?[1-9][0-9]*(/[1-9][0-9]*)*$'), rdnr INTEGER, area INTEGER NOT NULL, @@ -361,8 +361,8 @@ CREATE TABLE season ( year INTEGER NOT NULL CHECK (year >= 1000 AND year <= 9999), currency TEXT NOT NULL, - start_date TEXT CHECK (start_date REGEXP '[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])'), - end_date TEXT CHECK (end_date REGEXP '[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])'), + start_date TEXT CHECK (start_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'), + end_date TEXT CHECK (end_date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$'), CONSTRAINT pk_season PRIMARY KEY (year), CONSTRAINT fk_season_currency FOREIGN KEY (currency) REFERENCES currency (code) @@ -391,8 +391,8 @@ CREATE TABLE delivery ( year INTEGER NOT NULL, did INTEGER NOT NULL, - date TEXT NOT NULL CHECK (date LIKE year || '-%' AND date REGEXP '[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])') DEFAULT CURRENT_DATE, - time TEXT NOT NULL CHECK (time REGEXP '([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]') DEFAULT CURRENT_TIME, + date TEXT NOT NULL CHECK (date LIKE year || '-%' AND date REGEXP '^[1-9][0-9]{3}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$') DEFAULT CURRENT_DATE, + time TEXT NOT NULL CHECK (time REGEXP '^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$') DEFAULT CURRENT_TIME, zwstid TEXT NOT NULL, lnr INTEGER NOT NULL CHECK (lnr >= 1 AND lnr <= 999), lsnr TEXT NOT NULL DEFAULT 'UNSET',