Skip to content

Commit 0602afa

Browse files
committed
test original sql
1 parent 81c0e20 commit 0602afa

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

sqlmesh/core/model/definition.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2297,6 +2297,7 @@ def load_sql_based_model(
22972297
variables=variables,
22982298
inline_audits=inline_audits,
22992299
blueprint_variables=blueprint_variables,
2300+
use_original_sql=True,
23002301
**meta_fields,
23012302
)
23022303

@@ -2519,6 +2520,7 @@ def _create_model(
25192520
signal_definitions: t.Optional[SignalRegistry] = None,
25202521
variables: t.Optional[t.Dict[str, t.Any]] = None,
25212522
blueprint_variables: t.Optional[t.Dict[str, t.Any]] = None,
2523+
use_original_sql: bool = False,
25222524
**kwargs: t.Any,
25232525
) -> Model:
25242526
validate_extra_and_required_fields(
@@ -2555,7 +2557,7 @@ def _create_model(
25552557
if "query" in kwargs:
25562558
statements.append(kwargs["query"])
25572559
kwargs["query"] = ParsableSql.from_parsed_expression(
2558-
kwargs["query"], dialect, use_meta_sql=True
2560+
kwargs["query"], dialect, use_meta_sql=use_original_sql
25592561
)
25602562

25612563
# Merge default statements with model-specific statements
@@ -2569,7 +2571,7 @@ def _create_model(
25692571
is_metadata = statement_field == "on_virtual_update"
25702572
statements.extend((stmt, is_metadata) for stmt in kwargs[statement_field])
25712573
kwargs[statement_field] = [
2572-
ParsableSql.from_parsed_expression(stmt, dialect, use_meta_sql=True)
2574+
ParsableSql.from_parsed_expression(stmt, dialect, use_meta_sql=use_original_sql)
25732575
for stmt in kwargs[statement_field]
25742576
]
25752577

tests/core/test_model.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11471,3 +11471,46 @@ def test_raw_jinja_raw_tag():
1147111471

1147211472
model = load_sql_based_model(expressions)
1147311473
assert model.render_query().sql() == "SELECT '{{ foo }}' AS \"col\""
11474+
11475+
11476+
def test_use_original_sql():
11477+
expressions = d.parse(
11478+
"""
11479+
MODEL (name test);
11480+
11481+
CREATE TABLE pre (
11482+
a INT
11483+
);
11484+
11485+
SELECT
11486+
1,
11487+
2;
11488+
11489+
CREATE TABLE post (
11490+
b INT
11491+
);
11492+
"""
11493+
)
11494+
11495+
model = load_sql_based_model(expressions)
11496+
assert model.query_.sql == "SELECT\n 1,\n 2"
11497+
assert model.pre_statements_[0].sql == "CREATE TABLE pre (\n a INT\n )"
11498+
assert model.post_statements_[0].sql == "CREATE TABLE post (\n b INT\n );"
11499+
11500+
# Now manually create the model and make sure that the original SQL is not used
11501+
model_query = d.parse_one("SELECT 1 AS one")
11502+
assert model_query.meta["sql"] == "SELECT 1 AS one"
11503+
model_query = model_query.select("2 AS two")
11504+
11505+
pre_statements = [d.parse_one("CREATE TABLE pre (\n a INT\n )")]
11506+
post_statements = [d.parse_one("CREATE TABLE post (\n b INT\n );")]
11507+
11508+
model = create_sql_model(
11509+
"test",
11510+
model_query,
11511+
pre_statements=pre_statements,
11512+
post_statements=post_statements,
11513+
)
11514+
assert model.query_.sql == "SELECT 1 AS one, 2 AS two"
11515+
assert model.pre_statements_[0].sql == "CREATE TABLE pre (a INT)"
11516+
assert model.post_statements_[0].sql == "CREATE TABLE post (b INT)"

0 commit comments

Comments
 (0)