summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/dialect.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-11 12:46:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-11 12:46:10 +0000
commitd142aecb38fbfd35bf2a0732f5391a807bff3a5e (patch)
treef5430f0e6a127d39c663e958045aa1bbb462c58b /sqlglot/dialects/dialect.py
parentReleasing debian version 15.0.0-1. (diff)
downloadsqlglot-d142aecb38fbfd35bf2a0732f5391a807bff3a5e.tar.xz
sqlglot-d142aecb38fbfd35bf2a0732f5391a807bff3a5e.zip
Merging upstream version 15.2.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/dialect.py')
-rw-r--r--sqlglot/dialects/dialect.py27
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)"