diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-10-26 17:21:54 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-10-26 17:21:54 +0000 |
commit | c03ba18c491e52cc85d8aae1825dd9e0b4f75e32 (patch) | |
tree | f76d58b50900be4bfd2dc15f0ec38d1a70d8417b /sqlglot/dialects/dialect.py | |
parent | Releasing debian version 18.13.0-1. (diff) | |
download | sqlglot-c03ba18c491e52cc85d8aae1825dd9e0b4f75e32.tar.xz sqlglot-c03ba18c491e52cc85d8aae1825dd9e0b4f75e32.zip |
Merging upstream version 18.17.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/dialect.py')
-rw-r--r-- | sqlglot/dialects/dialect.py | 56 |
1 files changed, 42 insertions, 14 deletions
diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index bd839af..739e8d7 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -10,7 +10,7 @@ from sqlglot.errors import ParseError from sqlglot.generator import Generator from sqlglot.helper import flatten, seq_get from sqlglot.parser import Parser -from sqlglot.time import format_time +from sqlglot.time import TIMEZONES, format_time from sqlglot.tokens import Token, Tokenizer, TokenType from sqlglot.trie import new_trie @@ -595,6 +595,19 @@ def timestamptrunc_sql(self: Generator, expression: exp.TimestampTrunc) -> str: ) +def no_timestamp_sql(self: Generator, expression: exp.Timestamp) -> str: + if not expression.expression: + return self.sql(exp.cast(expression.this, to=exp.DataType.Type.TIMESTAMP)) + if expression.text("expression").lower() in TIMEZONES: + return self.sql( + exp.AtTimeZone( + this=exp.cast(expression.this, to=exp.DataType.Type.TIMESTAMP), + zone=expression.expression, + ) + ) + return self.function_fallback_sql(expression) + + def locate_to_strposition(args: t.List) -> exp.Expression: return exp.StrPosition( this=seq_get(args, 1), substr=seq_get(args, 0), position=seq_get(args, 2) @@ -691,9 +704,13 @@ def ts_or_ds_to_date_sql(dialect: str) -> t.Callable: _dialect = Dialect.get_or_raise(dialect) time_format = self.format_time(expression) if time_format and time_format not in (_dialect.TIME_FORMAT, _dialect.DATE_FORMAT): - return self.sql(exp.cast(str_to_time_sql(self, expression), "date")) - - return self.sql(exp.cast(self.sql(expression, "this"), "date")) + return self.sql( + exp.cast( + exp.StrToTime(this=expression.this, format=expression.args["format"]), + "date", + ) + ) + return self.sql(exp.cast(expression.this, "date")) return _ts_or_ds_to_date_sql @@ -725,7 +742,9 @@ def regexp_extract_sql(self: Generator, expression: exp.RegexpExtract) -> str: def regexp_replace_sql(self: Generator, expression: exp.RegexpReplace) -> str: - bad_args = list(filter(expression.args.get, ("position", "occurrence", "parameters"))) + bad_args = list( + filter(expression.args.get, ("position", "occurrence", "parameters", "modifiers")) + ) if bad_args: self.unsupported(f"REGEXP_REPLACE does not support the following arg(s): {bad_args}") @@ -756,15 +775,6 @@ def pivot_column_names(aggregations: t.List[exp.Expression], dialect: DialectTyp return names -def simplify_literal(expression: E) -> E: - if not isinstance(expression.expression, exp.Literal): - from sqlglot.optimizer.simplify import simplify - - simplify(expression.expression) - - return expression - - def binary_from_function(expr_type: t.Type[B]) -> t.Callable[[t.List], B]: return lambda args: expr_type(this=seq_get(args, 0), expression=seq_get(args, 1)) @@ -804,3 +814,21 @@ def move_insert_cte_sql(self: Generator, expression: exp.Insert) -> str: expression = expression.copy() expression.set("with", expression.expression.args["with"].pop()) return self.insert_sql(expression) + + +def generatedasidentitycolumnconstraint_sql( + self: Generator, expression: exp.GeneratedAsIdentityColumnConstraint +) -> str: + start = self.sql(expression, "start") or "1" + increment = self.sql(expression, "increment") or "1" + return f"IDENTITY({start}, {increment})" + + +def arg_max_or_min_no_count(name: str) -> t.Callable[[Generator, exp.ArgMax | exp.ArgMin], str]: + def _arg_max_or_min_sql(self: Generator, expression: exp.ArgMax | exp.ArgMin) -> str: + if expression.args.get("count"): + self.unsupported(f"Only two arguments are supported in function {name}.") + + return self.func(name, expression.this, expression.expression) + + return _arg_max_or_min_sql |