Skip to content

EQL Internals

homedirectory edited this page Mar 28, 2024 · 3 revisions

Modifying / Extending EQL

Refer to the javadoc of package ua.com.fielden.platform.eql in platform-dao.

Transformation of EQL expressions

EQL expression (fluent interface)
        |
        | tokenisation
        |
        v
Abstract Model (tokens)
        |
        | stage 0
        |
        v
Abstract Query 1 (AST level 1)
        |
        | stage 1
        |
        v
Abstract Query 2 (AST level 2)
        |
        | stage 2
        |
        v
Abstract Query 3 (AST level 3)
        |
        | stage 3
        |
        v
Transformation result (SQL + information to interpret results)

A fluent interface (EQL progressive interfaces) is currently used to write EQL expressions. The tokenisation stage has the disadvantage of losing some context-sensitive information in the process (TODO need examples). Also, the logic encoding the rules of the language (i.e., its grammar) needs to be synchronised between "tokenisation" and "stage 0" processes. This could be improved by merging these processes into a single one, which would be performed by the implementation of the fluent interface.

Yielding in entity queries

An entity query with a single yield which is either unaliased or targets property id is equivalent to an entity query that selects all entities of that type whose id is contained[^1] in the yielded value.

[^1]: if the yielded value is a scalar, equality is used; in case of a set, membership test is used.

Clone this wiki locally