Postgre, tabulky a schemy, v2.0.5 a vyssie

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

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
+
0
-

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
+
0
-

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.