Fehler #30
SL::DB::Helpers::Attr as_date funktioniert nicht mit now()
100%
Beschreibung
as_date SL::DB::Helpers::Attr kann mit 'now' umgehen, aber nicht mit 'now()'. So ist z.B. SL::DB::Order->new->itime = 'now()' und SL::DB::Order->new->itime_as_date liefert den Fehler: "Runtime error: Can't locate object method "ymd" via package "now()" (perhaps you forgot to load "now()"?) at SL/DB/Helper/Attr.pm line 94."
Zugehörige Revisionen
Historie
Von Sven Schöling vor fast 10 Jahren aktualisiert
Hab ich mir angeschaut Bernd. Ja, ich habe das damals als Sonderfall eingebaut um genau das abzufangen, und ja, wahrscheinlich ist Dein Fix korrekt.
Zur Erklärung:
Das mit dem Defaultwert für date Spalten in sql ist sone Sache, das macht jede Datenbank anders. Bevorzugt in Postgres ist:
DEFAULT now() --
DEFAULT CURRENT_DATE -- was ein Alias für now() + Cast zu Date ist.
In alten Upgradescripten hat Simader oft
DEFAULT 'now'
benutzt, was, soweit ich das sehen kann, für alte Versionen von Postgres durchaus der Weg war das hinzukriegen. Dafür war mein Sonderfall. Beim auslesen wird das mittlerweile als
DEFAULT ('now'::TEXT)::DATE
ausgegeben, was auch zeigt was intern damit passiert.
MySQL zum Beispiel kann garkeine der obigen Syntaxen, das braucht
DEFAULT CURRENT_TIMESTAMP
... weil NOW und CURRENT_DATE Funktionen ist, CURRENT_TIMESTAMP aber nicht. Bäh.
Von Bernd Bleßmann vor fast 10 Jahren aktualisiert
- Status wurde von Neu zu Gelöst geändert
- % erledigt wurde von 0 zu 100 geändert
Status geändert durch Changeset kivitendo-erp|commit:b9d2f81497c6ff60be298ed1e7697c0c6a4316fa.
SL::DB::Helpers::Attr as_date geht jetzt auch mit 'now()'.
Ein neu-angelegtes Rose-DB-Objekt mit einer Spalte mit einem
Datums-Default-Wert 'now' liefert 'now()' für diese Methode. Z.B.:
SL::DB::Order->new->itime = 'now()'. Jetzt geht damit z.B.:
SL::DB::Order->new->itime_as_date
Behebt #30 (redmine).