diff --git a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php index 6ad783e2f..939b1ea7e 100644 --- a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php +++ b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php @@ -1,48 +1,80 @@ db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'")) -{ - if($db->db_num_rows($result) === 0) - { +$cols_to_add = [ + 'lehrveranstaltung_id' => "INTEGER", + 'studiensemester_kurzbz' => "INTEGER" +]; - $qry = "ALTER TABLE lehre.tbl_projektarbeit - ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; +foreach ($cols_to_add as $col => $type) { + $check = "SELECT 1 FROM information_schema.columns + WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = '$col'"; - if(!$db->db_query($qry)) - echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; - else - echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; + if ($result = $db->db_query($check)) { + if ($db->db_num_rows($result) === 0) { + $qry = "ALTER TABLE lehre.tbl_projektarbeit ADD COLUMN IF NOT EXISTS $col $type;"; + if ($db->db_query($qry)) { + echo "
Column $col hinzugefuegt."; + } else { + echo "Error adding $col: ".$db->db_last_error()."
"; + } + } } } -// TODO: check for and add fk constraint lehrveranstaltung_id -//if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'lehrveranstaltung_id'")) -//{ -// if($db->db_num_rows($result) === 0) -// { -// -// $qry = "ALTER TABLE lehre.tbl_projektarbeit -// ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; -// -// if(!$db->db_query($qry)) -// echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; -// else -// echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; -// } -//} +// retrieve lehrveranstaltung_id & studiensemester_kurzbz from tbl_lehreinheit +// into new columns based on the existing reference +$migration_qry = "UPDATE lehre.tbl_projektarbeit p + SET lehrveranstaltung_id = l.lehrveranstaltung_id, + studiensemester_kurzbz = l.studiensemester_kurzbz + FROM lehre.tbl_lehreinheit l + WHERE p.lehreinheit_id = l.lehreinheit_id + AND (p.lehrveranstaltung_id IS NULL OR p.studiensemester_kurzbz IS NULL);"; -if($result = $db->db_query("SELECT 1 FROM information_schema.columns WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit' AND column_name = 'studiensemester_kurzbz'")) -{ - if($db->db_num_rows($result) === 0) - { +if ($db->db_query($migration_qry)) { + echo "
Datenmigration von lehreinheit_id zu lehrveranstaltung_id & studiensemester_kurzbz abgeschlossen."; +} else { + echo "Migration Error: ".$db->db_last_error()."
"; +} +// set NOT NULL and make lehreinheit_id NULLable +$constraint_qry = "ALTER TABLE lehre.tbl_projektarbeit + ALTER COLUMN lehrveranstaltung_id SET NOT NULL, + ALTER COLUMN studiensemester_kurzbz SET NOT NULL, + ALTER COLUMN lehreinheit_id DROP NOT NULL;"; + +if ($db->db_query($constraint_qry)) { + echo "
Constraints updated lehrveranstaltung_id SET NOT NULL, studiensemester_kurzbz SET NOT NULL, lehreinheit_id DROP NOT NULL."; +} else { + echo "Alter Constraints Error: ".$db->db_last_error()."
"; +} + +// add fkey for lehrveranstaltung_id +$fk_check_lv = "SELECT 1 FROM information_schema.table_constraints + WHERE constraint_name = 'fk_projektarbeit_lehrveranstaltung_id' AND table_schema = 'lehre'"; + +if ($result = $db->db_query($fk_check_lv)) { + if ($db->db_num_rows($result) === 0) { $qry = "ALTER TABLE lehre.tbl_projektarbeit - ADD COLUMN IF NOT EXISTS lehrveranstaltung_id INTEGER;"; + ADD CONSTRAINT fk_projektarbeit_lehrveranstaltung_id + FOREIGN KEY (lehrveranstaltung_id) + REFERENCES lehre.tbl_lehrveranstaltung (lehrveranstaltung_id) + ON DELETE RESTRICT;"; + if ($db->db_query($qry)) echo '
fk_projektarbeit_lehrveranstaltung_id hinzugefuegt'; + } +} - if(!$db->db_query($qry)) - echo 'lehre.tbl_projektarbeit: '.$db->db_last_error().'
'; - else - echo '
tbl_projektarbeit column lehrveranstaltung_id hinzugefuegt'; +// add fkey for studiensemester_kurzbz +$fk_check_sem = "SELECT 1 FROM information_schema.table_constraints + WHERE constraint_name = 'fk_projektarbeit_studiensemester_kurzbz' AND table_schema = 'lehre'"; + +if ($result = $db->db_query($fk_check_sem)) { + if ($db->db_num_rows($result) === 0) { + $qry = "ALTER TABLE lehre.tbl_projektarbeit + ADD CONSTRAINT fk_projektarbeit_studiensemester_kurzbz + FOREIGN KEY (studiensemester_kurzbz) + REFERENCES public.tbl_studiensemester (studiensemester_kurzbz) + ON DELETE RESTRICT;"; + if ($db->db_query($qry)) echo '
fk_projektarbeit_studiensemester_kurzbz hinzugefuegt'; } } \ No newline at end of file