The terms and definitions we use in CLASH.

optimization

Term Description
InputRelation Relations that are inputs, i.e., new tuples are created by reading them from external sources.
Intermediate Relation A relation which is created during processing inside Clash.
RelationName The name that relations (` or intermediate) have assigned. They should be unique. Names of InputRelations should coincide with the Alias they get assigned in the query.

query

Term Description
Alias the name of inputs used downstream in the queries. In this case, `a` and `b`. If no alias is specified, the InputName is used as alias; so internally an alias is always defined.
Attribute Attributes of the relations, e.g. `x`, `y`, `q`, `r` and `s`. In order to avoid naming clashes, it is **forbidden** to use attributes without a qualifying alias.
AttributeAccess The pair of alias and attribute, e.g. `('a', 'q')` in the predicate `a.q = 1`.
FilterPredicate A predicate with a single input, e.g. `a.q = 1`. These can be evaluated at ingestion of the inputs or maybe even pushed down into the data sources.
InputName The name of a Input (relation). In the example, `alice` and `bob` are inputs. The system has to know how to get real data from these inputs, which is an orthogonal task to formulating a query.
JoinPredicate A predicate with two inputs, e.g. `a.r = b.s`, here tuples from both relations, `a` and `b` are needed in order to evaluate the predicate