diff options
Diffstat (limited to 'sqlglot/dialects/dialect.py')
-rw-r--r-- | sqlglot/dialects/dialect.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/sqlglot/dialects/dialect.py b/sqlglot/dialects/dialect.py index 890a3c3..4958bc6 100644 --- a/sqlglot/dialects/dialect.py +++ b/sqlglot/dialects/dialect.py @@ -104,6 +104,10 @@ class _Dialect(type): klass.byte_start, klass.byte_end = get_start_end(TokenType.BYTE_STRING) klass.raw_start, klass.raw_end = get_start_end(TokenType.RAW_STRING) + klass.tokenizer_class.identifiers_can_start_with_digit = ( + klass.identifiers_can_start_with_digit + ) + return klass @@ -111,6 +115,7 @@ class Dialect(metaclass=_Dialect): index_offset = 0 unnest_column_only = False alias_post_tablesample = False + identifiers_can_start_with_digit = False normalize_functions: t.Optional[str] = "upper" null_ordering = "nulls_are_small" @@ -231,6 +236,7 @@ class Dialect(metaclass=_Dialect): "time_trie": self.inverse_time_trie, "unnest_column_only": self.unnest_column_only, "alias_post_tablesample": self.alias_post_tablesample, + "identifiers_can_start_with_digit": self.identifiers_can_start_with_digit, "normalize_functions": self.normalize_functions, "null_ordering": self.null_ordering, **opts, @@ -443,7 +449,7 @@ def date_trunc_to_time(args: t.List) -> exp.DateTrunc | exp.TimestampTrunc: unit = seq_get(args, 0) this = seq_get(args, 1) - if isinstance(this, exp.Cast) and this.is_type(exp.DataType.Type.DATE): + if isinstance(this, exp.Cast) and this.is_type("date"): return exp.DateTrunc(unit=unit, this=this) return exp.TimestampTrunc(this=this, unit=unit) @@ -468,6 +474,25 @@ def strposition_to_locate_sql(self: Generator, expression: exp.StrPosition) -> s ) +def left_to_substring_sql(self: Generator, expression: exp.Left) -> str: + expression = expression.copy() + return self.sql( + exp.Substring( + this=expression.this, start=exp.Literal.number(1), length=expression.expression + ) + ) + + +def right_to_substring_sql(self: Generator, expression: exp.Left) -> str: + expression = expression.copy() + return self.sql( + exp.Substring( + this=expression.this, + start=exp.Length(this=expression.this) - exp.paren(expression.expression - 1), + ) + ) + + def timestrtotime_sql(self: Generator, expression: exp.TimeStrToTime) -> str: return f"CAST({self.sql(expression, 'this')} AS TIMESTAMP)" |