summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/oracle.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-03-03 14:11:07 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-03-03 14:11:07 +0000
commit42a1548cecf48d18233f56e3385cf9c89abcb9c2 (patch)
tree5e0fff4ecbd1fd7dd1022a7580139038df2a824c /sqlglot/dialects/oracle.py
parentReleasing debian version 21.1.2-1. (diff)
downloadsqlglot-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.py57
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,
- }