Detekcia typu v Nette\Database, nemala by byt presunuta do Driveru?
- edke
- Člen | 198
Ahojte,
aktualne riesim migraciu jedneho projektu na Nette 2.0 (o chvilu) a narazil som na jeden problem. Vyuzivam PostgreSQL a hojne vlastne typy. V nie jednom pripade sa mi ukazalo \Nette\Database\Helpers::detectTypes() ako nepostacujuce riesenie (issue tu http://goo.gl/Y8PlR).
normalizeRow() v driveri sa takmer nepouziva (az na Sqlite2Driver). Nebolo by vhodnejsie, keby sa detekcia typu z tohto statickeho helperu presunula priamo do driveru ? Resp. opacna logika, driver by mohol spatne volat toto univerzalne riesenie, ale v pripade potreby by si mohol driver riesit detekciu tak, ako to vyhovuje konvencii danej databazy.
Aktualny algoritmus v Helpers::detectTypes() nie je idealny, vyhladava sa v native_type retazec, co v istych situaciach moze viest k nespravnemu typu, co moze sposobit poskodenie dat von z (ale horsie, do) databazy, alebo v lepsom pripade Exception.
U mna napriklad enum datatype „timer“ bol detekovany ako date a string bol posunuty dalej do DateTime::__construct(), co samozrejme znamenalo Exception.
Ja by som teda radsej pre postgres vymenoval nativne datatypy, tak ako ich postres definuje a vsetko ostatne by bolo typovane ako string.
PS: ak by bol zaujem (a upravena detekcia typu, presunuta do driveru), pre PostgreSQL rad napisem pull request.