Bug? Obaleni stringu do ` `

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

Jedna se o bug?

Tento jednoduchy kod vygeneruje

echo $this->getTable()->select("'asdf'")->getSql();

Vygeneruje

SELECT '`asdf`' FROM `table`

Proc tam sakrys jsou ty ` ` ? V drivejsi verzi nedelalo, jedna se o nezadouci chovani a BC break.

Verze 2.0.12 PHP 5.4

prohozeni apostrofu za uvozovky takto funguje ->select("'asdf'") za ->select('"asdf"')

Editoval Lexi (21. 8. 2013 9:19)

sodae
Nette Evangelist | 250
+
0
-

není to bug. Použij Nette\Database\SqlLiteral, jestli tam chceš dát něco napevno. Takto se to chová, že chceš vložit název něčeho (sloupce, tabulky).

echo $this->getTable()->select(new Nette\Database\SqlLiteral("'asdf'"))->getSql();

Editoval sodae (21. 8. 2013 13:22)

jiri.pudil
Nette Blogger | 1032
+
0
-

prohozeni apostrofu za uvozovky takto funguje ->select("'asdf'") za ->select('"asdf"')

To funguje proto, že třeba Postgres escapuje identifikátory právě pomocí double quotes. V MySQL se to sice chová jako string, ale není to úplně korektní a přenositelné řešení.

Editoval jiri.pudil (21. 8. 2013 14:24)

Majkl578
Moderator | 1364
+
0
-

sodae napsal(a):

není to bug.

Pokud to fungovalo, bug (BC break) to je.

Milo
Nette Core | 1283
+
0
-

Opravená chyba není imho BC break.

Majkl578
Moderator | 1364
+
0
-

Milo napsal(a):

Opravená chyba není imho BC break.

I opravená chyba, která rozbije něčí kód IMHO je BC break.

Re4DeR
Člen | 71
+
0
-

Díky za ->getSql() jsem neznal a docela se mi to hodí.

hrach
Člen | 1838
+
0
-

Min. rok se toto nemenilo, takze to BC break neni, respektive fix by byl dalsi BC break. (Kdovi z ceho updatoval… :D) Patricna issue k problemu, ktery zminuje jiri.pudil: https://github.com/…e/issues/819 a moje vetev (zatim bez PR) https://github.com/…e-delimiting