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 fe4a8e117..71b45da06 100644
--- a/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php
+++ b/system/dbupdate_3.4/75469_le_optional_4_projektarbeit.php
@@ -22,31 +22,49 @@ foreach ($cols_to_add as $col => $type) {
}
}
-// 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);";
+// run the data migration and the constraint change only once.
+// Target state: lehrveranstaltung_id NOT NULL, studiensemester_kurzbz NOT NULL, lehreinheit_id NULLable.
+// The check returns a row as long as one of the three columns is not in the target state.
+$state_check = "SELECT 1 FROM information_schema.columns
+ WHERE table_schema = 'lehre' AND table_name = 'tbl_projektarbeit'
+ AND ((column_name IN ('lehrveranstaltung_id', 'studiensemester_kurzbz') AND is_nullable = 'YES')
+ OR (column_name = 'lehreinheit_id' AND is_nullable = 'NO'))";
-if ($db->db_query($migration_qry)) {
- echo "
Datenmigration von lehreinheit_id zu lehrveranstaltung_id & studiensemester_kurzbz abgeschlossen.";
+$migration_pending = false;
+
+if ($result = $db->db_query($state_check)) {
+ $migration_pending = ($db->db_num_rows($result) > 0);
} else {
- echo "Migration Error: ".$db->db_last_error()."
";
+ echo "State Check 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 ($migration_pending) {
+ // 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 ($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()."
";
+ 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