draft(MQL): Parse multi-entity type formulas #5494
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a draft PR for implementing what parsing multi-entity type formulas might look like in snuba.
Depends on:
This change breaks up the parsing pipeline into multiple sub-tasks:
parse_mql_query_body()
: Parses the MQL into theInitialParseResult
treepopulate_query_ast_initial()
: CreatesLogicalQuery | CompositeQuery
objects with the appropriate expressions. If multi-type formula query, calls some processing function (process_table_names_in_selected_expressions()
) which traverses AST and adds the appropriate join table names to the expressions.populate_query_from_mql_context
Parses MQL Context and transforms fields into expressions that inject into the AST. If multi-type formula query, patch the appropriate join table names.To see preview of CompositeQuery AST (with joins), run
pytest tests/query/parser/test_formula_mql_query.py::test_multi_type_formula -s -vv