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.
>
>

Reply via email to