From 4d2a83c556c442ae73d473692cd69b29851f9425 Mon Sep 17 00:00:00 2001 From: Sreejith Madhavan <34316602+srjonemed@users.noreply.github.com> Date: Sun, 13 Nov 2022 07:41:25 -0800 Subject: [PATCH] Add flyway variables support via placeholder templater (#4026) * adding new style for supporting flyway placeholder variables in sql * add fixture for flyway style placeholder templating * adding placeholder test for flyway_var style * mandate flyway_var pattern be enclosed in curly brakcets always * adding test__config__load_placeholder_cfg Co-authored-by: Barry Hart --- src/sqlfluff/core/config.py | 2 +- src/sqlfluff/core/templaters/placeholder.py | 2 ++ test/core/config_test.py | 22 +++++++++++++++++++ test/core/templaters/placeholder_test.py | 18 +++++++++++++++ .../config/placeholder/.sqlfluff-placeholder | 10 +++++++++ .../placeholder_flyway_var_a.sql | 5 +++++ 6 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/config/placeholder/.sqlfluff-placeholder create mode 100644 test/fixtures/templater/placeholder_flyway_var/placeholder_flyway_var_a.sql diff --git a/src/sqlfluff/core/config.py b/src/sqlfluff/core/config.py index 1b7a5152da5..8d8ee2fa3ed 100644 --- a/src/sqlfluff/core/config.py +++ b/src/sqlfluff/core/config.py @@ -302,7 +302,7 @@ def _get_config_elems_from_file(cls, fpath: str) -> List[ConfigElemType]: # Disable interpolation so we can load macros kw: Dict = {} kw["interpolation"] = None - config = configparser.ConfigParser(**kw) + config = configparser.ConfigParser(delimiters="=", **kw) # NB: We want to be case sensitive in how we read from files, # because jinja is also case sensitive. To do this we override # the optionxform attribute. diff --git a/src/sqlfluff/core/templaters/placeholder.py b/src/sqlfluff/core/templaters/placeholder.py index 8627e4bf576..e24067a9df4 100644 --- a/src/sqlfluff/core/templaters/placeholder.py +++ b/src/sqlfluff/core/templaters/placeholder.py @@ -35,6 +35,8 @@ "dollar": regex.compile( r"(?[\w_]+)}?", regex.UNICODE ), + # e.g. USE ${flyway:database}.schema_name; + "flyway_var": regex.compile(r"\${(?P\w+[:\w_]+)}", regex.UNICODE), # e.g. WHERE bla = ? "question_mark": regex.compile(r"(?