Nette\Database\Table\ResultSet DateTime:__contruct(‚infinity‘)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
RenatMagadiev
Člen | 2
+
0
-

Zdravím,
narazil jsem na problém s funkcí normalizeRow(). Jde o to, že se při fetchování zavolá tato funkce, která jak na ní koukám tak se stará o to aby se podle datového typu všechny sloupečky správně neinicializovali. Je to velice pěkná vlastnost, ale jelikož si u větve FIELD_DATETIME, FIELD_DATE a FIELD_TIME snaží nainitnout Nette\DateTime, který je při constructu zavolá phpkovské DateTime nastane problém jedná-li se o sloupec obsahující infinity hodnotu (tuto hodnota se využívá pro práci se smazanými daty a jejich srovnávání při hodnotě NULL se nedá použít porovnání s NOW()). Takže jestli existuje nějaký způsob nahradit Nette\Database\Table\ResultSet nebo Nette\DateTime? A jestli by bylo nějaké hezčí řešení budu jen rád. Jinak vím, že se dá použít výhybka v dotazu IF infinity THEN… ale je celkem zdlouhavé a nehezké kvůli této nedokonalosti frameworku pořád myslet na to, že může být hodnota infinity nebo selectovat všechny sloupce kromě deleted. Budu velice rád za všechny nápady a předem za ně děkuji.

Majkl578
Moderator | 1364
+
-1
-

Infinity není platné datum (logicky). Docela by mě zajímalo, jak jsi takovou hodnotu nacpal do datetime sloupečku.
Správné řešení je použít NULL nebo další boolean sloupeček. Teoreticky bys mohl použít i nějaké datum v daleké budoucnosti.

kvůli této nedokonalosti frameworku

Heheh, spíš bych řekl, kvůli špatnému návrhu databáze.

RenatMagadiev
Člen | 2
+
0
-

Tak jak vidím, tak to chce projasnit to, že jde o PostgreSQL databázi a datový typ timestamp with time zone, který už v sobě má hodnotu infinity.

Budu se opakovat, ale správné řešení není použít NULL (NULL není timestamp a tedy na něj neplatí jakákoliv porovnávací operátory a funkce databáze.) Ve firmě je to dlouho používané řešení a je v hodně ohledech lepší než složité a nepraktické řešení přes Vámi zmiňované bool sloupečky.

Děkuji za Vaší reakci, ale přeci jen bych zůstal u otázky jak mám tuto nepřipravenost Nette ORM na tento datový typ a všechny jeho možnosti. Byl bych rád, kdyby mi někdo poradil jak můžu framework v tomto ohledu rozšířit a případně tento případ nějak odchytit a předat upravený. Předem děkuji za všechny nabídnuté možnosti řešení

Editoval RenatMagadiev (25. 8. 2014 20:34)