Skip to content

Commit afe1ba0

Browse files
committed
partial comments
1 parent 9643362 commit afe1ba0

2 files changed

Lines changed: 73 additions & 2 deletions

File tree

sqlglot/parser.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6337,9 +6337,9 @@ def _parse_colon_as_variant_extract(self, this: t.Optional[exp.Expr]) -> t.Optio
63376337
next_key = self._parse_id_var(any_token=True, tokens=(TokenType.SELECT,))
63386338

63396339
if next_key:
6340+
if isinstance(next_key, exp.Identifier) and next_key.quoted:
6341+
escape = True
63406342
path_parts.append(exp.JSONPathKey(this=next_key.name))
6341-
else:
6342-
self.raise_error("Expected key name after '.'")
63436343
elif self._match(TokenType.L_BRACKET):
63446344
bracket_expr = self._parse_bracket_key_value()
63456345

@@ -6351,6 +6351,7 @@ def _parse_colon_as_variant_extract(self, this: t.Optional[exp.Expr]) -> t.Optio
63516351

63526352
if bracket_expr.is_string:
63536353
path_parts.append(exp.JSONPathKey(this=bracket_expr.name))
6354+
escape = True
63546355
elif bracket_expr.is_star:
63556356
path_parts.append(exp.JSONPathSubscript(this=exp.JSONPathWildcard()))
63566357
elif bracket_expr.is_number:

tests/dialects/test_snowflake.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5551,6 +5551,76 @@ def test_querying_semi_structured_data(self):
55515551
"""WITH t AS (SELECT PARSE_JSON('{"a": [1]}') AS v), s AS (SELECT 0 AS x) SELECT CAST(GET_PATH(t.v, 'a') AS VARIANT)[s.x] FROM t, s""",
55525552
)
55535553

5554+
self.validate_all(
5555+
"""WITH t AS (SELECT PARSE_JSON('{"a": {"p''g": 1}}') AS col) SELECT col:a."p'g" FROM t""",
5556+
write={
5557+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a": {"p\\'g": 1}}') AS col) SELECT GET_PATH(col, 'a["p\\'g"]') FROM t""",
5558+
"duckdb": """WITH t AS (SELECT JSON('{"a": {"p''g": 1}}') AS col) SELECT col -> '$.a."p''g"' FROM t""",
5559+
},
5560+
)
5561+
self.validate_all(
5562+
"""WITH t AS (SELECT PARSE_JSON('{"a": {"b''c": 1}}') AS col) SELECT col:a."b'c" FROM t""",
5563+
write={
5564+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a": {"b\\'c": 1}}') AS col) SELECT GET_PATH(col, 'a["b\\'c"]') FROM t""",
5565+
"duckdb": """WITH t AS (SELECT JSON('{"a": {"b''c": 1}}') AS col) SELECT col -> '$.a."b''c"' FROM t""",
5566+
},
5567+
)
5568+
self.validate_all(
5569+
"""WITH t AS (SELECT PARSE_JSON('{"a''b": {"c''d": 1}}') AS col) SELECT col:"a'b"."c'd" FROM t""",
5570+
write={
5571+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a\\'b": {"c\\'d": 1}}') AS col) SELECT GET_PATH(col, '["a\\'b"]["c\\'d"]') FROM t""",
5572+
"duckdb": """WITH t AS (SELECT JSON('{"a''b": {"c''d": 1}}') AS col) SELECT col -> '$."a''b"."c''d"' FROM t""",
5573+
},
5574+
)
5575+
self.validate_all(
5576+
"""WITH t AS (SELECT PARSE_JSON('{"a''b": {"normal": {"sub": 1}}}') AS col) SELECT col:"a'b"::VARCHAR:normal.sub FROM t""",
5577+
write={
5578+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a\\'b": {"normal": {"sub": 1}}}') AS col) SELECT GET_PATH(CAST(GET_PATH(col, '["a\\'b"]') AS VARCHAR), 'normal.sub') FROM t""",
5579+
"duckdb": """WITH t AS (SELECT JSON('{"a''b": {"normal": {"sub": 1}}}') AS col) SELECT CAST(col -> '$."a''b"' AS TEXT) -> '$.normal.sub' FROM t""",
5580+
},
5581+
)
5582+
self.validate_all(
5583+
"""WITH t AS (SELECT PARSE_JSON('{"x''y": "hello"}') AS col) SELECT col:"x'y"::VARCHAR FROM t""",
5584+
write={
5585+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"x\\'y": "hello"}') AS col) SELECT CAST(GET_PATH(col, '["x\\'y"]') AS VARCHAR) FROM t""",
5586+
"duckdb": """WITH t AS (SELECT JSON('{"x''y": "hello"}') AS col) SELECT CAST(col -> '$."x''y"' AS TEXT) FROM t""",
5587+
},
5588+
)
5589+
self.validate_all(
5590+
"""WITH t AS (SELECT PARSE_JSON('{"a''b": [1, 2]}') AS col) SELECT col:"a'b"[0] FROM t""",
5591+
write={
5592+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a\\'b": [1, 2]}') AS col) SELECT GET_PATH(col, '["a\\'b"][0]') FROM t""",
5593+
"duckdb": """WITH t AS (SELECT JSON('{"a''b": [1, 2]}') AS col) SELECT col -> '$."a''b"[0]' FROM t""",
5594+
},
5595+
)
5596+
self.validate_all(
5597+
"""WITH t AS (SELECT PARSE_JSON('{"a''b": [1, 2]}') AS col), s AS (SELECT 0 AS x) SELECT col:"a'b"[s.x] FROM t, s""",
5598+
write={
5599+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a\\'b": [1, 2]}') AS col), s AS (SELECT 0 AS x) SELECT GET_PATH(col, '["a\\'b"]')[s.x] FROM t, s""",
5600+
"duckdb": """WITH t AS (SELECT JSON('{"a''b": [1, 2]}') AS col), s AS (SELECT 0 AS x) SELECT (col -> '$."a''b"')[s.x] FROM t, s""",
5601+
},
5602+
)
5603+
self.validate_all(
5604+
"""WITH t AS (SELECT PARSE_JSON('{"a": [{"b''c": 1}]}') AS col) SELECT col:a[0]."b'c" FROM t""",
5605+
write={
5606+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a": [{"b\\'c": 1}]}') AS col) SELECT GET_PATH(col, 'a[0]["b\\'c"]') FROM t""",
5607+
"duckdb": """WITH t AS (SELECT JSON('{"a": [{"b''c": 1}]}') AS col) SELECT col -> '$.a[0]."b''c"' FROM t""",
5608+
},
5609+
)
5610+
self.validate_all(
5611+
"""WITH t AS (SELECT PARSE_JSON('{"a": [{"b''c": 1}]}') AS col), s AS (SELECT 0 AS x) SELECT col:a[s.x]."b'c" FROM t, s""",
5612+
write={
5613+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a": [{"b\\'c": 1}]}') AS col), s AS (SELECT 0 AS x) SELECT GET_PATH(GET_PATH(col, 'a')[s.x], '["b\\'c"]') FROM t, s""",
5614+
"duckdb": """WITH t AS (SELECT JSON('{"a": [{"b''c": 1}]}') AS col), s AS (SELECT 0 AS x) SELECT (col -> '$.a')[s.x] -> '$."b''c"' FROM t, s""",
5615+
},
5616+
)
5617+
self.validate_all(
5618+
"""WITH t AS (SELECT PARSE_JSON('{"a": {"b''c": 1}}') AS col) SELECT col:a['b''c'] FROM t""",
5619+
write={
5620+
"snowflake": """WITH t AS (SELECT PARSE_JSON('{"a": {"b\\'c": 1}}') AS col) SELECT GET_PATH(col, 'a["b\\'c"]') FROM t""",
5621+
"duckdb": """WITH t AS (SELECT JSON('{"a": {"b''c": 1}}') AS col) SELECT col -> '$.a."b''c"' FROM t""",
5622+
},
5623+
)
55545624
self.validate_all(
55555625
"""
55565626
SELECT col:"customer's department"

0 commit comments

Comments
 (0)