Nette\Database – select(‚sloupec AS alias‘)
- nanuqcz
- Člen | 822
Příkaz
$this->database->table('prispevky')->select('count(id) as pocet')->fetch();
Vygeneruje SQL dotaz
SELECT count(id) `as` `pocet`
FROM `prispevky`
(klíčové slovo as
je špatně escapované)
Viz toto vlákno.
Editoval xxxObiWan (19. 1. 2012 23:34)
- llook
- Člen | 407
Není to bug, Nette/Database bere AS
, nikoli
as
.
Je to v té funkci tryDelimite.
Ten regulár vytáhne ze vstupu všechno, co vypadá jako identifikátor a dál
to zpracuje takto: Pokud jsou všechna písmena velká, pak to pokládá za
klíčové slovo a nechá to na pokoji (AS
⇒ AS
),
pokud ne, ošetří ho jako identifikátor (as
⇒
`as
`).
Tohle podle mě není chyba, ale žádoucí vlastnost. Mimo jiné brání
kolizím mezi klíčovými slovy s názvy sloupců. Můžete psát
$table->select("order, count, release, schema")
aniž byste
museli přemýšlet nad tím, jestli to náhodou nejsou klíčová slova –
nejsou, protože zapsané takto je Nette/Database ošetří. Kdo z vás ještě
syntax error tohoto typu nezažil? MySQL má asi 250 klíčových slov…
Možná by se to mohlo nějak zmínit v dokumentaci.
Editoval llook (20. 1. 2012 13:02)