summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/dialect.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/dialects/dialect.py')
-rw-r--r--sqlglot/dialects/dialect.py19
1 files changed, 16 insertions, 3 deletions
diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py
index f338c81..0120e71 100644
--- a/sqlglot/dialects/dialect.py
+++ b/sqlglot/dialects/dialect.py
@@ -27,6 +27,7 @@ class Dialects(str, Enum):
STARROCKS = "starrocks"
TABLEAU = "tableau"
TRINO = "trino"
+ TSQL = "tsql"
class _Dialect(type):
@@ -53,7 +54,6 @@ class _Dialect(type):
klass.parser_class = getattr(klass, "Parser", Parser)
klass.generator_class = getattr(klass, "Generator", Generator)
- klass.tokenizer = klass.tokenizer_class()
klass.quote_start, klass.quote_end = list(klass.tokenizer_class._QUOTES.items())[0]
klass.identifier_start, klass.identifier_end = list(klass.tokenizer_class._IDENTIFIERS.items())[0]
@@ -95,7 +95,6 @@ class Dialect(metaclass=_Dialect):
tokenizer_class = None
parser_class = None
generator_class = None
- tokenizer = None
@classmethod
def get_or_raise(cls, dialect):
@@ -138,6 +137,12 @@ class Dialect(metaclass=_Dialect):
def transpile(self, code, **opts):
return self.generate(self.parse(code), **opts)
+ @property
+ def tokenizer(self):
+ if not hasattr(self, "_tokenizer"):
+ self._tokenizer = self.tokenizer_class()
+ return self._tokenizer
+
def parser(self, **opts):
return self.parser_class(
**{
@@ -170,7 +175,15 @@ class Dialect(metaclass=_Dialect):
def rename_func(name):
- return lambda self, expression: f"{name}({csv(*[self.sql(e) for e in expression.args.values()])})"
+ def _rename(self, expression):
+ args = (
+ self.expressions(expression, flat=True)
+ if isinstance(expression, exp.Func) and expression.is_var_len_args
+ else csv(*[self.sql(e) for e in expression.args.values()])
+ )
+ return f"{name}({args})"
+
+ return _rename
def approx_count_distinct_sql(self, expression):