memgraph/docs/dev/query/contents.md
Teon Banek b01cbe12b3 Add class diagram for Intepreter to docs
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
2019-02-18 10:31:55 +01:00

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:

  1. Lexical Analysis (Tokenization)
  2. Syntactic Analysis (Parsing)
  3. Semantic Analysis and Symbol Generation
  4. Logical Planning
  5. 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.

Intepreter Class Diagram