-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix Update0430 Teil 2 #223
Fix Update0430 Teil 2 #223
Conversation
Ich verwende JVerein mit MariaDb, hier klappt das Update leider nicht:
|
@willuhn , @dippeal ihr kennt euch doch besser mit SQL aus. Ich habe die Methode createForeignKeyIfNotExistsNocheck von createForeignKey kopiert und angepasst. |
Ich glaube, MySQL/MariaDB unterstützt das "IF NOT EXISTS" nicht (oder nicht in allen Versionen). |
Ok, ist aber nicht trotzdem auch ein Fehler im Code von createForeignKey für MySQL? |
IF NOT EXISTS gibt es nicht im MYSQL und NOCHECK auch nicht. Du musst erst prüfen ob der key existiert und dann ggf. anlegen. |
Ok, ich schaue mal wie das abprüfen geht. |
Da ich kein MySQL habe wäre meine Frage ob der Code unten funktionieren würde. Ich erzeuge einfach den Key im TRY. Wenn er schon existiert geht es in den CATCH und da mache ich nichts weil dann wurde er ja schon mit Update430 erzeugt und braucht nicht neu ezeugt werden.
|
"BEGIN TRY" gibt's nicht bei MySQL vielleicht https://dev.mysql.com/doc/refman/8.4/en/commit.html ?
|
Ich habe mir hier das Create Statement aus der MySQL Dokumentation geholt. ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name,...) So wie ich es verstanden habe ist symbol der Contraint Name und index_name der Name des Indexes der auf die Spalte erzeugt wurde. Der aktuelle Code setzt bei MySQL den übergeben Contraint Namen als index_name ein. Das wäre aber falsch weil der Index einen anderen Namen hat. DROP {CHECK | CONSTRAINT} symbol Da der bei MySQL nicht angegeben ist wird er wohl automatisch generiert. Darum glaube ich, dass die Methode createForeignKey nicht stimmt. Jetzt habe ich noch etwas gefunden. Die spec sagt: Also wird wohl beim aktuellen Code der Contraint Name sowieso ignoriert und einer automatisch generiert. Es wäre aber wohl besser den Request zu ändern und den Namen als Symbol zu übergeben wie bei H2. |
Diese Migration ist für den Fall, dass die korrigierte Migration Update0430 nicht ausgeführt wird weil schon mit der alten Version migriert wurde z.B. mit einem Nightly Build.
Weil wegen gelöschter Buchungsklassen die Integrität verletzt sein könnte, muss der Foreign Key mit NOCHECK erzeugt werden.
Der Foreign Key wird nur erzeugt wenn er noch nicht existiert.
Sollte jemand schon bei einem Konto eine Buchungsart gesetzt haben und diese dann gelöscht haben, bleibt die ID bei der Migration in der Kontotabelle erhalten. Dies führt aber zu keinem Fehlverhalten der Software. Beim nächsten setzen eine Buchungsart wird die ID überschrieben.
Die Übergabe muss nach #218 erfolgen wegen der Update Nummer.