From c66e4a33e1a07c439f03fe47f146a6c6482bf6df Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 8 Feb 2024 06:38:42 +0100 Subject: Merging upstream version 21.0.1. Signed-off-by: Daniel Baumann --- tests/dialects/test_duckdb.py | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'tests/dialects/test_duckdb.py') diff --git a/tests/dialects/test_duckdb.py b/tests/dialects/test_duckdb.py index f3b41b4..9c48f69 100644 --- a/tests/dialects/test_duckdb.py +++ b/tests/dialects/test_duckdb.py @@ -41,6 +41,7 @@ class TestDuckDB(Validator): ) self.validate_identity("SELECT 1 WHERE x > $1") self.validate_identity("SELECT 1 WHERE x > $name") + self.validate_identity("""SELECT '{"x": 1}' -> c FROM t""") self.assertEqual( parse_one("select * from t limit (select 5)").sql(dialect="duckdb"), @@ -89,18 +90,26 @@ class TestDuckDB(Validator): }, ) + self.validate_identity("""SELECT '{"duck": [1, 2, 3]}' -> '$.duck[#-1]'""") + self.validate_all( + """SELECT JSON_EXTRACT('{"duck": [1, 2, 3]}', '/duck/0')""", + write={ + "": """SELECT JSON_EXTRACT('{"duck": [1, 2, 3]}', '/duck/0')""", + "duckdb": """SELECT '{"duck": [1, 2, 3]}' -> '/duck/0'""", + }, + ) self.validate_all( """SELECT JSON('{"fruit":"banana"}') -> 'fruit'""", write={ - "duckdb": """SELECT JSON('{"fruit":"banana"}') -> 'fruit'""", - "snowflake": """SELECT PARSE_JSON('{"fruit":"banana"}')['fruit']""", + "duckdb": """SELECT JSON('{"fruit":"banana"}') -> '$.fruit'""", + "snowflake": """SELECT GET_PATH(PARSE_JSON('{"fruit":"banana"}'), 'fruit')""", }, ) self.validate_all( """SELECT JSON('{"fruit": {"foo": "banana"}}') -> 'fruit' -> 'foo'""", write={ - "duckdb": """SELECT JSON('{"fruit": {"foo": "banana"}}') -> 'fruit' -> 'foo'""", - "snowflake": """SELECT PARSE_JSON('{"fruit": {"foo": "banana"}}')['fruit']['foo']""", + "duckdb": """SELECT JSON('{"fruit": {"foo": "banana"}}') -> '$.fruit' -> '$.foo'""", + "snowflake": """SELECT GET_PATH(GET_PATH(PARSE_JSON('{"fruit": {"foo": "banana"}}'), 'fruit'), 'foo')""", }, ) self.validate_all( @@ -199,6 +208,27 @@ class TestDuckDB(Validator): self.validate_identity("FROM x SELECT x UNION SELECT 1", "SELECT x FROM x UNION SELECT 1") self.validate_identity("FROM (FROM tbl)", "SELECT * FROM (SELECT * FROM tbl)") self.validate_identity("FROM tbl", "SELECT * FROM tbl") + self.validate_identity("x -> '$.family'") + self.validate_identity( + """SELECT '{"foo": [1, 2, 3]}' -> 'foo' -> 0""", + """SELECT '{"foo": [1, 2, 3]}' -> '$.foo' -> '$[0]'""", + ) + self.validate_identity( + "JSON_EXTRACT(x, '$.family')", + "x -> '$.family'", + ) + self.validate_identity( + "JSON_EXTRACT_PATH(x, '$.family')", + "x -> '$.family'", + ) + self.validate_identity( + "JSON_EXTRACT_STRING(x, '$.family')", + "x ->> '$.family'", + ) + self.validate_identity( + "JSON_EXTRACT_PATH_TEXT(x, '$.family')", + "x ->> '$.family'", + ) self.validate_identity( "ATTACH DATABASE ':memory:' AS new_database", check_command_warning=True ) -- cgit v1.2.3