Closed faiteanu closed 3 years ago
Bei dieser Änderung bin ich bzgl. der Implementierung skeptisch.
Hibiscus unterstützt auch mysql. Das merge-Kommando wird aber von mysql nicht unterstützt.
Ich hatte in der Vergangenheit auch diesbezüglich (mysql-Support) Nachfragen
Mein PR waren eigentlich zwei kleine Änderungen in einer, aber insgesamt nur 5 Zeilen + JAR-Datei. Vielleicht kannst du den Teil für Reverse Split schonmal manuell übernehmen. Der ist beispielsweise nötig für ISIN DE0005933931, ein DAX ETF.
Bisher habe ich Hibiscus nur in der Standard-Installation von Hibiscus-Mashup verwendet, da gab es keine unterschiedlichen Datenbanken zur Auswahl, daher war mir das nicht bekannt. Als Alternative für MERGE gibt es in mySQL "ON DUPLICATE KEY UPDATE", was aber mangels passendem Primärschlüssel nicht anwendbar ist, soweit ich es sehe. Könnte man es analog zu SQLUtil.addTop implementieren mit if (driver instanceof DBSupportMySqlImpl)?
Das bisherige Verhalten, bei dem alle Kursdaten beim Import gelöscht werden, ist jedenfalls ungünstig, weil manche Kurs-Lieferanten nur bestimmte Zeiträume liefern können und man daher beim Import andere Daten verliert. Das wurde auch schon im Forum angemerkt.
Merge-SQL wieder entfernt, dafür Code so umgestellt, dass nur noch aktualisierbare Daten gelöscht werden. Dadurch gehen alte Kurse und Ereignisse nicht verloren, wenn ein neuer Import sie nicht mehr enthält.
Hat es einen Grund, dass du explizit die einzelnen Einträge löscht und nicht einfach den Bereich? Also date >= startdate AND date <= enddate
[Bin mir gerade nicht sicher, welche Lösung ist bevorzugen würde, daher meine Nachfrage]
Wenn man einen Bereich löscht, könnte es immer passieren, dass zwischendurch etwas fehlt. So ist es sichergestellt, dass nur genau das gelöscht wird, wofür aktuelle Daten vorhanden sind.
Diese werden mit der Aktion "R" in der Datenbank gespeichert und ausgewertet.
Zudem werden Kursdaten und Events nun per SQL MERGE eingefügt, statt über DELETE+INSERT. Dadurch bleiben alte Daten erhalten, falls der Kurs-Provider nicht mehr alles liefern kann.