tbaddade / redaxo_url

REDAXO 5 AddOn zur URL-Generierung für eigene AddOns (ehemals Url Control, ehemals Frau Schultze)
MIT License
46 stars 22 forks source link

Upgrade auf 2 nicht möglich, wenn Upgrade fehlschlug #247

Closed alxndr-w closed 2 years ago

alxndr-w commented 2 years ago

Es war in URL1 ein Profil 2x angelegt - warum auch immer. Beim Update-Versuch auf URL2 ging das schief:

AddOn url konnte aus folgendem Grund nicht aktualisiert werden:
SQL error: Error while executing statement "INSERT INTO `rex_url_generator_profile` SET `namespace` = :namespace, `article_id` = :article_id, `clang_id` = :clang_id, `table_name` = :table_name, `table_parameters` = :table_parameters, `relation_1_table_name` = :relation_1_table_name, `relation_1_table_parameters` = :relation_1_table_parameters, `relation_2_table_name` = :relation_2_table_name, `relation_2_table_parameters` = :relation_2_table_parameters, `relation_3_table_name` = :relation_3_table_name, `relation_3_table_parameters` = :relation_3_table_parameters, `createdate` = :createdate, `createuser` = :createuser, `updatedate` = :updatedate, `updateuser` = :updateuser" using params {"namespace":"event_category-id","article_id":"46","clang_id":"1","table_name":"1_xxx_rex_dance_event_category","table_parameters":"{\"column_id\":\"id\",\"column_clang_id\":\"\",\"restriction_1_column\":\"\",\"restriction_1_comparison_operator\":\"=\",\"restriction_1_value\":\"\",\"restriction_2_logical_operator\":\"\",\"restriction_2_column\":\"\",\"restriction_2_comparison_operator\":\"=\",\"restriction_2_value\":\"\",\"restriction_3_logical_operator\":\"\",\"restriction_3_column\":\"\",\"restriction_3_comparison_operator\":\"=\",\"restriction_3_value\":\"\",\"column_segment_part_1\":\"name\",\"column_segment_part_2_separator\":\"-\",\"column_segment_part_2\":\"\",\"column_segment_part_3_separator\":\"-\",\"column_segment_part_3\":\"\",\"relation_1_column\":\"\",\"relation_1_position\":\"AFTER\",\"relation_2_column\":\"\",\"relation_2_position\":\"BEFORE\",\"relation_3_column\":\"\\\",\\\"relation_3_position\\\":\\\"BEFORE\\\",\\\"append_user_paths\\\":\\\"\",\"append_structure_categories\":\"0\",\"column_seo_title\":\"name\",\"column_seo_description\":\"\",\"column_seo_image\":\"\",\"sitemap_add\":\"1\",\"sitemap_frequency\":\"always\",\"sitemap_priority\":\"1.0\",\"column_sitemap_lastmod\":\"\"}","relation_1_table_name":"","relation_1_table_parameters":"\"[]\"","relation_2_table_name":"","relation_2_table_parameters":"[]","relation_3_table_name":"","relation_3_table_parameters":"[]","createdate":"1970-01-01 01:33:37","createuser":"xxx","updatedate":"1970-01-01 01:33:42","updateuser":"xxx"}! SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'event_category-id-46-1' for key 'namespace'

Daraufhin ließ sich das Addon nicht updaten, ehe nicht rex_url_generator_profile komplett geleert wurde.

(Kann man auch wontfix lassen)

tbaddade commented 2 years ago

@TobiasKrais Was meinst du? Magst du das Updatescript anpassen?

TobiasKrais commented 2 years ago

Ein doppelter Namespace war in Version 1 noch möglich, ist es aber nicht mehr in Version 2. Wie sollten wir vorgehen? Vermutlich am besten, wenn wir einen neuen Namespace generieren. Oder wir lassen den Datensatz aus. Was denkt ihr?

TobiasKrais commented 2 years ago

Wobei man noch anmerken muss, dass es sich hier nicht um das Feld namespace handelt, sondern um den Schlüssel namespace. Dieser besteht aus dem Feld namespace, der Artikel ID und der Clang ID. Ich persönlich würde zum Überspringen des Datensatzes tendieren.

TobiasKrais commented 2 years ago

PR steht bereit.

tbaddade commented 2 years ago

Was denkt ihr?

Ich würde den Namespace um das Wort "-copy" erweitern. Ähnlich wie es in der Struktur passiert.

Wenn import, dann versuchen auch alles zu importieren. Auslassen fände ich nicht gut, weil man sich drauf verlässt das der Import alles übernimmt.

TobiasKrais commented 2 years ago

Und was machen wir wenn jemand ein drittes Profil mit dem selben Namespace hat?

TobiasKrais commented 2 years ago

Und die andere Frage ist: welchen Use Case gibt es für doppelte Namespaces? Mir fällt nur einer ein: ein Versehen.

TobiasKrais commented 2 years ago

Des weiteren müssen wir folgendes Bedenken: es besteht die Gefahr von doppelten URLs beim Import. Und: eventuell ist bei einigen anderen ebenfalls der Fehler aufgetreten und in der neuen Tabelle liegen schon importierte Profile die beim erneuten Versuch alle dupliziert werden würden und doppelte URLs erzeugen würden.

Eine Lösung wäre ein Hinweis, dass ein Profil nicht importiert werden konnte und es bitte nochmals manuell angelegt werden sollte.

alxndr-w commented 2 years ago

Es sind zwei Schritte:

  1. Das Upgrade schlägt fehl, weil doppeltes Profil angelegt ist. Manueller Eingriff ist erforderlich.
  2. Das erneute Upgrade schlägt fehl, weil die Tabelle schon befüllt wurde.

Imho sollte URL2 nur sicherstellen, dass ein erneutes Upgrade nicht fehlschlägt, weil es in 1. halbfertig hinterlassen wurde.

Ansonsten ist das Upgrade so smoorh, dass man echt fix durchkommt, alles umzustellen. 💙

TobiasKrais commented 2 years ago

Hab dem PR noch angepasst: https://github.com/TobiasKrais/redaxo_url/commit/b758a8682f6b0644a7fd6239fc42e434a7857ef5

  1. Neue Tabellen werden vor import geleert, so dass ein vorheriges, fehlgeschlagenes Update keine Auswirkungen mehr hat.
  2. Der Nutzer erhält einen Hinweis auf ein doppeltes Profil mit einem Link zur den Profilen um dieses prüfen zu können.