Nette\Database – select(‚sloupec AS alias‘)

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

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)

rixi
Člen | 109
+
0
-

Pokial sa AS napise velkymi pismenami, tak to ide nastastie bez problemov.

Editoval rixi (20. 1. 2012 9:25)

llook
Člen | 407
+
0
-

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 (ASAS), 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)

Ot@s
Backer | 476
+
0
-

llook napsal(a):

Možná by se to mohlo nějak zmínit v dokumentaci.

Určitě ANO (=zdokumentovat), protože ANSI SQL nic takového nenařizuje. Sám jsem se ohledně tohoto spálil.

Editoval Ot@s (20. 1. 2012 13:26)