Skip to content

Commit f638796

Browse files
[core] feat: add support for overwriting columns in built-in reports
1 parent 68a39c3 commit f638796

File tree

4 files changed

+37
-17
lines changed

4 files changed

+37
-17
lines changed

libs/core/garf_core/query_editor.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -227,13 +227,6 @@ def macros(self) -> QueryParameters:
227227

228228
def generate(self) -> BaseQueryElements:
229229
self.remove_comments().expand().extract_resource_name()
230-
if self.query.resource_name.startswith('builtin'):
231-
return BaseQueryElements(
232-
title=self.query.resource_name.replace('builtin.', ''),
233-
text=self.query.text,
234-
resource_name=self.query.resource_name,
235-
is_builtin_query=True,
236-
)
237230
(
238231
self.remove_trailing_comma()
239232
.extract_fields()
@@ -243,6 +236,9 @@ def generate(self) -> BaseQueryElements:
243236
.extract_virtual_columns()
244237
.extract_customizers()
245238
)
239+
if self.query.resource_name.startswith('builtin'):
240+
self.query.title = self.query.resource_name.replace('builtin.', '')
241+
self.query.is_builtin_query = True
246242
return self.query
247243

248244
def expand(self) -> Self:
@@ -366,6 +362,8 @@ def _extract_query_lines(self) -> Generator[str, None, None]:
366362
r'\bSELECT\b|FROM .*', '', self.text, flags=re.IGNORECASE
367363
).split(',')
368364
for row in selected_rows:
365+
if row.strip() == '*':
366+
return
369367
if non_empty_row := row.strip():
370368
yield non_empty_row
371369

libs/core/garf_core/report_fetcher.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,10 @@ def fetch(
166166
raise query_editor.GarfBuiltInQueryError(
167167
f'Cannot find the built-in query "{query.title}"'
168168
)
169-
return builtin_report(self, **kwargs)
169+
rep = builtin_report(self, **kwargs)
170+
if columns := query.column_names:
171+
rep.column_names = columns
172+
return rep
170173

171174
if self.enable_cache:
172175
try:

libs/core/tests/unit/test_query_editor.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,17 +128,28 @@ def test_generate_raises_error_on_missing_column_names(self):
128128
):
129129
test_query_spec.generate()
130130

131-
def test_generate_returns_builtin_query(self):
132-
query = 'SELECT test FROM builtin.test'
131+
@pytest.mark.parametrize(
132+
('select', 'expect_fields', 'expect_columns'),
133+
[
134+
('*', [], []),
135+
('test', ['test'], ['test']),
136+
('test AS new_test', ['test'], ['new_test']),
137+
],
138+
)
139+
def test_generate_returns_builtin_query(
140+
self, select, expect_fields, expect_columns
141+
):
142+
query = f'SELECT {select} FROM builtin.test'
133143
test_query_spec = query_editor.QuerySpecification(text=query, title='test')
134144
test_query_spec.generate()
135145
expected_query_elements = query_editor.BaseQueryElements(
136146
title='test',
137147
text=query,
148+
fields=expect_fields,
149+
column_names=expect_columns,
138150
resource_name='builtin.test',
139151
is_builtin_query=True,
140152
)
141-
142153
assert test_query_spec.query == expected_query_elements
143154

144155
def test_generate_returns_macros(self):

libs/core/tests/unit/test_report_fetcher.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,20 +105,28 @@ def test_fetch_returns_empty_report_for_empty_api_response(self):
105105

106106
assert not test_report
107107

108+
@pytest.mark.parametrize(
109+
('select', 'expect'),
110+
[
111+
('*', 'test'),
112+
('test', 'test'),
113+
('test AS new_test', 'new_test'),
114+
],
115+
)
108116
def test_fetch_builtin_query_returns_correct_builtin_report(
109-
self, test_dict_report_fetcher
117+
self, test_dict_report_fetcher, select, expect
110118
):
111119
test_report = report.GarfReport(results=[[1]], column_names=['test'])
112120

113-
def test_builtin_query(report_fetcher):
121+
def builtin_query(report_fetcher):
114122
return test_report
115123

116-
test_dict_report_fetcher.add_builtin_queries({'test': test_builtin_query})
124+
test_dict_report_fetcher.add_builtin_queries({'test': builtin_query})
117125

118-
query = 'SELECT test FROM builtin.test'
126+
query = f'SELECT {select} FROM builtin.test'
119127
fetched_report = test_dict_report_fetcher.fetch(query)
120-
121-
assert fetched_report == test_report
128+
expected_report = report.GarfReport(results=[[1]], column_names=[expect])
129+
assert fetched_report == expected_report
122130

123131
def test_fetch_parses_virtual_columns(self, test_dict_report_fetcher):
124132
query = """

0 commit comments

Comments
 (0)