Postgre, tabulky a schemy, v2.0.5 a vyssie
- edke
- Člen | 198
Nette v2.0.5, PHP 5.3.13
Po upgrade na v2.0.5 som narazil na (pre mna) vazny breakage.
V predchadzajucej verzii (3358e6ff) fungovalo toto:
# prelozene do select * from schema.table where id = ?, valid
$context->database->query('select * from schema.table where id = ?', 1);
# prelozene do select * from "schema"."table" where id = ?, valid
$context->database->table('schema.table')->get(1);
Vo verzii 2.0.5:
# prelozene do select * from schema.table where id = ?, valid
$context->database->query('select * from schema.table where id = ?', 1);
# prelozene do select * from "schema.table" where id = ?, invalid
$context->database->table('schema.table')->get(1);
Po kratkom debugovani som nasiel toto:
V predchadzajucej verzii sa v Table\Selection o escapovanie starala funkcia tryDelimite(). Tato sa snazila vo vyraze najst relations, a na tie potom volat delimite driveru, ale samostatne. Tak sa korektne rozdelilo schema.table na 2 volania a korektne bolo escapovane:
"schema"."table".
Zmena prisla commitom a67194c5, kde nastupil novy SqlBuilder. tryDelimite() sa z Table\Selection presunula sem. V konstrukteri sa potom ale uz jej vyuzitie vynechava:
$this->delimitedTable = $this->connection->getSupplementalDriver()->delimite($selection->getName());
Spravne by podla mna mala byt zavolana znovu tryDelimite(), co podla testov vracia spravnu funkcnost:
$this->delimitedTable = $this->tryDelimite($selection->getName());
Bolo by mozne to vratit spat? Mozem spravit pull-request ?
Editoval edke (25. 9. 2012 14:57)
- Ot@s
- Backer | 476
Hrach psal,
že bude SqlBuilder upravovat (nevím, jestli toto bude součást úprav).
Pokud v jedné aplikaci nevyužíváš více schémat současně (resp. nemáš
tam stejné názvy tabulek), šlo by to obejít pomocí inicializačního SQL
SET search_path TO firstschema, secondschema;
.
- edke
- Člen | 198
Ot@s wrote:
Pokud v jedné aplikaci nevyužíváš více schémat současně (resp. nemáš tam stejné názvy tabulek), šlo by to obejít pomocí inicializačního SQL
SET search_path TO firstschema, secondschema;
.
Prave o to ide, schemy vyuzivam na logicke triedenie tabuliek, casto v queries sa potom pouzivaju rozne schemy, pouzitie set search_path teda nevyvovuje velmi. Uz som spravil pull-request, zatial pouzivam moj fork, dufam, ze to bude coskoro mergnute a bude.