Skip to content

Commit

Permalink
change to treeify_and_or
Browse files Browse the repository at this point in the history
  • Loading branch information
kylemumma committed Apr 23, 2024
1 parent 24431b2 commit 17a9273
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 4 deletions.
13 changes: 10 additions & 3 deletions snuba/query/conditions.py
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,16 @@ def _combine_conditions(conditions: Sequence[Expression], function: str) -> Expr
if len(conditions) == 1:
return conditions[0]

return binary_condition(
function, conditions[0], _combine_conditions(conditions[1:], function)
)
new_conds: list[Expression] = []
if len(conditions) % 2 == 0:
start = 0
else:
new_conds.append(conditions[0])
start = 1
for i in range(start, len(conditions) - 1, 2):
new_conds.append(binary_condition(function, conditions[i], conditions[i + 1]))

return _combine_conditions(new_conds, function)


CONDITION_MATCH = Or(
Expand Down
31 changes: 30 additions & 1 deletion tests/query/parser/test_mql_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -2751,7 +2751,7 @@ def test_invalid_format_expressions_from_mql(
query, _ = parse_mql_query(query_body, mql_context, generic_metrics)


def test_pushdown_error_query():
def test_pushdown_error_query() -> None:
mql = '((avg(d:transactions/duration@millisecond) * 100.0) * 100.0){transaction:"getsentry.tasks.calculate_spike_projections"}'
context = {
"end": "2024-04-08T06:49:00+00:00",
Expand All @@ -2775,3 +2775,32 @@ def test_pushdown_error_query():
"start": "2024-04-08T05:48:00+00:00",
}
parse_mql_query(mql, context, get_dataset("generic_metrics"))


def test_recursion_error_query() -> None:
conds = " OR ".join([f'transaction:"{e}"' for e in range(5000)])
error_mql = (
f"avg(d:transactions/duration@millisecond) by (transaction){{({conds})}}"
)
context = {
"start": "2024-04-08T05:48:00+00:00",
"end": "2024-04-08T06:49:00+00:00",
"rollup": {
"granularity": 60,
"interval": 60,
"orderby": None,
"with_totals": None,
},
"scope": {
"org_ids": [1],
"project_ids": [1],
"use_case_id": "'transactions'",
},
"indexer_mappings": {
"d:transactions/duration@millisecond": 9223372036854775909,
"transaction": 9223372036854776020,
},
"limit": 10000,
"offset": None,
}
res, _ = parse_mql_query(error_mql, context, get_dataset("generic_metrics"))

0 comments on commit 17a9273

Please sign in to comment.