Skip to content

Commit a9d2ce5

Browse files
authored
Merge pull request #23 from DeepLcom/revert-21-use-sqlglot-for-ref-replace
Revert "Use sqlglot to replace table reference"
2 parents b9c4225 + 1a9862c commit a9d2ce5

File tree

2 files changed

+9
-19
lines changed

2 files changed

+9
-19
lines changed

src/sql_mock/table_mocks.py

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import sqlglot
55
from jinja2 import Template
66
from pydantic import BaseModel, ConfigDict, SkipValidation
7-
from sqlglot.expressions import replace_tables
87

98
from sql_mock.column_mocks import ColumnMock
109
from sql_mock.constants import NO_INPUT
@@ -15,18 +14,18 @@ def get_keys_from_list_of_dicts(data: list[dict]) -> set[str]:
1514
return set(key for dictionary in data for key in dictionary.keys())
1615

1716

18-
def replace_original_table_references(query: str, mock_tables: list["BaseMockTable"], dialect: str = None):
17+
def replace_original_table_references(query: str, mock_tables: list["BaseMockTable"]):
1918
"""
2019
Replace orignal table references to point them to the mocked data
2120
2221
Args:
2322
query (str): Original SQL query
2423
mock_tables (list[BaseMockTable]): List of BaseMockTable instances that are used as input
2524
"""
26-
ast = sqlglot.parse_one(query)
27-
mapping = {mock_table._sql_mock_meta.table_ref: mock_table.cte_name for mock_table in mock_tables}
28-
res = replace_tables(expression=ast, mapping=mapping, dialect=dialect).sql()
29-
return res
25+
for mock_table in mock_tables:
26+
new_reference = mock_table._sql_mock_meta.table_ref.replace(".", "__")
27+
query = query.replace(mock_table._sql_mock_meta.table_ref, new_reference)
28+
return query
3029

3130

3231
def select_from_cte(query: str, cte_name: str, sql_dialect: str):
@@ -211,12 +210,6 @@ def from_mocks(
211210

212211
return instance
213212

214-
@property
215-
def cte_name(self):
216-
mock_meta = self._sql_mock_meta
217-
if getattr(mock_meta, "table_ref", None):
218-
return self._sql_mock_meta.table_ref.replace(".", "__")
219-
220213
def _generate_input_data_cte_snippet(self):
221214
# Convert instances into SQL snippets that serve as input to a CTE
222215
table_ctes = [mock_table.as_sql_input() for mock_table in self._sql_mock_data.input_data]
@@ -256,9 +249,7 @@ def _generate_query(
256249
final_columns_to_select=indent(final_columns_to_select, "\t"),
257250
)
258251

259-
query = replace_original_table_references(
260-
query, mock_tables=self._sql_mock_data.input_data, dialect=self._sql_dialect
261-
)
252+
query = replace_original_table_references(query, mock_tables=self._sql_mock_data.input_data)
262253
# Store last query for debugging
263254
self._sql_mock_data.last_query = query
264255
return query

tests/test_table_mocks/test_generate_query.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ def test_replace_original_table_references_when_reference_exists():
3030
"""...then the original table reference should be replaced with the mocked table reference"""
3131
query = f"SELECT * FROM {MockTestTable._sql_mock_meta.table_ref}"
3232
mock_tables = [MockTestTable()]
33-
# Note that sqlglot will add a comment with the original table name at the end
34-
expected = "SELECT * FROM data__mock_test_table /* data.mock_test_table */"
33+
expected = "SELECT * FROM data__mock_test_table"
3534
assert expected == replace_original_table_references(query, mock_tables)
3635

3736

@@ -136,7 +135,7 @@ def test_generate_query_no_cte_provided(mocker):
136135
# Asserts
137136
mocked_select_from_cte.assert_not_called()
138137
mocked_replace_original_table_references.assert_called_once_with(
139-
expected_query_template_result, mock_tables=[mock_table_instance], dialect=mock_table_instance._sql_dialect
138+
expected_query_template_result, mock_tables=[mock_table_instance]
140139
)
141140
# The final query should be equal to whatever is returned by `replace_original_table_references`
142141
assert query == mocked_replace_original_table_references.return_value
@@ -182,7 +181,7 @@ def test_generate_query_cte_provided(mocker):
182181
original_query, cte_to_select, sql_dialect=MockTestTable._sql_dialect
183182
)
184183
mocked_replace_original_table_references.assert_called_once_with(
185-
expected_query_template_result, mock_tables=[mock_table_instance], dialect=mock_table_instance._sql_dialect
184+
expected_query_template_result, mock_tables=[mock_table_instance]
186185
)
187186
# The final query should be equal to whatever is returned by `replace_original_table_references`
188187
assert query == mocked_replace_original_table_references.return_value

0 commit comments

Comments
 (0)