Detekcia typu v Nette\Database, nemala by byt presunuta do Driveru?

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

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.

hrach
Člen | 1834
+
0
-

Osobne bych spis upravil detekovani tak, aby proste matchovalo jen zname typy.

David Grudl
Nette Core | 8110
+
0
-

Bylo by to lepší, současné chování je hodně zjednodušující.