diff --git a/src/sentry/search/events/builder.py b/src/sentry/search/events/builder.py index 70b6c6680f20af..a28bb76ba34d83 100644 --- a/src/sentry/search/events/builder.py +++ b/src/sentry/search/events/builder.py @@ -29,6 +29,7 @@ def __init__( auto_aggregations: bool = False, use_aggregate_conditions: bool = False, functions_acl: Optional[List[str]] = None, + array_join: Optional[str] = None, limit: Optional[int] = 50, offset: Optional[int] = 0, limitby: Optional[Tuple[str, int]] = None, @@ -52,6 +53,7 @@ def __init__( self.columns = self.resolve_select(selected_columns, equations) self.orderby = self.resolve_orderby(orderby) + self.array_join = None if array_join is None else self.resolve_column(array_join) def resolve_limitby(self, limitby: Optional[Tuple[str, int]]) -> Optional[LimitBy]: if limitby is None: @@ -122,6 +124,7 @@ def get_snql_query(self) -> Query: dataset=self.dataset.value, match=Entity(self.dataset.value), select=self.columns, + array_join=self.array_join, where=self.where, having=self.having, groupby=self.groupby, diff --git a/tests/sentry/search/events/test_builder.py b/tests/sentry/search/events/test_builder.py index ffcd0108a2e960..e27c4ee9df1422 100644 --- a/tests/sentry/search/events/test_builder.py +++ b/tests/sentry/search/events/test_builder.py @@ -434,3 +434,24 @@ def test_spans_columns(self): ), ], ) + + def test_array_join_clause(self): + query = QueryBuilder( + Dataset.Discover, + self.params, + "", + selected_columns=[ + "spans_op", + "count()", + ], + array_join="spans_op", + ) + self.assertCountEqual( + query.columns, + [ + AliasedExpression(Column("spans.op"), "spans_op"), + Function("count", [], "count"), + ], + ) + assert query.array_join == Column("spans.op") + query.get_snql_query().validate()