From 56d3d33cd607bea0f3af88334dc9ccb15e7b99d4 Mon Sep 17 00:00:00 2001 From: Cris Date: Thu, 24 Mar 2022 14:39:20 +0100 Subject: [PATCH] Verbesserte Abfrage beim Erstellen/Adaptieren von Tabellen tbl_zeitwunsch_gueltigkeit und tbl_zeitwunsch --- system/dbupdate_3.3.php | 212 +++++++++++++++++++++------------------- 1 file changed, 109 insertions(+), 103 deletions(-) diff --git a/system/dbupdate_3.3.php b/system/dbupdate_3.3.php index b74e9c774..0954059dd 100644 --- a/system/dbupdate_3.3.php +++ b/system/dbupdate_3.3.php @@ -5966,117 +5966,123 @@ if(!$result = @$db->db_query("SELECT behebung_parameter FROM system.tbl_issue LI } // Add table campus.tbl_zeitwunsch_gueltigkeit and migrate initial data -if(!$result = @$db->db_query("SELECT 1 FROM campus.tbl_zeitwunsch_gueltigkeit LIMIT 1;")) +if($result = $db->db_query("SELECT EXISTS (SELECT FROM information_schema.tables WHERE table_schema LIKE 'campus' AND table_name = 'tbl_zeitwunsch_gueltigkeit');")) { - $qry = " - CREATE TABLE campus.tbl_zeitwunsch_gueltigkeit - ( - zeitwunsch_gueltigkeit_id INTEGER NOT NULL, - mitarbeiter_uid CHARACTER VARYING(32) NOT NULL, - von DATE, - bis DATE, - insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), - insertvon CHARACTER VARYING(32), - updateamum TIMESTAMP WITHOUT TIME ZONE, - updatevon CHARACTER VARYING(32) - ); - - CREATE SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id - INCREMENT BY 1 - NO MAXVALUE - NO MINVALUE - CACHE 1; - - -- Add Primary Key - ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ADD CONSTRAINT pk_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id PRIMARY KEY (zeitwunsch_gueltigkeit_id); - ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ALTER COLUMN zeitwunsch_gueltigkeit_id SET DEFAULT nextval('campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id'); - - -- Add Permissions - GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci; - GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO web; - - GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci; - GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web; + if ($result == false) + { + $qry = " + CREATE TABLE campus.tbl_zeitwunsch_gueltigkeit + ( + zeitwunsch_gueltigkeit_id INTEGER NOT NULL, + mitarbeiter_uid CHARACTER VARYING(32) NOT NULL, + von DATE, + bis DATE, + insertamum TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW(), + insertvon CHARACTER VARYING(32), + updateamum TIMESTAMP WITHOUT TIME ZONE, + updatevon CHARACTER VARYING(32) + ); - -- Initial data migration - INSERT INTO campus.tbl_zeitwunsch_gueltigkeit - ( - mitarbeiter_uid, - von, - bis, - insertamum, - insertvon, - updateamum, - updatevon - ) - SELECT * FROM - ( - -- Unique Mitarbeiter from Zeitwunsch Tabelle, Start of actual Studiensemester and open end - SELECT DISTINCT mitarbeiter_uid, - (SELECT start FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()), - NULL::DATE AS \"ende\", - NOW(), - 'system', - NOW(), - 'system' - FROM campus.tbl_zeitwunsch - ORDER BY mitarbeiter_uid - ) AS init_data - "; + CREATE SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + -- Add Primary Key + ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ADD CONSTRAINT pk_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id PRIMARY KEY (zeitwunsch_gueltigkeit_id); + ALTER TABLE campus.tbl_zeitwunsch_gueltigkeit ALTER COLUMN zeitwunsch_gueltigkeit_id SET DEFAULT nextval('campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id'); + + -- Add Permissions + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO vilesci; + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_gueltigkeit_zeitwunsch_gueltigkeit_id TO web; + + GRANT SELECT, INSERT, UPDATE, DELETE ON campus.tbl_zeitwunsch_gueltigkeit TO vilesci; + GRANT SELECT, INSERT, UPDATE ON campus.tbl_zeitwunsch_gueltigkeit TO web; + + -- Initial data migration + INSERT INTO campus.tbl_zeitwunsch_gueltigkeit + ( + mitarbeiter_uid, + von, + bis, + insertamum, + insertvon, + updateamum, + updatevon + ) + SELECT * FROM + ( + -- Unique Mitarbeiter from Zeitwunsch Tabelle, Start of actual Studiensemester and open end + SELECT DISTINCT mitarbeiter_uid, + (SELECT start FROM public.tbl_studiensemester WHERE start <= NOW() AND ende >= NOW()), + NULL::DATE AS \"ende\", + NOW(), + 'system', + NOW(), + 'system' + FROM campus.tbl_zeitwunsch + ORDER BY mitarbeiter_uid + ) AS init_data + "; - if(!$db->db_query($qry)) - echo 'campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'
'; - else - echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt
'; + if(!$db->db_query($qry)) + echo 'campus.tbl_zeitwunsch_gueltigkeit: '.$db->db_last_error().'
'; + else + echo 'campus.tbl_zeitwunsch_gueltigkeit: Tabelle hinzugefuegt
'; + } } // Add column zeitwunsch_id (as new primary key) and zeitwunsch_gueltigkeit_id to campus.tbl_zeitwunsch -if (!$result = @$db->db_query("SELECT zeitwunsch_id FROM campus.tbl_zeitwunsch LIMIT 1")) +if ($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'campus' AND table_name = 'tbl_zeitwunsch' AND column_name IN ('zeitwunsch_id', 'zeitwunsch_gueltigkeit_id')")) { - $qry = " - ALTER TABLE campus.tbl_zeitwunsch DROP CONSTRAINT IF EXISTS pk_tbl_zeitwunsch; -- Drop combined pk stunde/mitarbeiter_uid/tag + if ($db->db_num_rows($result) <> 2) + { + $qry = " + ALTER TABLE campus.tbl_zeitwunsch DROP CONSTRAINT IF EXISTS pk_tbl_zeitwunsch; -- Drop combined pk stunde/mitarbeiter_uid/tag + + -- Add primary key and foreign key + ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN IF NOT EXISTS zeitwunsch_id INTEGER; + ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN IF NOT EXISTS zeitwunsch_gueltigkeit_id INTEGER; + + -- Add comments + COMMENT ON COLUMN campus.tbl_zeitwunsch.zeitwunsch_gueltigkeit_id IS 'Ordnet die Zeitwuensche einer Gueltigkeitsdauer von-bis zu'; + COMMENT ON COLUMN campus.tbl_zeitwunsch.mitarbeiter_uid IS 'DEPRECATED'; + + CREATE SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET DEFAULT nextval('campus.seq_zeitwunsch_zeitwunsch_id'); + UPDATE campus.tbl_zeitwunsch SET zeitwunsch_id = nextval('campus.seq_zeitwunsch_zeitwunsch_id'); + + ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT pk_zeitwunsch_zeitwunsch_id PRIMARY KEY (zeitwunsch_id); + ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT fk_zeitwunsch_zeitwunsch_gueltigkeit_id FOREIGN KEY (zeitwunsch_gueltigkeit_id) REFERENCES campus.tbl_zeitwunsch_gueltigkeit(zeitwunsch_gueltigkeit_id) ON DELETE RESTRICT ON UPDATE CASCADE; + + -- Set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of actual Studiensemester + UPDATE campus.tbl_zeitwunsch + SET zeitwunsch_gueltigkeit_id = ( + SELECT zeitwunsch_gueltigkeit_id + FROM campus.tbl_zeitwunsch_gueltigkeit zwg + WHERE tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid + ); + + -- Set primary key and foreign key NOT NULL + ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET NOT NULL; + ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_gueltigkeit_id SET NOT NULL; + + -- Set permissions + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci; + GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO web; + "; - -- Add primary key and foreign key - ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN zeitwunsch_id INTEGER; - ALTER TABLE campus.tbl_zeitwunsch ADD COLUMN zeitwunsch_gueltigkeit_id INTEGER; - - -- Add comments - COMMENT ON COLUMN campus.tbl_zeitwunsch.zeitwunsch_gueltigkeit_id IS 'Ordnet die Zeitwuensche einer Gueltigkeitsdauer von-bis zu'; - COMMENT ON COLUMN campus.tbl_zeitwunsch.mitarbeiter_uid IS 'DEPRECATED'; - - CREATE SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id - INCREMENT BY 1 - NO MAXVALUE - NO MINVALUE - CACHE 1; - - ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET DEFAULT nextval('campus.seq_zeitwunsch_zeitwunsch_id'); - UPDATE campus.tbl_zeitwunsch SET zeitwunsch_id = nextval('campus.seq_zeitwunsch_zeitwunsch_id'); - - ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT pk_zeitwunsch_zeitwunsch_id PRIMARY KEY (zeitwunsch_id); - ALTER TABLE campus.tbl_zeitwunsch ADD CONSTRAINT fk_zeitwunsch_zeitwunsch_gueltigkeit_id FOREIGN KEY (zeitwunsch_gueltigkeit_id) REFERENCES campus.tbl_zeitwunsch_gueltigkeit(zeitwunsch_gueltigkeit_id) ON DELETE RESTRICT ON UPDATE CASCADE; - - -- Set initial zeitwunsch_gueltigkeit_id values to Gueltigkeitszeitraum of actual Studiensemester - UPDATE campus.tbl_zeitwunsch - SET zeitwunsch_gueltigkeit_id = ( - SELECT zeitwunsch_gueltigkeit_id - FROM campus.tbl_zeitwunsch_gueltigkeit zwg - WHERE tbl_zeitwunsch.mitarbeiter_uid = zwg.mitarbeiter_uid - ); - - -- Set primary key and foreign key NOT NULL - ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_id SET NOT NULL; - ALTER TABLE campus.tbl_zeitwunsch ALTER COLUMN zeitwunsch_gueltigkeit_id SET NOT NULL; - - -- Set permissions - GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO vilesci; - GRANT SELECT, UPDATE ON SEQUENCE campus.seq_zeitwunsch_zeitwunsch_id TO web; - "; - - if(!$db->db_query($qry)) - echo 'campus.tbl_zeitwunsch: '.$db->db_last_error().'
'; - else - echo '
campus.tbl_zeitwunsch: Neue Spalte zeitwunsch_id hinzugefuegt.'; + if (!$db->db_query($qry)) + echo 'campus.tbl_zeitwunsch: ' . $db->db_last_error() . '
'; + else + echo '
campus.tbl_zeitwunsch: Neue Spalte zeitwunsch_id hinzugefuegt.'; + } } // *** Pruefung und hinzufuegen der neuen Attribute und Tabellen