littleyoda / hibiscus.depotviewer

Depotviewer Plugin für Hibiscus
30 stars 15 forks source link

GenericJSFetcher liefert nun auch Reverse Split Ereignisse #91

Closed faiteanu closed 3 years ago

faiteanu commented 3 years ago

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.

littleyoda commented 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

faiteanu commented 3 years ago

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.

faiteanu commented 3 years ago

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.

littleyoda commented 3 years ago

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]

faiteanu commented 3 years ago

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.