At the moment the alias registry is global for the whole query.  I propose
that we should scope this by "query spec" (combined with parent).  The
reason being that reusing the same alias in unrelated subqueries is
perfectly fine.

select ...
from Customer c
where c.id in (
    select o.customer.id
    from Order o
    ...
)
or c.id in (
    select c1.id
    from Outstanding o
    ...
)

Here the aliases `o` don't ever infringe on each other.  So imo we should
allow that.

The piece about checking the parent is for a case like:
select ...
from Customer c
where c.id in (
    select c.id
    from Order o
        join o.customer c
    ...
)

Here the aliases `c` do infringe.  In the subquery, we don't really know
which reference the `c` alias should resolve to.  We *could* here assuming
that the subquery is uncorrelated.  Bu without this rule we really would
not know that the subquery is correlated.  Hopefully that makes sense, what
I am getting at.

WDYT?
_______________________________________________
hibernate-dev mailing list
hibernate-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/hibernate-dev

Reply via email to