#1 24. 2. 2010 7:22

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 4249
Web

Konfigurační direktivy pro ‚result`: `detectTypes‘ a `formatDateTime` (a BC break)

Přidal jsem do dibi dvě nové konfigurační direktivy v poli result:

detectTypes – aktivuje automatické detekce typů po každém databázovém dotazu. Tj. automaticky se volá $res->detectTypes().

formatDateTime (resultDateTime) – určuje formát, do jakého se bude převádět typ DATE nebo DATETIME. Výchozí je objekt DateTime! Podrobněji viz níže.

resultWithTables odstraněno (pokud to někdo používáte, dejte vědět, klidně vrátím zpět.)

Direktivy nastavíte při volání metody dibi::connect(...) nebo new DibiConnection(...).


Pokud pracujete s datovými typy, mohou se vás dotknout tyto zpětně nekompatibilní změny. Nastavení formátu skrze result.formatDateTime totiž nahrazuje parametr $format používaný u metod DibiResult::setType() nebo convert() a ten je nyní ignorován.

Dále výchozím „formátem“ je objekt DateTime. Pokud byste chtěli, aby výchozí formát byl UNIX timestamp jako v předchozích verzích, nastavte result.formatDateTime => 'U'. Pokud získanou hodnotu používáte v šablonách Nette, není potřeba nic měnit, Nette si rozumí s DateTime stejně jako s timestampem.

Interní metoda setTypes pracuje s jinou strukturou pole, jednodušší, tvořenou páry field ⇒ formát. Stejnou strukturu je potřeba použít u DibiTableX::$types. Interní metoda convert() je protected.


Možná se to zdá jako hodně změn, ale jde o okrajové oblasti, které se dotknou jen minima uživatelů. Kdyby jste narazili na nějaké komplikace, dejte vědět.

Offline

 

#2 7. 4. 2010 12:56

theo
Člen
Místo: Rožnov pod Radhoštěm
Registrovaný: 30. 7. 2009
Příspěvky: 20
Web

Re: Konfigurační direktivy pro ‚result`: `detectTypes‘ a `formatDateTime` (a BC break)

Přimlouvám se za to doplnit ještě resultDateFormat a resultTimeFormat, protože takhle dibi převádí všechno na DateTime, což u některých komponent (a nejen tam) může způsobovat problémy (když očekávám čas a chci ho parsovat jako čas, tak se mi nehodí část s datem (kterou DateTime doplní i když v databázi třeba není)).


I come to see with eyes uncloaded by hate.

Offline

 

#3 6. 5. 2010 19:15

Jan Tvrdík
Nette guru
Místo: Prostějov
Registrovaný: 13. 4. 2008
Příspěvky: 637
Web

Re: Konfigurační direktivy pro ‚result`: `detectTypes‘ a `formatDateTime` (a BC break)

Nemohl bys přidat podporu pro vlastní konvertní funkce? Metoda convert je sice nově protected, ale to je v praxi na nic, protože i když vytvořím potomka, který chování této funkce upraví, tak dibi bude pořád vracet původní DibiResult.

Offline

 

#4 20. 5. 2010 16:19

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 4249
Web

Re: Konfigurační direktivy pro ‚result`: `detectTypes‘ a `formatDateTime` (a BC break)

V poslední verzi lze konfigurovat tímto způsobem i profiler. Raději jsem proto konfigurační direktivy vyčlenil do samostatných polí, takže konfig může vypadat třeba takto:

dibi::connect(array(
        'driver' => 'mysql',
        'user' => 'root',
        'result' => array(
                'detectTypes' => TRUE,
                'formatDateTime' => ...,
        ),
        'profiler' => array(
                'run' => TRUE,
                'explain' => FALSE,
        ),
);

Samozřejmě předchozí formát je podporován.

Offline

 

Zápatí