diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-09-07 11:39:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-09-07 11:39:48 +0000 |
commit | f73e9af131151f1e058446361c35b05c4c90bf10 (patch) | |
tree | ed425b89f12d3f5e4709290bdc03d876f365bc97 /sqlglot/dialects/oracle.py | |
parent | Releasing debian version 17.12.0-1. (diff) | |
download | sqlglot-f73e9af131151f1e058446361c35b05c4c90bf10.tar.xz sqlglot-f73e9af131151f1e058446361c35b05c4c90bf10.zip |
Merging upstream version 18.2.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/oracle.py')
-rw-r--r-- | sqlglot/dialects/oracle.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sqlglot/dialects/oracle.py b/sqlglot/dialects/oracle.py index 1f63e9f..279ed31 100644 --- a/sqlglot/dialects/oracle.py +++ b/sqlglot/dialects/oracle.py @@ -8,7 +8,7 @@ from sqlglot.helper import seq_get from sqlglot.tokens import TokenType -def _parse_xml_table(self: parser.Parser) -> exp.XMLTable: +def _parse_xml_table(self: Oracle.Parser) -> exp.XMLTable: this = self._parse_string() passing = None @@ -22,7 +22,7 @@ def _parse_xml_table(self: parser.Parser) -> exp.XMLTable: by_ref = self._match_text_seq("RETURNING", "SEQUENCE", "BY", "REF") if self._match_text_seq("COLUMNS"): - columns = self._parse_csv(lambda: self._parse_column_def(self._parse_field(any_token=True))) + columns = self._parse_csv(self._parse_field_def) return self.expression(exp.XMLTable, this=this, passing=passing, columns=columns, by_ref=by_ref) @@ -78,6 +78,10 @@ class Oracle(Dialect): ) } + # SELECT UNIQUE .. is old-style Oracle syntax for SELECT DISTINCT .. + # Reference: https://stackoverflow.com/a/336455 + DISTINCT_TOKENS = {TokenType.DISTINCT, TokenType.UNIQUE} + def _parse_column(self) -> t.Optional[exp.Expression]: column = super()._parse_column() if column: @@ -129,7 +133,6 @@ class Oracle(Dialect): ), exp.Group: transforms.preprocess([transforms.unalias_group]), exp.ILike: no_ilike_sql, - exp.Coalesce: rename_func("NVL"), exp.Select: transforms.preprocess([transforms.eliminate_distinct_on]), exp.StrToTime: lambda self, e: f"TO_TIMESTAMP({self.sql(e, 'this')}, {self.format_time(e)})", exp.Subquery: lambda self, e: self.subquery_sql(e, sep=" "), @@ -162,7 +165,7 @@ class Oracle(Dialect): return f"XMLTABLE({self.sep('')}{self.indent(this + passing + by_ref + columns)}{self.seg(')', sep='')}" class Tokenizer(tokens.Tokenizer): - VAR_SINGLE_TOKENS = {"@"} + VAR_SINGLE_TOKENS = {"@", "$", "#"} KEYWORDS = { **tokens.Tokenizer.KEYWORDS, |