diff --git a/sqlglot-integration-tests b/sqlglot-integration-tests index de6a2d2c06..2b4835d5e6 160000 --- a/sqlglot-integration-tests +++ b/sqlglot-integration-tests @@ -1 +1 @@ -Subproject commit de6a2d2c06325a79c09f47e56f3e51fcc3c0a393 +Subproject commit 2b4835d5e6c535c8d8488b6425cde48b050e8a45 diff --git a/sqlglot/dialects/redshift.py b/sqlglot/dialects/redshift.py index c91ab07441..d46e1f1fab 100644 --- a/sqlglot/dialects/redshift.py +++ b/sqlglot/dialects/redshift.py @@ -37,13 +37,15 @@ class Tokenizer(Postgres.Tokenizer): KEYWORDS = { **Postgres.Tokenizer.KEYWORDS, "(+)": TokenType.JOIN_MARKER, + "BINARY VARYING": TokenType.VARBINARY, + "CURRENT_USER_ID": TokenType.CURRENT_USER_ID, "HLLSKETCH": TokenType.HLLSKETCH, "MINUS": TokenType.EXCEPT, "SUPER": TokenType.SUPER, "TOP": TokenType.TOP, "UNLOAD": TokenType.COMMAND, + "USER": TokenType.CURRENT_USER, "VARBYTE": TokenType.VARBINARY, - "BINARY VARYING": TokenType.VARBINARY, } KEYWORDS.pop("VALUES") diff --git a/sqlglot/expressions/functions.py b/sqlglot/expressions/functions.py index ef899e5526..6516b6f88b 100644 --- a/sqlglot/expressions/functions.py +++ b/sqlglot/expressions/functions.py @@ -305,6 +305,10 @@ class CurrentUser(Expression, Func): arg_types = {"this": False} +class CurrentUserId(Expression, Func): + arg_types = {} + + class CurrentVersion(Expression, Func): arg_types = {} diff --git a/sqlglot/generators/redshift.py b/sqlglot/generators/redshift.py index b9cd643e2e..cfd0d31a10 100644 --- a/sqlglot/generators/redshift.py +++ b/sqlglot/generators/redshift.py @@ -75,6 +75,7 @@ class RedshiftGenerator(PostgresGenerator): exp.ConcatWs: concat_ws_to_dpipe_sql, exp.ApproxDistinct: lambda self, e: f"APPROXIMATE COUNT(DISTINCT {self.sql(e, 'this')})", exp.CurrentTimestamp: lambda self, e: "SYSDATE" if e.args.get("sysdate") else "GETDATE()", + exp.CurrentUserId: lambda *_: "CURRENT_USER_ID", exp.DateAdd: date_delta_sql("DATEADD"), exp.DateDiff: date_delta_sql("DATEDIFF"), exp.DistKeyProperty: lambda self, e: self.func("DISTKEY", e.this), diff --git a/sqlglot/parsers/redshift.py b/sqlglot/parsers/redshift.py index 3a296bfebc..5722123799 100644 --- a/sqlglot/parsers/redshift.py +++ b/sqlglot/parsers/redshift.py @@ -72,6 +72,11 @@ class RedshiftParser(PostgresParser): ), } + NO_PAREN_FUNCTIONS = { + **PostgresParser.NO_PAREN_FUNCTIONS, + TokenType.CURRENT_USER_ID: exp.CurrentUserId, + } + NO_PAREN_FUNCTION_PARSERS = { **PostgresParser.NO_PAREN_FUNCTION_PARSERS, "APPROXIMATE": lambda self: self._parse_approximate_count(), diff --git a/sqlglot/tokenizer_core.py b/sqlglot/tokenizer_core.py index e06afe7ebe..8ca6ee8011 100644 --- a/sqlglot/tokenizer_core.py +++ b/sqlglot/tokenizer_core.py @@ -268,6 +268,7 @@ class TokenType(IntEnum): CURRENT_TIME = auto() CURRENT_TIMESTAMP = auto() CURRENT_USER = auto() + CURRENT_USER_ID = auto() CURRENT_ROLE = auto() CURRENT_CATALOG = auto() DECLARE = auto()