|
19 | 19 | from sqlmesh.utils.errors import SQLMeshError |
20 | 20 | from sqlmesh.utils.pandas import columns_to_types_from_df |
21 | 21 |
|
| 22 | +SQLMESH_MACRO_PREFIX = "@" |
| 23 | + |
22 | 24 | JSON_TYPE = exp.DataType.build("json") |
23 | 25 |
|
24 | 26 |
|
@@ -147,6 +149,9 @@ def _parse_lambda(self: Parser, alias: bool = False) -> t.Optional[exp.Expressio |
147 | 149 |
|
148 | 150 |
|
149 | 151 | def _parse_macro(self: Parser, keyword_macro: str = "") -> t.Optional[exp.Expression]: |
| 152 | + if self._prev.text != SQLMESH_MACRO_PREFIX: |
| 153 | + return self._parse_parameter() |
| 154 | + |
150 | 155 | index = self._index |
151 | 156 | field = self._parse_primary() or self._parse_function(functions={}) or self._parse_id_var() |
152 | 157 |
|
@@ -330,7 +335,7 @@ def _parse_table_parts(self: Parser, schema: bool = False) -> exp.Table: |
330 | 335 | table = self.__parse_table_parts(schema=schema) # type: ignore |
331 | 336 | table_arg = table.this |
332 | 337 |
|
333 | | - if isinstance(table_arg, exp.Var) and table_arg.name.startswith("@"): |
| 338 | + if isinstance(table_arg, exp.Var) and table_arg.name.startswith(SQLMESH_MACRO_PREFIX): |
334 | 339 | return StagedFilePath(this=MacroVar(this=table_arg.name[1:])) |
335 | 340 |
|
336 | 341 | return table |
@@ -640,7 +645,7 @@ def extend_sqlglot() -> None: |
640 | 645 | generators.add(dialect.Generator) |
641 | 646 |
|
642 | 647 | for tokenizer in tokenizers: |
643 | | - tokenizer.VAR_SINGLE_TOKENS.update("@") |
| 648 | + tokenizer.VAR_SINGLE_TOKENS.update(SQLMESH_MACRO_PREFIX) |
644 | 649 |
|
645 | 650 | for parser in parsers: |
646 | 651 | parser.FUNCTIONS.update({"JINJA": Jinja.from_arg_list, "METRIC": MetricAgg.from_arg_list}) |
|
0 commit comments