I took a second look. The first problem is indeed fixed. The second problem is not a new dal issue. It is just that aliased tables in INNER JOINs never worked well. I will continue to look into it. This may take a while so could you open a ticket on google code? Thanks.
On Dec 22, 2:52 am, HaM <[email protected]> wrote: > Ok in order to simplify the problem I have changed my code to this: > Domain = db.domain > Client = db.client > Manager = db.contact.with_alias('manager') > > sql = db((Domain.id==1)&(Client.id==Domain.client_id))._select( > Domain.name, Client.name, Manager.name, > left=[Manager.on(Manager.id==Client.manager_id)]) > print sql > > The result is: > SELECT domain.name, client.name, contact.name FROM domain, client, > contact LEFT JOIN contact AS manager ON (contact.id = > client.manager_id) WHERE ((domain.id = 1) AND (client.id = > domain.client_id)); > > And this request is not correct for PostgreSQL. I think that it should > be : > SELECT domain.name, client.name, manager.name FROM domain, client > LEFT JOIN contact as manager ON (manager.id = client.manager_id) WHERE > ((domain.id = 1) AND (client.id = domain.client_id)); > > Which works well. > > In order to push research further I also tried to do only INNER JOIN > with an aliased table and it partially works: > Domain = db.domain > Client = db.client > Manager = db.contact.with_alias('manager') > sql = db((Domain.id==1)& > (Client.id==Domain.client_id)& > (Manager.id==Client.manager_id))._select( > Domain.name, Client.name, Manager.name) > print sql > > Result: > SELECT domain.name, client.name, contact.name FROM domain, client, > contact WHERE (((domain.id = 1) AND (client.id = domain.client_id)) > AND (contact.id = client.manager_id)); > > It works but it doesn't use the alias name for the table contact. Thus > the resulting dict() doesn't contains the key "manager" but the key > "contact". > > Thank you for investigating this problem so quickly. > > On Dec 21, 10:57 pm, mdipierro <[email protected]> wrote: > > > hmm... > > > I am trying your select and it now generates the same sql as the old > > dal. please try this: > > > Domain = db.domain > > Client = db.client > > Manager = db.contact.with_alias('manager') > > sql = db(Domain.id==1)._select( > > Domain.ALL, Client.ALL,Manager.ALL, > > left=[Client.on(Client.id==Domain.client_id), > > Manager.on(Manager.id==Client.manager_id)]) > > print sql > > > what do you get? > > I get > > > SELECT domain.id, domain.name, domain.client_id, client.id, > > client.name, client.manager_id, manager.id, manager.name FROM domain > > LEFT JOIN client ON (client.id = domain.client_id) LEFT JOIN contact > > AS manager ON (manager.id = client.manager_id) WHERE (domain.id = 1); > > > On Dec 21, 2:55 pm, HaM <[email protected]> wrote: > > > > I just tried with the last revision (1414:da25156addab) and the > > > problem stills the same. > >

