, * * Beschreibung: * Dieses Skript prueft die Datenbank auf Aenderungen bezueglich eine_uid, dabei werden fehlende Attribute angelegt. */ require_once('../config/system.config.inc.php'); require_once('../include/basis_db.class.php'); $db = new basis_db(); echo '
"; foreach($all_tables_to_update as $t) describeOneChange($db, $t); echo "
"; echo " "; } else { echo "Could not DROP view bis.vw_bisio: " . $create_view_qry."
"; } } //modify all tables foreach($all_tables_to_update as $t) modifyOneTable($db, $t); if(!$result = @$db->db_query("SELECT 1 FROM bis.vw_bisio LIMIT 1;")) { //********************************CREATE ALL VIEWS AGAIN******************************** $create_view_qry = " CREATE VIEW bis.vw_bisio AS SELECT tbl_prestudentstatus.studiensemester_kurzbz, tbl_prestudentstatus.status_kurzbz, tbl_prestudent.person_id, tbl_prestudent.prestudent_id, tbl_bisio.bisio_id, tbl_bisio.mobilitaetsprogramm_code, tbl_bisio.nation_code, tbl_bisio.von, tbl_bisio.bis, tbl_bisio.zweck_code, tbl_bisio.ort, tbl_bisio.universitaet, tbl_bisio.lehreinheit_id, tbl_student.matrikelnr, tbl_student.student_uid, tbl_prestudent.studiengang_kz, tbl_student.semester, tbl_prestudent.aufmerksamdurch_kurzbz, tbl_prestudent.berufstaetigkeit_code, tbl_prestudent.ausbildungcode, tbl_prestudent.zgv_code, tbl_prestudent.zgvort, tbl_prestudent.zgvdatum, tbl_prestudent.zgvmas_code, tbl_prestudent.zgvmaort, tbl_prestudent.zgvmadatum, tbl_prestudent.aufnahmeschluessel, tbl_prestudent.facheinschlberuf, tbl_prestudent.reihungstest_id, tbl_prestudent.anmeldungreihungstest, tbl_prestudent.reihungstestangetreten, tbl_prestudent.rt_gesamtpunkte, tbl_prestudent.bismelden, tbl_prestudent.dual, tbl_prestudent.rt_punkte1, tbl_prestudent.rt_punkte2, tbl_prestudent.ausstellungsstaat, tbl_prestudent.rt_punkte3, tbl_prestudent.zgvdoktor_code, tbl_prestudent.zgvdoktorort, tbl_prestudent.zgvdoktordatum, tbl_prestudent.mentor, tbl_prestudent.zgvnation, tbl_prestudent.zgvmanation, tbl_prestudent.zgvdoktornation, tbl_prestudentstatus.ausbildungssemester, tbl_prestudentstatus.datum, tbl_prestudentstatus.orgform_kurzbz, tbl_prestudentstatus.studienplan_id, tbl_prestudentstatus.bestaetigtam, tbl_prestudentstatus.bestaetigtvon, tbl_prestudentstatus.fgm, tbl_prestudentstatus.faktiv, tbl_prestudentstatus.bewerbung_abgeschicktamum FROM bis.tbl_bisio JOIN tbl_student USING (prestudent_id) JOIN tbl_prestudent USING (prestudent_id) LEFT JOIN tbl_prestudentstatus ON tbl_prestudent.prestudent_id = tbl_prestudentstatus.prestudent_id AND (tbl_prestudentstatus.status_kurzbz::text = 'Incoming'::text OR tbl_prestudentstatus.status_kurzbz::text = 'Outgoing'::text); COMMENT ON VIEW bis.vw_bisio IS 'Incoming Outgoing';"; if(!$db->db_query($create_view_qry)) { echo "Could not CREATE view bis.vw_bisio: " . $create_view_qry."
"; } } } echo ''; /* FUNCTIONS */ function describeOneChange($db, $table) { if(!$result = @$db->db_query('SELECT '.$table["to"].' FROM '.$table["schema"].'.'.$table["name"].' LIMIT 1;')) { echo "ACHTUNG: DROPPEN von PRIMARY KEY ".$row->indexname." fehlgeschlagen
"; $db->db_query("ROLLBACK;"); return; } $constraint_add_query = str_replace ($table["from"], $table["to"], $def->pg_get_constraintdef ); $primary_keys[] = 'ALTER TABLE '.$table["schema"].".".$table["name"].' ADD CONSTRAINT '.$row->indexname.' '.$constraint_add_query; } else { if(!$index_drop_result = $db->db_query('DROP INDEX '.$table["schema"].".".$row->indexname)) { echo "ACHTUNG: DROPPEN von INDEX ".$row->indexname." fehlgeschlagen
"; $db->db_query("ROLLBACK;"); return; } $index_add_query = str_replace ($table["from"], $table["to"], $row->indexdef ); $indices[] = $index_add_query; } } //spalte einfuegen $alter_update_qry = 'ALTER TABLE '.$table["schema"].'.'.$table["name"].' ADD COLUMN '.$table["to"].' '.$table["datatype"].'; UPDATE '.$table["schema"].".".$table["name"].' SET '.$table["to"].' = (SELECT '.$table["to"].' FROM '.$table["newTargetSchema"].'.'.$table["pickDataFrom"].' WHERE '.$table["pickDataFromCol"].'='.$table["schema"].'.'.$table["name"].'.'.$table["from"].');'; $db->db_query($alter_update_qry); //constraints: $TO FK, $TO NOT NULL $constraint_qry = 'ALTER TABLE '.$table["schema"].".".$table["name"].' ALTER COLUMN '.$table["to"].' SET NOT NULL; ALTER TABLE '.$table["schema"].".".$table["name"].' ADD CONSTRAINT fk_'.$table["name"].'_'.$table["newTarget"].'_'.$table["to"].' FOREIGN KEY ('.$table["to"].') REFERENCES '.$table["newTargetSchema"].'.'.$table["newTarget"].' ('.$table["to"].');'; if(!$db->db_query($constraint_qry)) { echo ''.$table["schema"].".".$table["name"].': '.$db->db_last_error().'ACHTUNG: ADDEN von PRIMARY KEY ".$row->indexname." fehlgeschlagen
"; $db->db_query("ROLLBACK;"); return; } } foreach( $indices as $ind) { if(!$index_add_result = $db->db_query($ind)) {echo $ind; echo "ACHTUNG: ADDEN von INDEX ".$row->indexname." fehlgeschlagen
"; $db->db_query("ROLLBACK;"); return; } } $db->db_query("COMMIT;"); return; } } } } ?>