diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-03 14:11:07 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-03-03 14:11:07 +0000 |
commit | 42a1548cecf48d18233f56e3385cf9c89abcb9c2 (patch) | |
tree | 5e0fff4ecbd1fd7dd1022a7580139038df2a824c /sqlglot/dialects/oracle.py | |
parent | Releasing debian version 21.1.2-1. (diff) | |
download | sqlglot-42a1548cecf48d18233f56e3385cf9c89abcb9c2.tar.xz sqlglot-42a1548cecf48d18233f56e3385cf9c89abcb9c2.zip |
Merging upstream version 22.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 | 57 |
1 files changed, 37 insertions, 20 deletions
diff --git a/sqlglot/dialects/oracle.py b/sqlglot/dialects/oracle.py index fcb3aab..bccdad0 100644 --- a/sqlglot/dialects/oracle.py +++ b/sqlglot/dialects/oracle.py @@ -66,6 +66,26 @@ class Oracle(Dialect): "FF6": "%f", # only 6 digits are supported in python formats } + class Tokenizer(tokens.Tokenizer): + VAR_SINGLE_TOKENS = {"@", "$", "#"} + + KEYWORDS = { + **tokens.Tokenizer.KEYWORDS, + "(+)": TokenType.JOIN_MARKER, + "BINARY_DOUBLE": TokenType.DOUBLE, + "BINARY_FLOAT": TokenType.FLOAT, + "COLUMNS": TokenType.COLUMN, + "MATCH_RECOGNIZE": TokenType.MATCH_RECOGNIZE, + "MINUS": TokenType.EXCEPT, + "NVARCHAR2": TokenType.NVARCHAR, + "ORDER SIBLINGS BY": TokenType.ORDER_SIBLINGS_BY, + "SAMPLE": TokenType.TABLE_SAMPLE, + "START": TokenType.BEGIN, + "SYSDATE": TokenType.CURRENT_TIMESTAMP, + "TOP": TokenType.TOP, + "VARCHAR2": TokenType.VARCHAR, + } + class Parser(parser.Parser): ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN = False WINDOW_BEFORE_PAREN_TOKENS = {TokenType.OVER, TokenType.KEEP} @@ -93,6 +113,21 @@ class Oracle(Dialect): "XMLTABLE": lambda self: self._parse_xml_table(), } + NO_PAREN_FUNCTION_PARSERS = { + **parser.Parser.NO_PAREN_FUNCTION_PARSERS, + "CONNECT_BY_ROOT": lambda self: self.expression( + exp.ConnectByRoot, this=self._parse_column() + ), + } + + PROPERTY_PARSERS = { + **parser.Parser.PROPERTY_PARSERS, + "GLOBAL": lambda self: self._match_text_seq("TEMPORARY") + and self.expression(exp.TemporaryProperty, this="GLOBAL"), + "PRIVATE": lambda self: self._match_text_seq("TEMPORARY") + and self.expression(exp.TemporaryProperty, this="PRIVATE"), + } + QUERY_MODIFIER_PARSERS = { **parser.Parser.QUERY_MODIFIER_PARSERS, TokenType.ORDER_SIBLINGS_BY: lambda self: ("order", self._parse_order()), @@ -190,6 +225,7 @@ class Oracle(Dialect): TRANSFORMS = { **generator.Generator.TRANSFORMS, + exp.ConnectByRoot: lambda self, e: f"CONNECT_BY_ROOT {self.sql(e, 'this')}", exp.DateStrToDate: lambda self, e: self.func( "TO_DATE", e.this, exp.Literal.string("YYYY-MM-DD") ), @@ -207,6 +243,7 @@ class Oracle(Dialect): exp.Substring: rename_func("SUBSTR"), exp.Table: lambda self, e: self.table_sql(e, sep=" "), exp.TableSample: lambda self, e: self.tablesample_sql(e, sep=" "), + exp.TemporaryProperty: lambda _, e: f"{e.name or 'GLOBAL'} TEMPORARY", exp.TimeToStr: lambda self, e: self.func("TO_CHAR", e.this, self.format_time(e)), exp.ToChar: lambda self, e: self.function_fallback_sql(e), exp.Trim: trim_sql, @@ -242,23 +279,3 @@ class Oracle(Dialect): if len(expression.args.get("actions", [])) > 1: return f"ADD ({actions})" return f"ADD {actions}" - - class Tokenizer(tokens.Tokenizer): - VAR_SINGLE_TOKENS = {"@", "$", "#"} - - KEYWORDS = { - **tokens.Tokenizer.KEYWORDS, - "(+)": TokenType.JOIN_MARKER, - "BINARY_DOUBLE": TokenType.DOUBLE, - "BINARY_FLOAT": TokenType.FLOAT, - "COLUMNS": TokenType.COLUMN, - "MATCH_RECOGNIZE": TokenType.MATCH_RECOGNIZE, - "MINUS": TokenType.EXCEPT, - "NVARCHAR2": TokenType.NVARCHAR, - "ORDER SIBLINGS BY": TokenType.ORDER_SIBLINGS_BY, - "SAMPLE": TokenType.TABLE_SAMPLE, - "START": TokenType.BEGIN, - "SYSDATE": TokenType.CURRENT_TIMESTAMP, - "TOP": TokenType.TOP, - "VARCHAR2": TokenType.VARCHAR, - } |