This is an automated email from the ASF dual-hosted git repository. tanner pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push: new fca7a27a3a [CALCITE-6255] Support BigQuery-style JSON_OBJECT invocation syntax fca7a27a3a is described below commit fca7a27a3a0d7dc0be7af240af9cb55cea093d69 Author: Barry Kelly <barr...@google.com> AuthorDate: Wed Feb 7 17:45:33 2024 +0000 [CALCITE-6255] Support BigQuery-style JSON_OBJECT invocation syntax --- core/src/main/codegen/templates/Parser.jj | 6 ++++++ .../main/java/org/apache/calcite/runtime/CalciteResource.java | 5 ++++- .../main/java/org/apache/calcite/sql/parser/SqlParserTest.java | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/core/src/main/codegen/templates/Parser.jj b/core/src/main/codegen/templates/Parser.jj index b11d83e1a9..90497ac347 100644 --- a/core/src/main/codegen/templates/Parser.jj +++ b/core/src/main/codegen/templates/Parser.jj @@ -6731,6 +6731,12 @@ List<SqlNode> JsonNameAndValue() : } ( <VALUE> + | + <COMMA> { + if (kvMode) { + throw SqlUtil.newContextException(getPos(), RESOURCE.illegalComma()); + } + } | <COLON> { if (kvMode) { diff --git a/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java b/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java index 2791918382..5a3c6e4b55 100644 --- a/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java +++ b/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java @@ -109,9 +109,12 @@ public interface CalciteResource { @BaseMessage("ROW expression encountered in illegal context") ExInst<CalciteException> illegalRowExpression(); - @BaseMessage("Illegal identifier '':''. Was expecting ''VALUE''") + @BaseMessage("Unexpected symbol '':''. Was expecting ''VALUE''") ExInst<CalciteException> illegalColon(); + @BaseMessage("Unexpected symbol '',''. Was expecting ''VALUE''") + ExInst<CalciteException> illegalComma(); + @BaseMessage("TABLESAMPLE percentage must be between 0 and 100, inclusive") @Property(name = "SQLSTATE", value = "2202H") ExInst<CalciteException> invalidSampleSize(); diff --git a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java index a0a23f4804..32b7bb2079 100644 --- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java +++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java @@ -8815,6 +8815,16 @@ public class SqlParserTest { .ok("JSON_OBJECT(KEY 'foo' VALUE " + "JSON_OBJECT(KEY 'foo' VALUE 'bar' NULL ON NULL) " + "FORMAT JSON NULL ON NULL)"); + expr("json_object('foo', 'bar')") + .ok("JSON_OBJECT(KEY 'foo' VALUE 'bar' NULL ON NULL)"); + expr("json_object('foo', 'bar', 'baz', 'qux')") + .ok("JSON_OBJECT(KEY 'foo' VALUE 'bar', KEY 'baz' VALUE 'qux' NULL ON NULL)"); + expr("json_object('foo', json_object('bar': 'baz') format json)") + .ok("JSON_OBJECT(KEY 'foo' VALUE " + + "JSON_OBJECT(KEY 'bar' VALUE 'baz' NULL ON NULL) " + + "FORMAT JSON NULL ON NULL)"); + expr("json_object('foo', 'bar', 'baz'^)^") + .fails("(?s)Encountered \"\\)\".*Was expecting.*"); if (!Bug.TODO_FIXED) { return;