Summary: This is a short update which should explain the primary entrypoint to query parsing and execution. Reviewers: mtomic, llugovic Reviewed By: mtomic Subscribers: pullbot Differential Revision: https://phabricator.memgraph.io/D1856
1.6 KiB
Query Parsing, Planning and Execution
This part of the documentation deals with query execution.
Memgraph currently supports only query interpretation. Each new query is parsed, analysed and translated into a sequence of operations which are then executed on the main database storage. Query execution is organized into the following phases:
- Lexical Analysis (Tokenization)
- Syntactic Analysis (Parsing)
- Semantic Analysis and Symbol Generation
- Logical Planning
- Logical Plan Execution
The main entry point is Interpreter::operator()
, which takes a query text
string and produces a Results
object. To instantiate the object,
Interpreter
needs to perform the above steps from 1 to 4. If any of the
steps fail, a QueryException
is thrown. The complete LogicalPlan
is
wrapped into a CachedPlan
and stored for reuse. This way we can skip the
whole process of analysing a query if it appears to be the same as before.
When we have valid plan, the client code can invoke Results::PullAll
with a
stream object. The Results
instance will then execute the plan and fill the
stream with the obtained results.
Since we want to optionally run Memgraph as a distributed database, we have
hooks for creating a different plan of logical operators.
DistributedInterpreter
inherits from Interpreter
and overrides
MakeLogicalPlan
method. This method needs to return a concrete instance of
LogicalPlan
, and in case of distributed database that will be
DistributedLogicalPlan
.