Skip to content

Commit 9b984d8

Browse files
committed
add support for nested path columns in JSON_TABLE
1 parent 9944ca8 commit 9b984d8

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

src/parser/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10401,6 +10401,18 @@ impl<'a> Parser<'a> {
1040110401
/// Parses MySQL's JSON_TABLE column definition.
1040210402
/// For example: `id INT EXISTS PATH '$' DEFAULT '0' ON EMPTY ERROR ON ERROR`
1040310403
pub fn parse_json_table_column_def(&mut self) -> Result<JsonTableColumn, ParserError> {
10404+
if self.parse_keyword(Keyword::NESTED) {
10405+
let _has_path_keyword = self.parse_keyword(Keyword::PATH);
10406+
let path = self.parse_value()?;
10407+
self.expect_keyword(Keyword::COLUMNS)?;
10408+
let columns = self.parse_parenthesized(|p| {
10409+
p.parse_comma_separated(Self::parse_json_table_column_def)
10410+
})?;
10411+
return Ok(JsonTableColumn::Nested(JsonTableNestedColumn {
10412+
path,
10413+
columns,
10414+
}));
10415+
}
1040410416
let name = self.parse_identifier(false)?;
1040510417
if self.parse_keyword(Keyword::FOR) {
1040610418
self.expect_keyword(Keyword::ORDINALITY)?;

tests/sqlparser_mysql.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2761,6 +2761,9 @@ fn parse_json_table() {
27612761
mysql().verified_only_select(
27622762
r#"SELECT jt.* FROM JSON_TABLE('["Alice", "Bob", "Charlie"]', '$[*]' COLUMNS(row_num FOR ORDINALITY, name VARCHAR(50) PATH '$')) AS jt"#,
27632763
);
2764+
mysql().verified_only_select(
2765+
r#"SELECT * FROM JSON_TABLE('[ {"a": 1, "b": [11,111]}, {"a": 2, "b": [22,222]}, {"a":3}]', '$[*]' COLUMNS(a INT PATH '$.a', NESTED PATH '$.b[*]' COLUMNS (b INT PATH '$'))) AS jt"#,
2766+
);
27642767
assert_eq!(
27652768
mysql()
27662769
.verified_only_select(

0 commit comments

Comments
 (0)