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 <[email protected]>
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;