Skip to content

Commit 18277c2

Browse files
fix: add model prop comments closes #2533 (#2537)
* fix: add model prop comments closes #2533 * Refactor --------- Co-authored-by: George Sittas <giwrgos.sittas@gmail.com>
1 parent 662794f commit 18277c2

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

sqlmesh/core/dialect.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -501,7 +501,7 @@ def parse(self: Parser) -> t.Optional[exp.Expression]:
501501

502502
expressions.append(self.expression(exp.Property, this=key, value=value))
503503

504-
if not self._match(TokenType.COMMA):
504+
if not self._match(TokenType.COMMA, expression=expressions[-1]):
505505
break
506506

507507
return self.expression(parser_type, expressions=expressions)
@@ -516,17 +516,26 @@ def parse(self: Parser) -> t.Optional[exp.Expression]:
516516
}
517517

518518

519+
def _props_sql(self: Generator, expressions: t.List[exp.Expression]) -> str:
520+
props = []
521+
size = len(expressions)
522+
523+
for i, prop in enumerate(expressions):
524+
sql = self.indent(f"{prop.name} {self.sql(prop, 'value')}")
525+
526+
if i < size - 1:
527+
sql += ","
528+
props.append(self.maybe_comment(sql, expression=prop))
529+
530+
return "\n".join(props)
531+
532+
519533
def _sqlmesh_ddl_sql(self: Generator, expression: Model | Audit | Metric, name: str) -> str:
520-
props = ",\n".join(
521-
self.indent(f"{prop.name} {self.sql(prop, 'value')}") for prop in expression.expressions
522-
)
523-
return "\n".join([f"{name} (", props, ")"])
534+
return "\n".join([f"{name} (", _props_sql(self, expression.expressions), ")"])
524535

525536

526537
def _model_kind_sql(self: Generator, expression: ModelKind) -> str:
527-
props = ",\n".join(
528-
self.indent(f"{prop.this} {self.sql(prop, 'value')}") for prop in expression.expressions
529-
)
538+
props = _props_sql(self, expression.expressions)
530539
if props:
531540
return "\n".join([f"{expression.this} (", props, ")"])
532541
return expression.name.upper()

tests/core/test_dialect.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ def test_format_model_expressions():
2020
parse(
2121
"""
2222
MODEL(
23-
name a.b,
24-
kind full,
23+
name a.b, -- a
24+
kind full, -- b
2525
references (
2626
a,
2727
(b, c) as d,
28-
),
28+
), -- c
2929
audits [
3030
not_null(columns=[
3131
foo_id,
@@ -83,9 +83,9 @@ def test_format_model_expressions():
8383
assert (
8484
x
8585
== """MODEL (
86-
name a.b,
87-
kind FULL,
88-
references (a, (b, c) AS d),
86+
name a.b, /* a */
87+
kind FULL, /* b */
88+
references (a, (b, c) AS d), /* c */
8989
audits ARRAY(
9090
NOT_NULL(
9191
columns = ARRAY(
@@ -318,13 +318,21 @@ def test_seed():
318318
"""
319319
MODEL (
320320
kind SEED (
321-
path '..\..\..\data\data.csv',
321+
path '..\..\..\data\data.csv', -- c
322322
),
323323
);
324324
"""
325325
)
326326
assert len(expressions) == 1
327327
assert "../../../data/data.csv" in expressions[0].sql()
328+
assert (
329+
format_model_expressions(expressions)
330+
== """MODEL (
331+
kind SEED (
332+
path '../../../data/data.csv' /* c */
333+
)
334+
)"""
335+
)
328336

329337

330338
def test_select_from_values_for_batch_range_json():

0 commit comments

Comments
 (0)