diff --git a/sqlglot/dialects/duckdb.py b/sqlglot/dialects/duckdb.py index 7e2736ebdb..2a39a3255b 100644 --- a/sqlglot/dialects/duckdb.py +++ b/sqlglot/dialects/duckdb.py @@ -423,7 +423,7 @@ def _unix_to_time_sql(self: DuckDB.Generator, expression: exp.UnixToTime) -> str return self.sql(to_timestamp) -WRAPPED_JSON_EXTRACT_EXPRESSIONS = (exp.Binary, exp.Bracket, exp.In) +WRAPPED_JSON_EXTRACT_EXPRESSIONS = (exp.Binary, exp.Bracket, exp.In, exp.Not) def _arrow_json_extract_sql(self: DuckDB.Generator, expression: JSON_EXTRACT_TYPE) -> str: diff --git a/tests/dialects/test_duckdb.py b/tests/dialects/test_duckdb.py index bce849cb41..cc8fccb467 100644 --- a/tests/dialects/test_duckdb.py +++ b/tests/dialects/test_duckdb.py @@ -548,6 +548,24 @@ def test_duckdb(self): "JSON_EXTRACT_PATH_TEXT(x, '$.family')", "x ->> '$.family'", ) + self.validate_all( + "SELECT NOT (data -> '$.value')", + read={ + "snowflake": "SELECT NOT data:value", + }, + ) + self.validate_all( + "SELECT NOT (data -> '$.value.nested')", + read={ + "snowflake": "SELECT NOT data:value:nested", + }, + ) + self.validate_all( + "SELECT (data -> '$.value') = 1", + read={ + "snowflake": "SELECT data:value = 1", + }, + ) self.validate_identity( "SELECT {'yes': 'duck', 'maybe': 'goose', 'huh': NULL, 'no': 'heron'}" )