|
@@ -810,6 +810,65 @@ class QueryIntegrationTest(SnubaTestCase, TestCase):
|
|
|
assert len(data) == len(expected_events), query_fn
|
|
|
assert [item["error.unhandled"] for item in data] == error_handled
|
|
|
|
|
|
+ def test_array_fields(self):
|
|
|
+ data = load_data("javascript")
|
|
|
+ data["timestamp"] = iso_format(before_now(minutes=10))
|
|
|
+ self.store_event(data=data, project_id=self.project.id)
|
|
|
+
|
|
|
+ expected_filenames = [
|
|
|
+ "../../sentry/scripts/views.js",
|
|
|
+ "../../sentry/scripts/views.js",
|
|
|
+ "../../sentry/scripts/views.js",
|
|
|
+ "raven.js",
|
|
|
+ ]
|
|
|
+
|
|
|
+ queries = [
|
|
|
+ ("", 1),
|
|
|
+ ("stack.filename:*.js", 1),
|
|
|
+ ("stack.filename:*.py", 0),
|
|
|
+ ("has:stack.filename", 1),
|
|
|
+ ("!has:stack.filename", 0),
|
|
|
+ ]
|
|
|
+
|
|
|
+ for query, expected_len in queries:
|
|
|
+ for query_fn, expected_alias in [
|
|
|
+ (discover.query, "stack.filename"),
|
|
|
+ (discover.wip_snql_query, "exception_frames.filename"),
|
|
|
+ ]:
|
|
|
+ result = query_fn(
|
|
|
+ selected_columns=["stack.filename"],
|
|
|
+ query=query,
|
|
|
+ params={
|
|
|
+ "organization_id": self.organization.id,
|
|
|
+ "project_id": [self.project.id],
|
|
|
+ "start": before_now(minutes=12),
|
|
|
+ "end": before_now(minutes=8),
|
|
|
+ },
|
|
|
+ )
|
|
|
+
|
|
|
+ data = result["data"]
|
|
|
+ assert len(data) == expected_len
|
|
|
+ if len(data) == 0:
|
|
|
+ continue
|
|
|
+ assert len(data[0][expected_alias]) == len(expected_filenames)
|
|
|
+ assert sorted(data[0][expected_alias]) == expected_filenames
|
|
|
+
|
|
|
+ result = discover.wip_snql_query(
|
|
|
+ selected_columns=["stack.filename"],
|
|
|
+ query="stack.filename:[raven.js]",
|
|
|
+ params={
|
|
|
+ "organization_id": self.organization.id,
|
|
|
+ "project_id": [self.project.id],
|
|
|
+ "start": before_now(minutes=12),
|
|
|
+ "end": before_now(minutes=8),
|
|
|
+ },
|
|
|
+ )
|
|
|
+
|
|
|
+ data = result["data"]
|
|
|
+ assert len(data) == 1
|
|
|
+ assert len(data[0]["exception_frames.filename"]) == len(expected_filenames)
|
|
|
+ assert sorted(data[0]["exception_frames.filename"]) == expected_filenames
|
|
|
+
|
|
|
def test_field_aliasing_in_selected_columns(self):
|
|
|
result = discover.query(
|
|
|
selected_columns=["project.id", "user", "release", "timestamp.to_hour"],
|