Skip to content

Commit f019636

Browse files
feat(explore): Adds caseInsensitive param to explore saved queries serializer (#105169)
Allows saving `caseInsensitive` on the explore saved query `query` object
1 parent b80df71 commit f019636

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

src/sentry/explore/endpoints/serializers.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ class QuerySerializer(serializers.Serializer):
131131
allow_null=True,
132132
help_text="The metric configuration (only used for metrics dataset).",
133133
)
134+
caseInsensitive = serializers.BooleanField(
135+
required=False,
136+
default=False,
137+
help_text="Whether the query should be case insensitive.",
138+
)
134139

135140

136141
class ExploreSavedQuerySerializer(serializers.Serializer):
@@ -200,6 +205,7 @@ def validate(self, data):
200205
"aggregateField",
201206
"aggregateOrderby",
202207
"metric",
208+
"caseInsensitive",
203209
]
204210

205211
for key in query_keys:

tests/sentry/explore/endpoints/test_explore_saved_queries.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def test_get(self) -> None:
5858
assert "range" not in response.data[0]
5959
assert response.data[0]["query"] == [
6060
{
61+
"caseInsensitive": False,
6162
"fields": [
6263
"id",
6364
"span.op",
@@ -618,6 +619,7 @@ def test_post_success(self) -> None:
618619
assert data["environment"] == ["dev"]
619620
assert data["query"] == [
620621
{
622+
"caseInsensitive": False,
621623
"fields": ["span.op", "count(span.duration)"],
622624
"mode": "samples",
623625
"query": "span.op:pageload",
@@ -1139,6 +1141,7 @@ def test_post_metrics_dataset_with_metric_field(self) -> None:
11391141
assert data["dataset"] == "metrics"
11401142
assert data["query"] == [
11411143
{
1144+
"caseInsensitive": False,
11421145
"fields": ["count()"],
11431146
"mode": "aggregate",
11441147
"metric": {
@@ -1175,6 +1178,7 @@ def test_post_metrics_dataset_with_metric_field_and_unit(self) -> None:
11751178
assert data["dataset"] == "metrics"
11761179
assert data["query"] == [
11771180
{
1181+
"caseInsensitive": False,
11781182
"fields": ["avg()"],
11791183
"mode": "aggregate",
11801184
"metric": {
@@ -1287,3 +1291,25 @@ def test_save_with_start_and_end_time(self) -> None:
12871291
data = response.data
12881292
assert data["start"] is not None
12891293
assert data["end"] is not None
1294+
1295+
def test_save_with_case_insensitive(self) -> None:
1296+
with self.feature(self.features):
1297+
response = self.client.post(
1298+
self.url,
1299+
{
1300+
"name": "Case insensitive query",
1301+
"projects": self.project_ids,
1302+
"dataset": "spans",
1303+
"query": [
1304+
{
1305+
"fields": ["span.op"],
1306+
"mode": "samples",
1307+
"caseInsensitive": 1,
1308+
}
1309+
],
1310+
"range": "24h",
1311+
},
1312+
)
1313+
assert response.status_code == 201, response.content
1314+
data = response.data
1315+
assert data["query"][0]["caseInsensitive"] is True

tests/sentry/explore/endpoints/test_explore_saved_query_detail.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def test_put(self) -> None:
144144
{
145145
"name": "New query",
146146
"projects": self.project_ids,
147-
"query": [{"fields": [], "mode": "samples"}],
147+
"query": [{"caseInsensitive": False, "fields": [], "mode": "samples"}],
148148
"range": "24h",
149149
"orderby": "-timestamp",
150150
},
@@ -153,7 +153,9 @@ def test_put(self) -> None:
153153
assert response.status_code == 200, response.content
154154
assert response.data["id"] == str(self.query_id)
155155
assert set(response.data["projects"]) == set(self.project_ids)
156-
assert response.data["query"] == [{"fields": [], "mode": "samples"}]
156+
assert response.data["query"] == [
157+
{"caseInsensitive": False, "fields": [], "mode": "samples"}
158+
]
157159

158160
def test_put_with_interval(self) -> None:
159161
with self.feature(self.feature_name):
@@ -176,7 +178,11 @@ def test_put_with_interval(self) -> None:
176178
assert response.status_code == 200, response.content
177179
assert response.data["interval"] == "10m"
178180
assert response.data["query"] == [
179-
{"fields": ["span.op", "count(span.duration)"], "mode": "samples"}
181+
{
182+
"caseInsensitive": False,
183+
"fields": ["span.op", "count(span.duration)"],
184+
"mode": "samples",
185+
}
180186
]
181187

182188
def test_put_query_without_access(self) -> None:

0 commit comments

Comments
 (0)