From 244a05de60c9417daab9528b51788c3d2a00dc5f Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Tue, 17 Jan 2023 11:32:12 +0100 Subject: Adding upstream version 10.5.2. Signed-off-by: Daniel Baumann --- sqlglot/dialects/tsql.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'sqlglot/dialects/tsql.py') diff --git a/sqlglot/dialects/tsql.py b/sqlglot/dialects/tsql.py index 7f0f2d7..465f534 100644 --- a/sqlglot/dialects/tsql.py +++ b/sqlglot/dialects/tsql.py @@ -75,6 +75,20 @@ def _parse_format(args): ) +def _parse_eomonth(args): + date = seq_get(args, 0) + month_lag = seq_get(args, 1) + unit = DATE_DELTA_INTERVAL.get("month") + + if month_lag is None: + return exp.LastDateOfMonth(this=date) + + # Remove month lag argument in parser as its compared with the number of arguments of the resulting class + args.remove(month_lag) + + return exp.LastDateOfMonth(this=exp.DateAdd(this=date, expression=month_lag, unit=unit)) + + def generate_date_delta_with_unit_sql(self, e): func = "DATEADD" if isinstance(e, exp.DateAdd) else "DATEDIFF" return f"{func}({self.format_args(e.text('unit'), e.expression, e.this)})" @@ -256,12 +270,14 @@ class TSQL(Dialect): "DATEDIFF": parse_date_delta(exp.DateDiff, unit_mapping=DATE_DELTA_INTERVAL), "DATENAME": _format_time_lambda(exp.TimeToStr, full_format_mapping=True), "DATEPART": _format_time_lambda(exp.TimeToStr), - "GETDATE": exp.CurrentDate.from_arg_list, + "GETDATE": exp.CurrentTimestamp.from_arg_list, + "SYSDATETIME": exp.CurrentTimestamp.from_arg_list, "IIF": exp.If.from_arg_list, "LEN": exp.Length.from_arg_list, "REPLICATE": exp.Repeat.from_arg_list, "JSON_VALUE": exp.JSONExtractScalar.from_arg_list, "FORMAT": _parse_format, + "EOMONTH": _parse_eomonth, } VAR_LENGTH_DATATYPES = { @@ -271,6 +287,9 @@ class TSQL(Dialect): DataType.Type.NCHAR, } + # https://learn.microsoft.com/en-us/azure/synapse-analytics/sql-data-warehouse/sql-data-warehouse-tables-temporary#create-a-temporary-table + TABLE_PREFIX_TOKENS = {TokenType.HASH} + def _parse_convert(self, strict): to = self._parse_types() self._match(TokenType.COMMA) @@ -323,6 +342,7 @@ class TSQL(Dialect): exp.DateAdd: generate_date_delta_with_unit_sql, exp.DateDiff: generate_date_delta_with_unit_sql, exp.CurrentDate: rename_func("GETDATE"), + exp.CurrentTimestamp: rename_func("GETDATE"), exp.If: rename_func("IIF"), exp.NumberToStr: _format_sql, exp.TimeToStr: _format_sql, -- cgit v1.2.3