Simple utility that checks if if an AST entity refers to a entity. It traverses through the context types to find out what kind of context a variable refers to. For example, in a query like:
query[Pair].map(p => Pair(p.a, p.b)).distinct.map(p => (p.b, p.a))
Yielding SQL like this:
SELECT p.b, p.a FROM (SELECT DISTINCT p.a, p.b FROM pair p) AS p
the inner p.a and p.b will have a TableContext while the outer p.b and p.a will have a QueryContext.
Note that there are some cases where the id of a field is not in a FromContext at all. For example, in a query like this:
query[Human].filter(h => query[Robot].filter(r => r.friend == h.id).nonEmpty)
Where the sql produced is something like this:
SELECT h.id FROM human h WHERE EXISTS (SELECT r.* FROM robot r WHERE r.friend = h.id)
the field r.friend`` is selected from a sub-query of an SQL operation (i.e.
EXISTS (...)`) so a from-context of it will not exist at all. When deciding which properties to treat as sub-select properties (e.g. if we want to make sure NOT to apply a naming-schema on them) we need to take care to understand that we may not know the FromContext that a property comes from since it may not exist.
Attributes
- Companion
- object
- Graph
-
- Supertypes