You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2018/11/13 03:34:47 UTC

[1/3] calcite git commit: Following [CALCITE-2266], remove an unwanted dependency

Repository: calcite
Updated Branches:
  refs/heads/master 4310815a8 -> 1d2929105


http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/test/java/org/apache/calcite/test/SqlJsonFunctionsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/SqlJsonFunctionsTest.java b/core/src/test/java/org/apache/calcite/test/SqlJsonFunctionsTest.java
index 75203bd..3f3c57d 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlJsonFunctionsTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlJsonFunctionsTest.java
@@ -31,7 +31,6 @@ import com.jayway.jsonpath.PathNotFoundException;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
-import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
 import java.util.ArrayList;
@@ -43,6 +42,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
@@ -50,22 +50,23 @@ import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
 /**
- * `
  * Unit test for the methods in {@link SqlFunctions} that implement JSON processing functions.
  */
 public class SqlJsonFunctionsTest {
-
-  public static final String INVOC_DESC_JSON_VALUE_EXPRESSION = "jsonValueExpression";
-  public static final String INVOC_DESC_JSON_STRUCTURED_VALUE_EXPRESSION
-      = "jsonStructuredValueExpression";
-  public static final String INVOC_DESC_JSON_API_COMMON_SYNTAX = "jsonApiCommonSyntax";
+  public static final String INVOC_DESC_JSON_VALUE_EXPRESSION =
+      "jsonValueExpression";
+  public static final String INVOC_DESC_JSON_STRUCTURED_VALUE_EXPRESSION =
+      "jsonStructuredValueExpression";
+  public static final String INVOC_DESC_JSON_API_COMMON_SYNTAX =
+      "jsonApiCommonSyntax";
   public static final String INVOC_DESC_JSON_EXISTS = "jsonExists";
   public static final String INVOC_DESC_JSON_VALUE_ANY = "jsonValueAny";
   public static final String INVOC_DESC_JSON_QUERY = "jsonQuery";
   public static final String INVOC_DESC_JSONIZE = "jsonize";
   public static final String INVOC_DESC_DEJSONIZE = "dejsonize";
   public static final String INVOC_DESC_JSON_OBJECT = "jsonObject";
-  public static final String INVOC_DESC_JSON_OBJECT_AGG_ADD = "jsonObjectAggAdd";
+  public static final String INVOC_DESC_JSON_OBJECT_AGG_ADD =
+      "jsonObjectAggAdd";
   public static final String INVOC_DESC_JSON_ARRAY = "jsonArray";
   public static final String INVOC_DESC_JSON_ARRAY_AGG_ADD = "jsonArrayAggAdd";
   public static final String INVOC_DESC_IS_JSON_VALUE = "isJsonValue";
@@ -176,8 +177,7 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        is("bar")
-    );
+        is("bar"));
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
@@ -185,8 +185,7 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        nullValue()
-    );
+        nullValue());
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
@@ -194,17 +193,17 @@ public class SqlJsonFunctionsTest {
         "empty",
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        is("empty")
-    );
+        is("empty"));
     assertJsonValueAnyFailed(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
         SqlJsonValueEmptyOrErrorBehavior.ERROR,
         null,
         SqlJsonValueEmptyOrErrorBehavior.NULL,
-        null, errorMatches(
-            new CalciteException("Empty result of JSON_VALUE function is not allowed", null))
-    );
+        null,
+        errorMatches(
+            new CalciteException("Empty result of JSON_VALUE function is not "
+                + "allowed", null)));
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, Collections.emptyList()),
@@ -212,8 +211,7 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        nullValue()
-    );
+        nullValue());
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, Collections.emptyList()),
@@ -221,8 +219,7 @@ public class SqlJsonFunctionsTest {
         "empty",
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        is("empty")
-    );
+        is("empty"));
     assertJsonValueAnyFailed(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, Collections.emptyList()),
@@ -231,8 +228,8 @@ public class SqlJsonFunctionsTest {
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
         errorMatches(
-            new CalciteException("Empty result of JSON_VALUE function is not allowed", null))
-    );
+            new CalciteException("Empty result of JSON_VALUE function is not "
+                + "allowed", null)));
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withStrictException(new Exception("test message")),
@@ -240,8 +237,7 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        nullValue()
-    );
+        nullValue());
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withStrictException(new Exception("test message")),
@@ -249,17 +245,16 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.DEFAULT,
         "empty",
-        is("empty")
-    );
+        is("empty"));
     assertJsonValueAnyFailed(
-              SqlFunctions.PathContext
-                  .withStrictException(new Exception("test message")),
-              SqlJsonValueEmptyOrErrorBehavior.NULL,
-              null,
-              SqlJsonValueEmptyOrErrorBehavior.ERROR,
-              null,
-        errorMatches(new RuntimeException("java.lang.Exception: test message"))
-    );
+        SqlFunctions.PathContext
+            .withStrictException(new Exception("test message")),
+        SqlJsonValueEmptyOrErrorBehavior.NULL,
+        null,
+        SqlJsonValueEmptyOrErrorBehavior.ERROR,
+        null,
+        errorMatches(
+            new RuntimeException("java.lang.Exception: test message")));
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.STRICT, Collections.emptyList()),
@@ -267,8 +262,7 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.NULL,
         null,
-        nullValue()
-    );
+        nullValue());
     assertJsonValueAny(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.STRICT, Collections.emptyList()),
@@ -276,8 +270,7 @@ public class SqlJsonFunctionsTest {
         null,
         SqlJsonValueEmptyOrErrorBehavior.DEFAULT,
         "empty",
-        is("empty")
-    );
+        is("empty"));
     assertJsonValueAnyFailed(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.STRICT, Collections.emptyList()),
@@ -286,9 +279,8 @@ public class SqlJsonFunctionsTest {
         SqlJsonValueEmptyOrErrorBehavior.ERROR,
         null,
         errorMatches(
-            new CalciteException(
-                "Strict jsonpath mode requires scalar value, and the actual value is: '[]'", null))
-    );
+            new CalciteException("Strict jsonpath mode requires scalar value, "
+                + "and the actual value is: '[]'", null)));
   }
 
   @Test
@@ -299,32 +291,28 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[\"bar\"]")
-    );
+        is("[\"bar\"]"));
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        nullValue()
-    );
+        nullValue());
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[]")
-    );
+        is("[]"));
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_OBJECT,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("{}")
-    );
+        is("{}"));
     assertJsonQueryFailed(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, null),
@@ -332,8 +320,8 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryEmptyOrErrorBehavior.ERROR,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         errorMatches(
-            new CalciteException("Empty result of JSON_QUERY function is not allowed", null))
-    );
+            new CalciteException("Empty result of JSON_QUERY function is not "
+                + "allowed", null)));
 
     assertJsonQuery(
         SqlFunctions.PathContext
@@ -341,24 +329,21 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        nullValue()
-    );
+        nullValue());
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, "bar"),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[]")
-    );
+        is("[]"));
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, "bar"),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_OBJECT,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("{}")
-    );
+        is("{}"));
     assertJsonQueryFailed(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.LAX, "bar"),
@@ -366,48 +351,44 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryEmptyOrErrorBehavior.ERROR,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         errorMatches(
-            new CalciteException("Empty result of JSON_QUERY function is not allowed", null))
-    );
+            new CalciteException("Empty result of JSON_QUERY function is not "
+                + "allowed", null)));
     assertJsonQuery(
         SqlFunctions.PathContext
             .withStrictException(new Exception("test message")),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY,
-        is("[]")
-    );
+        is("[]"));
     assertJsonQuery(
         SqlFunctions.PathContext
             .withStrictException(new Exception("test message")),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_OBJECT,
-        is("{}")
-    );
+        is("{}"));
     assertJsonQueryFailed(
         SqlFunctions.PathContext
             .withStrictException(new Exception("test message")),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.ERROR,
-        errorMatches(new RuntimeException("java.lang.Exception: test message"))
-    );
+        errorMatches(
+            new RuntimeException("java.lang.Exception: test message")));
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.STRICT, "bar"),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        nullValue()
-    );
+        nullValue());
     assertJsonQuery(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.STRICT, "bar"),
         SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY,
-        is("[]")
-    );
+        is("[]"));
     assertJsonQueryFailed(
         SqlFunctions.PathContext
             .withReturned(SqlFunctions.PathMode.STRICT, "bar"),
@@ -415,9 +396,8 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.ERROR,
         errorMatches(
-            new CalciteException("Strict jsonpath mode requires array or object value, "
-                + "and the actual value is: 'bar'", null))
-    );
+            new CalciteException("Strict jsonpath mode requires array or "
+                + "object value, and the actual value is: 'bar'", null)));
 
     // wrapper behavior test
 
@@ -427,8 +407,7 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryWrapperBehavior.WITH_UNCONDITIONAL_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[\"bar\"]")
-    );
+        is("[\"bar\"]"));
 
     assertJsonQuery(
         SqlFunctions.PathContext
@@ -436,52 +415,47 @@ public class SqlJsonFunctionsTest {
         SqlJsonQueryWrapperBehavior.WITH_CONDITIONAL_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[\"bar\"]")
-    );
+        is("[\"bar\"]"));
 
     assertJsonQuery(
         SqlFunctions.PathContext
-            .withReturned(SqlFunctions.PathMode.STRICT, Collections.singletonList("bar")),
+            .withReturned(SqlFunctions.PathMode.STRICT,
+                Collections.singletonList("bar")),
         SqlJsonQueryWrapperBehavior.WITH_UNCONDITIONAL_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[[\"bar\"]]")
-    );
+        is("[[\"bar\"]]"));
 
     assertJsonQuery(
         SqlFunctions.PathContext
-            .withReturned(SqlFunctions.PathMode.STRICT, Collections.singletonList("bar")),
+            .withReturned(SqlFunctions.PathMode.STRICT,
+                Collections.singletonList("bar")),
         SqlJsonQueryWrapperBehavior.WITH_CONDITIONAL_ARRAY,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
         SqlJsonQueryEmptyOrErrorBehavior.NULL,
-        is("[\"bar\"]")
-    );
+        is("[\"bar\"]"));
   }
 
   @Test
   public void testJsonize() {
     assertJsonize(new HashMap<>(),
-        is("{}")
-    );
+        is("{}"));
   }
 
   @Test
   public void testDejsonize() {
     assertDejsonize("{}",
-        is(Collections.emptyMap())
-    );
+        is(Collections.emptyMap()));
     assertDejsonize("[]",
-        is(Collections.emptyList())
-    );
+        is(Collections.emptyList()));
 
     // expect exception thrown
+    final String message = "com.fasterxml.jackson.core.JsonParseException: "
+        + "Unexpected close marker '}': expected ']' (for Array starting at "
+        + "[Source: (String)\"[}\"; line: 1, column: 1])\n at [Source: "
+        + "(String)\"[}\"; line: 1, column: 3]";
     assertDejsonizeFailed("[}",
-        errorMatches(
-            new InvalidJsonException("com.fasterxml.jackson.core.JsonParseException: "
-                + "Unexpected close marker '}': expected ']' "
-                + "(for Array starting at [Source: (String)\"[}\"; line: 1, column: 1])\n"
-                + " at [Source: (String)\"[}\"; line: 1, column: 3]"))
-    );
+        errorMatches(new InvalidJsonException(message)));
   }
 
   @Test
@@ -494,13 +468,11 @@ public class SqlJsonFunctionsTest {
     assertJsonObject(
         is("{\"foo\":null}"), SqlJsonConstructorNullClause.NULL_ON_NULL,
         "foo",
-        null
-    );
+        null);
     assertJsonObject(
         is("{}"), SqlJsonConstructorNullClause.ABSENT_ON_NULL,
         "foo",
-        null
-    );
+        null);
   }
 
   @Test
@@ -508,13 +480,13 @@ public class SqlJsonFunctionsTest {
     Map<String, Object> map = new HashMap<>();
     Map<String, Object> expected = new HashMap<>();
     expected.put("foo", "bar");
-    assertJsonObjectAggAdd(map, "foo", "bar", SqlJsonConstructorNullClause.NULL_ON_NULL,
-        is(expected));
+    assertJsonObjectAggAdd(map, "foo", "bar",
+        SqlJsonConstructorNullClause.NULL_ON_NULL, is(expected));
     expected.put("foo1", null);
-    assertJsonObjectAggAdd(map, "foo1", null, SqlJsonConstructorNullClause.NULL_ON_NULL,
-        is(expected));
-    assertJsonObjectAggAdd(map, "foo2", null, SqlJsonConstructorNullClause.ABSENT_ON_NULL,
-        is(expected));
+    assertJsonObjectAggAdd(map, "foo1", null,
+        SqlJsonConstructorNullClause.NULL_ON_NULL, is(expected));
+    assertJsonObjectAggAdd(map, "foo2", null,
+        SqlJsonConstructorNullClause.ABSENT_ON_NULL, is(expected));
   }
 
   @Test
@@ -538,13 +510,13 @@ public class SqlJsonFunctionsTest {
     List<Object> list = new ArrayList<>();
     List<Object> expected = new ArrayList<>();
     expected.add("foo");
-    assertJsonArrayAggAdd(
-        list, "foo", SqlJsonConstructorNullClause.NULL_ON_NULL, is(expected));
+    assertJsonArrayAggAdd(list, "foo",
+        SqlJsonConstructorNullClause.NULL_ON_NULL, is(expected));
     expected.add(null);
-    assertJsonArrayAggAdd(
-        list, null, SqlJsonConstructorNullClause.NULL_ON_NULL, is(expected));
-    assertJsonArrayAggAdd(
-        list, null, SqlJsonConstructorNullClause.ABSENT_ON_NULL, is(expected));
+    assertJsonArrayAggAdd(list, null,
+        SqlJsonConstructorNullClause.NULL_ON_NULL, is(expected));
+    assertJsonArrayAggAdd(list, null,
+        SqlJsonConstructorNullClause.ABSENT_ON_NULL, is(expected));
   }
 
   @Test
@@ -568,175 +540,172 @@ public class SqlJsonFunctionsTest {
   }
 
   private void assertJsonValueExpression(String input,
-                                         Matcher<Object> matcher) {
+      Matcher<Object> matcher) {
     assertThat(
         invocationDesc(INVOC_DESC_JSON_VALUE_EXPRESSION, input),
         SqlFunctions.jsonValueExpression(input), matcher);
   }
 
   private void assertJsonStructuredValueExpression(Object input,
-                                                   Matcher<Object> matcher) {
+      Matcher<Object> matcher) {
     assertThat(
         invocationDesc(INVOC_DESC_JSON_STRUCTURED_VALUE_EXPRESSION, input),
         SqlFunctions.jsonStructuredValueExpression(input), matcher);
   }
 
   private void assertJsonApiCommonSyntax(Object input, String pathSpec,
-                                         Matcher<? super SqlFunctions.PathContext> matcher) {
+      Matcher<? super SqlFunctions.PathContext> matcher) {
     assertThat(
         invocationDesc(INVOC_DESC_JSON_API_COMMON_SYNTAX, input, pathSpec),
         SqlFunctions.jsonApiCommonSyntax(input, pathSpec), matcher);
   }
 
   private void assertJsonExists(Object input, SqlJsonExistsErrorBehavior errorBehavior,
-                                Matcher<? super Boolean> matcher) {
+      Matcher<? super Boolean> matcher) {
     assertThat(invocationDesc(INVOC_DESC_JSON_EXISTS, input, errorBehavior),
         SqlFunctions.jsonExists(input, errorBehavior), matcher);
   }
 
-  private void assertJsonExistsFailed(Object input, SqlJsonExistsErrorBehavior errorBehavior,
-                                Matcher<? super Throwable> matcher) {
+  private void assertJsonExistsFailed(Object input,
+      SqlJsonExistsErrorBehavior errorBehavior,
+      Matcher<? super Throwable> matcher) {
     assertFailed(invocationDesc(INVOC_DESC_JSON_EXISTS, input, errorBehavior),
         () -> SqlFunctions.jsonExists(input, errorBehavior), matcher);
   }
 
   private void assertJsonValueAny(Object input,
-                                  SqlJsonValueEmptyOrErrorBehavior emptyBehavior,
-                                  Object defaultValueOnEmpty,
-                                  SqlJsonValueEmptyOrErrorBehavior errorBehavior,
-                                  Object defaultValueOnError,
-                                  Matcher<Object> matcher) {
+      SqlJsonValueEmptyOrErrorBehavior emptyBehavior,
+      Object defaultValueOnEmpty,
+      SqlJsonValueEmptyOrErrorBehavior errorBehavior,
+      Object defaultValueOnError,
+      Matcher<Object> matcher) {
     assertThat(
-        invocationDesc(INVOC_DESC_JSON_VALUE_ANY, input, emptyBehavior, defaultValueOnEmpty,
+        invocationDesc(INVOC_DESC_JSON_VALUE_ANY, input, emptyBehavior,
+            defaultValueOnEmpty, errorBehavior, defaultValueOnError),
+        SqlFunctions.jsonValueAny(input, emptyBehavior, defaultValueOnEmpty,
             errorBehavior, defaultValueOnError),
-        SqlFunctions.jsonValueAny(
-            input, emptyBehavior, defaultValueOnEmpty, errorBehavior, defaultValueOnError),
         matcher);
   }
 
   private void assertJsonValueAnyFailed(Object input,
-                                  SqlJsonValueEmptyOrErrorBehavior emptyBehavior,
-                                  Object defaultValueOnEmpty,
-                                  SqlJsonValueEmptyOrErrorBehavior errorBehavior,
-                                  Object defaultValueOnError,
-                                  Matcher<? super Throwable> matcher) {
+      SqlJsonValueEmptyOrErrorBehavior emptyBehavior,
+      Object defaultValueOnEmpty,
+      SqlJsonValueEmptyOrErrorBehavior errorBehavior,
+      Object defaultValueOnError,
+      Matcher<? super Throwable> matcher) {
     assertFailed(
-        invocationDesc(INVOC_DESC_JSON_VALUE_ANY, input, emptyBehavior, defaultValueOnEmpty,
-            errorBehavior, defaultValueOnError),
-        () -> SqlFunctions.jsonValueAny(
-            input, emptyBehavior, defaultValueOnEmpty, errorBehavior, defaultValueOnError),
+        invocationDesc(INVOC_DESC_JSON_VALUE_ANY, input, emptyBehavior,
+            defaultValueOnEmpty, errorBehavior, defaultValueOnError),
+        () -> SqlFunctions.jsonValueAny(input, emptyBehavior,
+            defaultValueOnEmpty, errorBehavior, defaultValueOnError),
         matcher);
   }
 
   private void assertJsonQuery(Object input,
-                               SqlJsonQueryWrapperBehavior wrapperBehavior,
-                               SqlJsonQueryEmptyOrErrorBehavior emptyBehavior,
-                               SqlJsonQueryEmptyOrErrorBehavior errorBehavior,
-                               Matcher<? super String> matcher) {
+      SqlJsonQueryWrapperBehavior wrapperBehavior,
+      SqlJsonQueryEmptyOrErrorBehavior emptyBehavior,
+      SqlJsonQueryEmptyOrErrorBehavior errorBehavior,
+      Matcher<? super String> matcher) {
     assertThat(
-        invocationDesc(INVOC_DESC_JSON_QUERY, input, wrapperBehavior, emptyBehavior,
+        invocationDesc(INVOC_DESC_JSON_QUERY, input, wrapperBehavior,
+            emptyBehavior, errorBehavior),
+        SqlFunctions.jsonQuery(input, wrapperBehavior, emptyBehavior,
             errorBehavior),
-        SqlFunctions.jsonQuery(input, wrapperBehavior, emptyBehavior, errorBehavior),
         matcher);
   }
 
   private void assertJsonQueryFailed(Object input,
-                               SqlJsonQueryWrapperBehavior wrapperBehavior,
-                               SqlJsonQueryEmptyOrErrorBehavior emptyBehavior,
-                               SqlJsonQueryEmptyOrErrorBehavior errorBehavior,
-                               Matcher<? super Throwable> matcher) {
+      SqlJsonQueryWrapperBehavior wrapperBehavior,
+      SqlJsonQueryEmptyOrErrorBehavior emptyBehavior,
+      SqlJsonQueryEmptyOrErrorBehavior errorBehavior,
+      Matcher<? super Throwable> matcher) {
     assertFailed(
-        invocationDesc(INVOC_DESC_JSON_QUERY, input, wrapperBehavior, emptyBehavior,
+        invocationDesc(INVOC_DESC_JSON_QUERY, input, wrapperBehavior,
+            emptyBehavior, errorBehavior),
+        () -> SqlFunctions.jsonQuery(input, wrapperBehavior, emptyBehavior,
             errorBehavior),
-        () -> SqlFunctions.jsonQuery(input, wrapperBehavior, emptyBehavior, errorBehavior),
         matcher);
   }
 
   private void assertJsonize(Object input,
-                             Matcher<? super String> matcher) {
-    assertThat(
-        invocationDesc(INVOC_DESC_JSONIZE, input),
+      Matcher<? super String> matcher) {
+    assertThat(invocationDesc(INVOC_DESC_JSONIZE, input),
         SqlFunctions.jsonize(input),
         matcher);
   }
 
   private void assertDejsonize(String input,
-                               Matcher<Object> matcher) {
-    assertThat(
-        invocationDesc(INVOC_DESC_DEJSONIZE, input),
+      Matcher<Object> matcher) {
+    assertThat(invocationDesc(INVOC_DESC_DEJSONIZE, input),
         SqlFunctions.dejsonize(input),
         matcher);
   }
 
   private void assertDejsonizeFailed(String input,
-                               Matcher<? super Throwable> matcher) {
-    assertFailed(
-        invocationDesc(INVOC_DESC_DEJSONIZE, input),
+      Matcher<? super Throwable> matcher) {
+    assertFailed(invocationDesc(INVOC_DESC_DEJSONIZE, input),
         () -> SqlFunctions.dejsonize(input),
         matcher);
   }
 
   private void assertJsonObject(Matcher<? super String> matcher,
-                                SqlJsonConstructorNullClause nullClause,
-                                Object... kvs) {
-    assertThat(
-        invocationDesc(INVOC_DESC_JSON_OBJECT, nullClause, kvs),
+      SqlJsonConstructorNullClause nullClause,
+      Object... kvs) {
+    assertThat(invocationDesc(INVOC_DESC_JSON_OBJECT, nullClause, kvs),
         SqlFunctions.jsonObject(nullClause, kvs),
         matcher);
   }
 
   private void assertJsonObjectAggAdd(Map map, String k, Object v,
-                                      SqlJsonConstructorNullClause nullClause,
-                                      Matcher<? super Map> matcher) {
+      SqlJsonConstructorNullClause nullClause,
+      Matcher<? super Map> matcher) {
     SqlFunctions.jsonObjectAggAdd(map, k, v, nullClause);
-    assertThat(invocationDesc(INVOC_DESC_JSON_OBJECT_AGG_ADD, map, k, v, nullClause),
+    assertThat(
+        invocationDesc(INVOC_DESC_JSON_OBJECT_AGG_ADD, map, k, v, nullClause),
         map, matcher);
   }
 
   private void assertJsonArray(Matcher<? super String> matcher,
-                               SqlJsonConstructorNullClause nullClause, Object... elements) {
-    assertThat(
-        invocationDesc(INVOC_DESC_JSON_ARRAY, nullClause, elements),
+      SqlJsonConstructorNullClause nullClause, Object... elements) {
+    assertThat(invocationDesc(INVOC_DESC_JSON_ARRAY, nullClause, elements),
         SqlFunctions.jsonArray(nullClause, elements),
         matcher);
   }
 
   private void assertJsonArrayAggAdd(List list, Object element,
-                                     SqlJsonConstructorNullClause nullClause,
-                                     Matcher<? super List> matcher) {
+      SqlJsonConstructorNullClause nullClause,
+      Matcher<? super List> matcher) {
     SqlFunctions.jsonArrayAggAdd(list, element, nullClause);
     assertThat(
-        invocationDesc(INVOC_DESC_JSON_ARRAY_AGG_ADD, list, element, nullClause), list, matcher);
+        invocationDesc(INVOC_DESC_JSON_ARRAY_AGG_ADD, list, element,
+            nullClause),
+        list, matcher);
   }
 
   private void assertIsJsonValue(String input,
-                                 Matcher<? super Boolean> matcher) {
-    assertThat(
-        invocationDesc(INVOC_DESC_IS_JSON_VALUE, input),
+      Matcher<? super Boolean> matcher) {
+    assertThat(invocationDesc(INVOC_DESC_IS_JSON_VALUE, input),
         SqlFunctions.isJsonValue(input),
         matcher);
   }
 
   private void assertIsJsonScalar(String input,
-                                  Matcher<? super Boolean> matcher) {
-    assertThat(
-        invocationDesc(INVOC_DESC_IS_JSON_SCALAR, input),
+      Matcher<? super Boolean> matcher) {
+    assertThat(invocationDesc(INVOC_DESC_IS_JSON_SCALAR, input),
         SqlFunctions.isJsonScalar(input),
         matcher);
   }
 
   private void assertIsJsonArray(String input,
-                                 Matcher<? super Boolean> matcher) {
-    assertThat(
-        invocationDesc(INVOC_DESC_IS_JSON_ARRAY, input),
+      Matcher<? super Boolean> matcher) {
+    assertThat(invocationDesc(INVOC_DESC_IS_JSON_ARRAY, input),
         SqlFunctions.isJsonArray(input),
         matcher);
   }
 
   private void assertIsJsonObject(String input,
-                                  Matcher<? super Boolean> matcher) {
-    assertThat(
-        invocationDesc(INVOC_DESC_IS_JSON_OBJECT, input),
+      Matcher<? super Boolean> matcher) {
+    assertThat(invocationDesc(INVOC_DESC_IS_JSON_OBJECT, input),
         SqlFunctions.isJsonObject(input),
         matcher);
   }
@@ -745,12 +714,11 @@ public class SqlJsonFunctionsTest {
     return methodName + "(" + String.join(", ",
         Arrays.stream(args)
             .map(Objects::toString)
-            .collect(Collectors.toList())
-    ) + ")";
+            .collect(Collectors.toList())) + ")";
   }
 
   private void assertFailed(String invocationDesc, Supplier<?> supplier,
-                            Matcher<? super Throwable> matcher) {
+      Matcher<? super Throwable> matcher) {
     try {
       supplier.get();
       fail("expect exception, but not: " + invocationDesc);
@@ -777,7 +745,7 @@ public class SqlJsonFunctionsTest {
     };
   }
 
-  @NotNull private BaseMatcher<SqlFunctions.PathContext> contextMatches(
+  @Nonnull private BaseMatcher<SqlFunctions.PathContext> contextMatches(
       SqlFunctions.PathContext expected) {
     return new BaseMatcher<SqlFunctions.PathContext>() {
       @Override public boolean matches(Object item) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/druid/src/test/java/org/apache/calcite/adapter/druid/DruidQueryFilterTest.java
----------------------------------------------------------------------
diff --git a/druid/src/test/java/org/apache/calcite/adapter/druid/DruidQueryFilterTest.java b/druid/src/test/java/org/apache/calcite/adapter/druid/DruidQueryFilterTest.java
index 6b5b520..b42821d 100644
--- a/druid/src/test/java/org/apache/calcite/adapter/druid/DruidQueryFilterTest.java
+++ b/druid/src/test/java/org/apache/calcite/adapter/druid/DruidQueryFilterTest.java
@@ -59,8 +59,7 @@ public class DruidQueryFilterTest {
         .thenReturn(
             new DruidTable(Mockito.mock(DruidSchema.class), "dataSource", null,
                 ImmutableSet.of(), "timestamp", null, null,
-                null
-            ));
+                null));
   }
   @Test public void testInFilter() throws IOException {
     final Fixture f = new Fixture();

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
----------------------------------------------------------------------
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
index 3a572dd..50d3023 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT.java
@@ -4528,8 +4528,7 @@ public class DruidAdapterIT {
                     + "[{\"type\":\"default\",\"dimension\":\"vc\",\"outputName\":\"vc\",\"outputType\":\"LONG\"},"
                     + "{\"type\":\"default\",\"dimension\":\"product_id\",\"outputName\":\"product_id\",\"outputType\":\"STRING\"}],"
                     + "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
-                "QUARTER"
-            ));
+                "QUARTER"));
   }
 
   @Test
@@ -4547,8 +4546,7 @@ public class DruidAdapterIT {
                 "{\"queryType\":\"groupBy\",\"dataSource\":\"foodmart\",\"granularity\":\"all\","
                     + "\"dimensions\":[{\"type\":\"default\",\"dimension\":\"vc\",\"outputName\":\"vc\",\"outputType\":\"LONG\"}],"
                     + "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
-                "QUARTER"
-            ));
+                "QUARTER"));
   }
 
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
----------------------------------------------------------------------
diff --git a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
index aca3fa1..4414631 100644
--- a/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
+++ b/druid/src/test/java/org/apache/calcite/test/DruidAdapterIT2.java
@@ -3919,8 +3919,7 @@ public class DruidAdapterIT2 {
                     + "[{\"type\":\"default\",\"dimension\":\"vc\",\"outputName\":\"vc\",\"outputType\":\"LONG\"},"
                     + "{\"type\":\"default\",\"dimension\":\"product_id\",\"outputName\":\"product_id\",\"outputType\":\"STRING\"}],"
                     + "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
-                "QUARTER"
-            ));
+                "QUARTER"));
   }
 
   @Test
@@ -3938,8 +3937,7 @@ public class DruidAdapterIT2 {
                 "{\"queryType\":\"groupBy\",\"dataSource\":\"foodmart\",\"granularity\":\"all\","
                     + "\"dimensions\":[{\"type\":\"default\",\"dimension\":\"vc\",\"outputName\":\"vc\",\"outputType\":\"LONG\"}],"
                     + "\"virtualColumns\":[{\"type\":\"expression\",\"name\":\"vc\",\"expression\":\"timestamp_extract(\\\"__time\\\",",
-                "QUARTER"
-            ));
+                "QUARTER"));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/ElasticSearchAdapterTest.java
----------------------------------------------------------------------
diff --git a/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/ElasticSearchAdapterTest.java b/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/ElasticSearchAdapterTest.java
index abcd003..4895df8 100644
--- a/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/ElasticSearchAdapterTest.java
+++ b/elasticsearch/src/test/java/org/apache/calcite/adapter/elasticsearch/ElasticSearchAdapterTest.java
@@ -337,8 +337,7 @@ public class ElasticSearchAdapterTest {
         .query("select * from zips where pop in (96074, 99568)")
         .returnsUnordered(
             "city=BELL GARDENS; longitude=-118.17205; latitude=33.969177; pop=99568; state=CA; id=90201",
-            "city=LOS ANGELES; longitude=-118.258189; latitude=34.007856; pop=96074; state=CA; id=90011"
-        )
+            "city=LOS ANGELES; longitude=-118.258189; latitude=34.007856; pop=96074; state=CA; id=90011")
         .queryContains(ElasticsearchChecker.elasticsearchChecker(searches));
   }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/site/_docs/reference.md
----------------------------------------------------------------------
diff --git a/site/_docs/reference.md b/site/_docs/reference.md
index e6684e6..261c1f1 100644
--- a/site/_docs/reference.md
+++ b/site/_docs/reference.md
@@ -1942,8 +1942,8 @@ Not implemented:
 
 Note:
 
-* The common structure `value, path` is JSON API common syntax. **value** is a character string type json input, and **path** is a JSON path expression (in character string type too), mode flag **strict** or **lax** should be specified in the beginning of **path**.  
-* **ON ERROR** clause, and **ON EMPTY** clause define the fallback behavior of the function when an error is thrown or a null value is about to be returned.   
+* The common structure `value, path` is JSON API common syntax. **value** is a character string type json input, and **path** is a JSON path expression (in character string type too), mode flag **strict** or **lax** should be specified in the beginning of **path**.
+* **ON ERROR** clause, and **ON EMPTY** clause define the fallback behavior of the function when an error is thrown or a null value is about to be returned.
 * **ARRAY WRAPPER** clause defines how to represent JSON array result in JSON_QUERY function. Following is a comparision to demonstrate the difference among different wrapper behaviors.
 
 Example Data:
@@ -1952,11 +1952,11 @@ Example Data:
 { "a": "[1,2]", "b": [1,2], "c": "hi"}
 ```
 
-Comparision:
+Comparison:
 
 |Operator                                    |$.a          |$.b          |$.c
 |:-------------------------------------------|:------------|:------------|:------------
-|JSON_VALUE                                  | [1, 2]      | error       | hi             
+|JSON_VALUE                                  | [1, 2]      | error       | hi
 |JSON QUERY WITHOUT ARRAY WRAPPER            | error       | [1, 2]      | error
 |JSON QUERY WITH UNCONDITIONAL ARRAY WRAPPER | [ "[1,2]" ] | [ [1,2] ]   | [ "hi" ]
 |JSON QUERY WITH CONDITIONAL ARRAY WRAPPER   | [ "[1,2]" ] | [1,2]       | [ "hi" ]
@@ -1976,7 +1976,7 @@ Not implemented:
 
 Note:
 
-* The flag **FORMAT JSON** indicates the value is formatted as JSON character string. When **FORMAT JSON** is used, value should be de-parse from JSON character string to SQL structured value.  
+* The flag **FORMAT JSON** indicates the value is formatted as JSON character string. When **FORMAT JSON** is used, value should be de-parse from JSON character string to SQL structured value.
 * **ON NULL** clause defines how the JSON output represents null value. The default null behavior of **JSON_OBJECT** and **JSON_OBJECTAGG** is *NULL ON NULL*, and for **JSON_ARRAY** and **JSON_ARRAYAGG** it is *ABSENT ON NULL*.
 
 #### Comparison Operators


[2/3] calcite git commit: Following [CALCITE-2266], remove an unwanted dependency

Posted by jh...@apache.org.
Following [CALCITE-2266], remove an unwanted dependency

Also, cosmetic changes: spaces and indentation


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/6d9242a1
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/6d9242a1
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/6d9242a1

Branch: refs/heads/master
Commit: 6d9242a168a26ea3bebd3aed7919dccb86b7ebe3
Parents: 4310815
Author: Julian Hyde <jh...@apache.org>
Authored: Mon Nov 12 12:22:58 2018 -0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Nov 12 13:54:37 2018 -0800

----------------------------------------------------------------------
 core/src/main/codegen/templates/Parser.jj       | 172 ++++------
 .../enumerable/EnumerableRelImplementor.java    |   3 +-
 .../calcite/adapter/enumerable/RexImpTable.java |  28 +-
 .../calcite/rel/rules/SubQueryRemoveRule.java   |   4 +-
 .../apache/calcite/runtime/CalciteResource.java |   4 +-
 .../apache/calcite/runtime/SqlFunctions.java    |  79 +++--
 .../org/apache/calcite/sql/SqlJsonEncoding.java |   3 +-
 .../sql/SqlJsonQueryEmptyOrErrorBehavior.java   |   8 +-
 .../sql/SqlJsonQueryWrapperBehavior.java        |   4 +-
 .../sql/SqlJsonValueEmptyOrErrorBehavior.java   |   7 +-
 .../calcite/sql/dialect/HsqldbSqlDialect.java   |   6 +-
 .../calcite/sql/dialect/MysqlSqlDialect.java    |   6 +-
 .../sql/fun/SqlJsonApiCommonSyntaxOperator.java |  22 +-
 .../sql/fun/SqlJsonArrayAggAggFunction.java     |  23 +-
 .../calcite/sql/fun/SqlJsonArrayFunction.java   |  27 +-
 .../calcite/sql/fun/SqlJsonExistsFunction.java  |  13 +-
 .../sql/fun/SqlJsonObjectAggAggFunction.java    |  21 +-
 .../calcite/sql/fun/SqlJsonObjectFunction.java  |  32 +-
 .../calcite/sql/fun/SqlJsonQueryFunction.java   |  23 +-
 .../sql/fun/SqlJsonValueExpressionOperator.java |  45 +--
 .../calcite/sql/fun/SqlJsonValueFunction.java   |  75 ++---
 .../calcite/sql/fun/SqlStdOperatorTable.java    |  33 +-
 .../apache/calcite/sql/type/ReturnTypes.java    |   3 +-
 .../sql2rel/StandardConvertletTable.java        |  28 +-
 .../org/apache/calcite/util/BuiltInMethod.java  |  32 +-
 .../calcite/sql/test/SqlOperatorBaseTest.java   |   1 -
 .../org/apache/calcite/sql/test/SqlTester.java  |   3 +-
 .../org/apache/calcite/sql/test/SqlTests.java   |   6 +-
 .../apache/calcite/test/BookstoreSchema.java    |   3 +-
 .../org/apache/calcite/test/RexProgramTest.java |   4 +-
 .../calcite/test/SqlJsonFunctionsTest.java      | 336 +++++++++----------
 .../adapter/druid/DruidQueryFilterTest.java     |   3 +-
 .../org/apache/calcite/test/DruidAdapterIT.java |   6 +-
 .../apache/calcite/test/DruidAdapterIT2.java    |   6 +-
 .../elasticsearch/ElasticSearchAdapterTest.java |   3 +-
 site/_docs/reference.md                         |  10 +-
 36 files changed, 484 insertions(+), 598 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/codegen/templates/Parser.jj
----------------------------------------------------------------------
diff --git a/core/src/main/codegen/templates/Parser.jj b/core/src/main/codegen/templates/Parser.jj
index 81c79ed..6361391 100644
--- a/core/src/main/codegen/templates/Parser.jj
+++ b/core/src/main/codegen/templates/Parser.jj
@@ -4978,48 +4978,42 @@ SqlCall JsonExistsFunctionCall() :
 
 List<SqlNode> JsonValueEmptyOrErrorBehavior() :
 {
-    List<SqlNode> list = new ArrayList<SqlNode>();
-    SqlNode e;
+    final List<SqlNode> list = new ArrayList<SqlNode>();
+    final SqlNode e;
 }
 {
     (
-        <ERROR>
-        {
+        <ERROR> {
             list.add(SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.ERROR, getPos()));
             list.add(SqlLiteral.createNull(getPos()));
         }
-        |
-        <NULL>
-        {
+    |
+        <NULL> {
             list.add(SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.NULL, getPos()));
             list.add(SqlLiteral.createNull(getPos()));
         }
-        |
-        <DEFAULT_> e = Expression(ExprContext.ACCEPT_NON_QUERY)
-        {
+    |
+        <DEFAULT_> e = Expression(ExprContext.ACCEPT_NON_QUERY) {
             list.add(SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.DEFAULT, getPos()));
             list.add(e);
         }
     )
     <ON>
     (
-        <EMPTY>
-        {
+        <EMPTY> {
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.EMPTY, getPos()));
         }
-        |
-        <ERROR>
-        {
+    |
+        <ERROR> {
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.ERROR, getPos()));
         }
     )
-
-    { return list;}
+    { return list; }
 }
 
 SqlCall JsonValueFunctionCall() :
 {
-    SqlNode[] args;
+    final SqlNode[] args = new SqlNode[6];
     SqlNode e;
     final Span span;
     List<SqlNode> behavior;
@@ -5027,16 +5021,17 @@ SqlCall JsonValueFunctionCall() :
 {
     <JSON_VALUE> { span = span(); }
     <LPAREN> e = JsonApiCommonSyntax() {
-        args = new SqlNode[6];
         args[0] = e;
     }
     [
-        e = JsonReturningClause() { args[5] = e; }
+        e = JsonReturningClause() {
+            args[5] = e;
+        }
     ]
     (
-        behavior = JsonValueEmptyOrErrorBehavior()
-        {
-            SqlJsonEmptyOrError symbol = ((SqlLiteral) behavior.get(2)).getValueAs(SqlJsonEmptyOrError.class);
+        behavior = JsonValueEmptyOrErrorBehavior() {
+            final SqlJsonEmptyOrError symbol =
+                ((SqlLiteral) behavior.get(2)).getValueAs(SqlJsonEmptyOrError.class);
             switch (symbol) {
             case EMPTY:
                 args[1] = behavior.get(0);
@@ -5056,45 +5051,38 @@ SqlCall JsonValueFunctionCall() :
 
 List<SqlNode> JsonQueryEmptyOrErrorBehavior() :
 {
-    List<SqlNode> list = new ArrayList<SqlNode>();
+    final List<SqlNode> list = new ArrayList<SqlNode>();
     SqlNode e;
 }
 {
     (
-        <ERROR>
-        {
+        <ERROR> {
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.ERROR, getPos()));
         }
-        |
-        <NULL>
-        {
+    |
+        <NULL> {
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.NULL, getPos()));
         }
-        |
-        <EMPTY> <ARRAY>
-        {
+    |
+        <EMPTY> <ARRAY> {
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY, getPos()));
         }
-        |
-        <EMPTY> <OBJECT>
-        {
+    |
+        <EMPTY> <OBJECT> {
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.EMPTY_OBJECT, getPos()));
         }
     )
     <ON>
     (
-        <EMPTY>
-        {
+        <EMPTY> {
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.EMPTY, getPos()));
         }
-        |
-        <ERROR>
-        {
+    |
+        <ERROR> {
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.ERROR, getPos()));
         }
     )
-
-    { return list;}
+    { return list; }
 }
 
 SqlNode JsonQueryWrapperBehavior() :
@@ -5102,26 +5090,23 @@ SqlNode JsonQueryWrapperBehavior() :
     SqlNode e;
 }
 {
-    <WITHOUT> [<ARRAY>]
-    {
+    <WITHOUT> [<ARRAY>] {
         return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY, getPos());
     }
-    |
+|
     LOOKAHEAD(2)
-    <WITH> <CONDITIONAL> [<ARRAY>]
-    {
+    <WITH> <CONDITIONAL> [<ARRAY>] {
         return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITH_CONDITIONAL_ARRAY, getPos());
     }
-    |
-    <WITH> [<UNCONDITIONAL>] [<ARRAY>]
-    {
+|
+    <WITH> [<UNCONDITIONAL>] [<ARRAY>] {
         return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITH_UNCONDITIONAL_ARRAY, getPos());
     }
 }
 
 SqlCall JsonQueryFunctionCall() :
 {
-    SqlNode[] args;
+    final SqlNode[] args = new SqlNode[4];
     SqlNode e;
     final Span span;
     List<SqlNode> behavior;
@@ -5129,16 +5114,17 @@ SqlCall JsonQueryFunctionCall() :
 {
     <JSON_QUERY> { span = span(); }
     <LPAREN> e = JsonApiCommonSyntax() {
-        args = new SqlNode[4];
         args[0] = e;
     }
     [
-        e = JsonQueryWrapperBehavior() <WRAPPER> { args[1] = e; }
+        e = JsonQueryWrapperBehavior() <WRAPPER> {
+            args[1] = e;
+        }
     ]
     (
-        behavior = JsonQueryEmptyOrErrorBehavior()
-        {
-            SqlJsonEmptyOrError symbol = ((SqlLiteral) behavior.get(1)).getValueAs(SqlJsonEmptyOrError.class);
+        behavior = JsonQueryEmptyOrErrorBehavior() {
+            final SqlJsonEmptyOrError symbol =
+                ((SqlLiteral) behavior.get(1)).getValueAs(SqlJsonEmptyOrError.class);
             switch (symbol) {
             case EMPTY:
                 args[2] = behavior.get(0);
@@ -5156,7 +5142,7 @@ SqlCall JsonQueryFunctionCall() :
 
 SqlNode JsonName() :
 {
-    SqlNode e;
+    final SqlNode e;
 }
 {
      e = Expression(ExprContext.ACCEPT_NON_QUERY) {
@@ -5166,12 +5152,14 @@ SqlNode JsonName() :
 
 List<SqlNode> JsonNameAndValue() :
 {
-    List<SqlNode> list = new ArrayList<SqlNode>();
+    final List<SqlNode> list = new ArrayList<SqlNode>();
     SqlNode e;
     boolean kvMode = false;
 }
 {
-    [ <KEY> { kvMode = true; } ]
+    [
+        <KEY> { kvMode = true; }
+    ]
     e = JsonName() {
         list.add(e);
     }
@@ -5184,7 +5172,7 @@ List<SqlNode> JsonNameAndValue() :
             }
         }
     )
-    e =JsonValueExpression(false) {
+    e = JsonValueExpression(false) {
         list.add(e);
     }
     {
@@ -5194,34 +5182,27 @@ List<SqlNode> JsonNameAndValue() :
 
 SqlNode JsonConstructorNullClause() :
 {
-    SqlNode e;
 }
 {
-    <NULL> <ON> <NULL>
-    {
+    <NULL> <ON> <NULL> {
         return SqlLiteral.createSymbol(SqlJsonConstructorNullClause.NULL_ON_NULL, getPos());
     }
-    |
-    <ABSENT> <ON> <NULL>
-    {
+|
+    <ABSENT> <ON> <NULL> {
         return SqlLiteral.createSymbol(SqlJsonConstructorNullClause.ABSENT_ON_NULL, getPos());
     }
 }
 
 SqlCall JsonObjectFunctionCall() :
 {
-    List<SqlNode> nvArgs;
-    SqlNode[] otherArgs;
+    final List<SqlNode> nvArgs = new ArrayList<SqlNode>();
+    final SqlNode[] otherArgs = new SqlNode[1];
     SqlNode e;
     List<SqlNode> list;
     final Span span;
 }
 {
-    <JSON_OBJECT> {
-        span = span();
-        nvArgs = new ArrayList<SqlNode>();
-        otherArgs = new SqlNode[1];
-    }
+    <JSON_OBJECT> { span = span(); }
     <LPAREN> [
         list = JsonNameAndValue() {
             nvArgs.addAll(list);
@@ -5239,7 +5220,7 @@ SqlCall JsonObjectFunctionCall() :
         }
     ]
     <RPAREN> {
-        List<SqlNode> args = new ArrayList();
+        final List<SqlNode> args = new ArrayList();
         args.addAll(Arrays.asList(otherArgs));
         args.addAll(nvArgs);
         return SqlStdOperatorTable.JSON_OBJECT.createCall(span.end(this), args);
@@ -5248,21 +5229,18 @@ SqlCall JsonObjectFunctionCall() :
 
 SqlCall JsonObjectAggFunctionCall() :
 {
-    SqlNode[] args;
+    final SqlNode[] args = new SqlNode[2];
     List<SqlNode> list;
     final Span span;
-    SqlJsonConstructorNullClause nullClause;
-    SqlNode e;
+    SqlJsonConstructorNullClause nullClause =
+        SqlJsonConstructorNullClause.NULL_ON_NULL;
+    final SqlNode e;
 }
 {
-    <JSON_OBJECTAGG> {
-        span = span();
-        args = new SqlNode[2];
-        nullClause = SqlJsonConstructorNullClause.NULL_ON_NULL;
-    }
+    <JSON_OBJECTAGG> { span = span(); }
     <LPAREN> list = JsonNameAndValue() {
-            args[0] = list.get(0);
-            args[1] = list.get(1);
+        args[0] = list.get(0);
+        args[1] = list.get(1);
     }
     [
         e = JsonConstructorNullClause() {
@@ -5283,17 +5261,13 @@ SqlCall JsonObjectAggFunctionCall() :
 
 SqlCall JsonArrayFunctionCall() :
 {
-    List<SqlNode> elements;
-    SqlNode[] otherArgs;
+    final List<SqlNode> elements = new ArrayList<SqlNode>();
+    final SqlNode[] otherArgs = new SqlNode[1];
     SqlNode e;
     final Span span;
 }
 {
-    <JSON_ARRAY> {
-        span = span();
-        elements = new ArrayList<SqlNode>();
-        otherArgs = new SqlNode[1];
-    }
+    <JSON_ARRAY> { span = span(); }
     <LPAREN> [
         e = JsonValueExpression(false) {
             elements.add(e);
@@ -5311,7 +5285,7 @@ SqlCall JsonArrayFunctionCall() :
         }
     ]
     <RPAREN> {
-        List<SqlNode> args = new ArrayList();
+        final List<SqlNode> args = new ArrayList();
         args.addAll(Arrays.asList(otherArgs));
         args.addAll(elements);
         return SqlStdOperatorTable.JSON_ARRAY.createCall(span.end(this), args);
@@ -5320,20 +5294,16 @@ SqlCall JsonArrayFunctionCall() :
 
 SqlCall JsonArrayAggFunctionCall() :
 {
-    SqlNode arg;
+    final SqlNode arg;
     List<SqlNode> list;
     final Span span;
-    SqlJsonConstructorNullClause nullClause;
+    SqlJsonConstructorNullClause nullClause =
+        SqlJsonConstructorNullClause.ABSENT_ON_NULL;
     SqlNode e;
 }
 {
-    <JSON_ARRAYAGG> {
-        span = span();
-        nullClause = SqlJsonConstructorNullClause.ABSENT_ON_NULL;
-    }
-    <LPAREN> e = JsonValueExpression(false) {
-            arg = e;
-    }
+    <JSON_ARRAYAGG> { span = span(); }
+    <LPAREN> arg = JsonValueExpression(false)
     [
         e = JsonConstructorNullClause() {
             nullClause = (SqlJsonConstructorNullClause) ((SqlLiteral) e).getValue();

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRelImplementor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRelImplementor.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRelImplementor.java
index 81ddc32..1b91d7f 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRelImplementor.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableRelImplementor.java
@@ -428,8 +428,7 @@ public class EnumerableRelImplementor extends JavaRelImplementor {
         || input instanceof Integer
         || input instanceof Long
         || input instanceof Float
-        || input instanceof Double
-        ) {
+        || input instanceof Double) {
       return Expressions.constant(input, clazz);
     }
     ParameterExpression cached = stashedParameters.get(input);

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java b/core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java
index b24ac61..ada4333 100644
--- a/core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java
+++ b/core/src/main/java/org/apache/calcite/adapter/enumerable/RexImpTable.java
@@ -1790,7 +1790,6 @@ public class RexImpTable {
 
   /** Implementor for the {@code JSON_OBJECTAGG} aggregate function. */
   static class JsonObjectAggImplementor implements AggImplementor {
-
     private final Method m;
 
     JsonObjectAggImplementor(Method m) {
@@ -1806,27 +1805,24 @@ public class RexImpTable {
     }
 
     @Override public void implementReset(AggContext info,
-                                                   AggResetContext reset) {
+        AggResetContext reset) {
       reset.currentBlock().add(
           Expressions.statement(
               Expressions.assign(reset.accumulator().get(0),
                   Expressions.new_(HashMap.class))));
     }
 
-    @Override public void implementAdd(AggContext info,
-                                              AggAddContext add) {
+    @Override public void implementAdd(AggContext info, AggAddContext add) {
       add.currentBlock().add(
           Expressions.statement(
-              Expressions.call(
-                  m,
+              Expressions.call(m,
                   Iterables.concat(
-                      Collections.singletonList(
-                          add.accumulator().get(0)),
+                      Collections.singletonList(add.accumulator().get(0)),
                       add.arguments()))));
     }
 
     @Override public Expression implementResult(AggContext info,
-                                                       AggResultContext result) {
+        AggResultContext result) {
       return Expressions.call(BuiltInMethod.JSONIZE.method,
           result.accumulator().get(0));
     }
@@ -1834,7 +1830,6 @@ public class RexImpTable {
 
   /** Implementor for the {@code JSON_ARRAYAGG} aggregate function. */
   static class JsonArrayAggImplementor implements AggImplementor {
-
     private final Method m;
 
     JsonArrayAggImplementor(Method m) {
@@ -1844,12 +1839,13 @@ public class RexImpTable {
     static Supplier<JsonArrayAggImplementor> supplierFor(Method m) {
       return () -> new JsonArrayAggImplementor(m);
     }
+
     @Override public List<Type> getStateType(AggContext info) {
       return Collections.singletonList(List.class);
     }
 
     @Override public void implementReset(AggContext info,
-                                         AggResetContext reset) {
+        AggResetContext reset) {
       reset.currentBlock().add(
           Expressions.statement(
               Expressions.assign(reset.accumulator().get(0),
@@ -1857,19 +1853,17 @@ public class RexImpTable {
     }
 
     @Override public void implementAdd(AggContext info,
-                                       AggAddContext add) {
+        AggAddContext add) {
       add.currentBlock().add(
           Expressions.statement(
-              Expressions.call(
-                  m,
+              Expressions.call(m,
                   Iterables.concat(
-                      Collections.singletonList(
-                          add.accumulator().get(0)),
+                      Collections.singletonList(add.accumulator().get(0)),
                       add.arguments()))));
     }
 
     @Override public Expression implementResult(AggContext info,
-                                                AggResultContext result) {
+        AggResultContext result) {
       return Expressions.call(BuiltInMethod.JSONIZE.method,
           result.accumulator().get(0));
     }

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java b/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
index 3383f97..b993184 100644
--- a/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
+++ b/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
@@ -346,9 +346,7 @@ public abstract class SubQueryRemoveRule extends RelOptRule {
         builder.filter(
             builder.or(
                 builder.and(conditions),
-                builder.or(
-                    isNullOpperands
-                )));
+                builder.or(isNullOpperands)));
         RexNode project = builder.and(
             fields.stream()
                 .map(builder::isNotNull)

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java
----------------------------------------------------------------------
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 b5a512d..14089c5 100644
--- a/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java
+++ b/core/src/main/java/org/apache/calcite/runtime/CalciteResource.java
@@ -784,11 +784,11 @@ public interface CalciteResource {
 
   @BaseMessage("Invalid types for arithmetic: {0} {1} {2}")
   ExInst<CalciteException> invalidTypesForArithmetic(String clazzName0, String op,
-                                                     String clazzName1);
+      String clazzName1);
 
   @BaseMessage("Invalid types for comparison: {0} {1} {2}")
   ExInst<CalciteException> invalidTypesForComparison(String clazzName0, String op,
-                                                     String clazzName1);
+      String clazzName1);
 
   @BaseMessage("Cannot convert {0} to {1}")
   ExInst<CalciteException> cannotConvert(String o, String toType);

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java b/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
index adda9d8..e3f54f7 100644
--- a/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
+++ b/core/src/main/java/org/apache/calcite/runtime/SqlFunctions.java
@@ -130,8 +130,10 @@ public class SqlFunctions {
       Pattern.compile("^\\s*(?<mode>strict|lax)\\s+(?<spec>.+)$",
           Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE);
 
-  private static final JsonProvider JSON_PATH_JSON_PROVIDER = new JacksonJsonProvider();
-  private static final MappingProvider JSON_PATH_MAPPING_PROVIDER = new JacksonMappingProvider();
+  private static final JsonProvider JSON_PATH_JSON_PROVIDER =
+      new JacksonJsonProvider();
+  private static final MappingProvider JSON_PATH_MAPPING_PROVIDER =
+      new JacksonMappingProvider();
 
   private SqlFunctions() {
   }
@@ -2492,8 +2494,7 @@ public class SqlFunctions {
                 .builder()
                 .jsonProvider(JSON_PATH_JSON_PROVIDER)
                 .mappingProvider(JSON_PATH_MAPPING_PROVIDER)
-                .build()
-        );
+                .build());
         break;
       case LAX:
         if (input instanceof Exception) {
@@ -2505,8 +2506,7 @@ public class SqlFunctions {
                 .options(Option.SUPPRESS_EXCEPTIONS)
                 .jsonProvider(JSON_PATH_JSON_PROVIDER)
                 .mappingProvider(JSON_PATH_MAPPING_PROVIDER)
-                .build()
-        );
+                .build());
         break;
       default:
         throw RESOURCE.illegalJsonPathModeInPathSpec(mode.toString(), pathSpec).ex();
@@ -2525,7 +2525,8 @@ public class SqlFunctions {
     return jsonExists(input, SqlJsonExistsErrorBehavior.FALSE);
   }
 
-  public static Boolean jsonExists(Object input, SqlJsonExistsErrorBehavior errorBehavior) {
+  public static Boolean jsonExists(Object input,
+      SqlJsonExistsErrorBehavior errorBehavior) {
     PathContext context = (PathContext) input;
     if (context.exc != null) {
       switch (errorBehavior) {
@@ -2538,7 +2539,8 @@ public class SqlFunctions {
       case UNKNOWN:
         return null;
       default:
-        throw RESOURCE.illegalErrorBehaviorInJsonExistsFunc(errorBehavior.toString()).ex();
+        throw RESOURCE.illegalErrorBehaviorInJsonExistsFunc(
+            errorBehavior.toString()).ex();
       }
     } else {
       return !Objects.isNull(context.pathReturned);
@@ -2546,12 +2548,12 @@ public class SqlFunctions {
   }
 
   public static Object jsonValueAny(Object input,
-                                 SqlJsonValueEmptyOrErrorBehavior emptyBehavior,
-                                 Object defaultValueOnEmpty,
-                                 SqlJsonValueEmptyOrErrorBehavior errorBehavior,
-                                 Object defaultValueOnError) {
-    PathContext context = (PathContext) input;
-    Exception exc;
+      SqlJsonValueEmptyOrErrorBehavior emptyBehavior,
+      Object defaultValueOnEmpty,
+      SqlJsonValueEmptyOrErrorBehavior errorBehavior,
+      Object defaultValueOnError) {
+    final PathContext context = (PathContext) input;
+    final Exception exc;
     if (context.exc != null) {
       exc = context.exc;
     } else {
@@ -2566,10 +2568,13 @@ public class SqlFunctions {
         case DEFAULT:
           return defaultValueOnEmpty;
         default:
-          throw RESOURCE.illegalEmptyBehaviorInJsonValueFunc(emptyBehavior.toString()).ex();
+          throw RESOURCE.illegalEmptyBehaviorInJsonValueFunc(
+              emptyBehavior.toString()).ex();
         }
-      } else if (context.mode == PathMode.STRICT && !isScalarObject(value)) {
-        exc = RESOURCE.scalarValueRequiredInStrictModeOfJsonValueFunc(value.toString()).ex();
+      } else if (context.mode == PathMode.STRICT
+          && !isScalarObject(value)) {
+        exc = RESOURCE.scalarValueRequiredInStrictModeOfJsonValueFunc(
+            value.toString()).ex();
       } else {
         return value;
       }
@@ -2582,16 +2587,17 @@ public class SqlFunctions {
     case DEFAULT:
       return defaultValueOnError;
     default:
-      throw RESOURCE.illegalErrorBehaviorInJsonValueFunc(errorBehavior.toString()).ex();
+      throw RESOURCE.illegalErrorBehaviorInJsonValueFunc(
+          errorBehavior.toString()).ex();
     }
   }
 
   public static String jsonQuery(Object input,
-                                 SqlJsonQueryWrapperBehavior wrapperBehavior,
-                                 SqlJsonQueryEmptyOrErrorBehavior emptyBehavior,
-                                 SqlJsonQueryEmptyOrErrorBehavior errorBehavior) {
-    PathContext context = (PathContext) input;
-    Exception exc;
+      SqlJsonQueryWrapperBehavior wrapperBehavior,
+      SqlJsonQueryEmptyOrErrorBehavior emptyBehavior,
+      SqlJsonQueryEmptyOrErrorBehavior errorBehavior) {
+    final PathContext context = (PathContext) input;
+    final Exception exc;
     if (context.exc != null) {
       exc = context.exc;
     } else {
@@ -2614,7 +2620,8 @@ public class SqlFunctions {
           }
           break;
         default:
-          throw RESOURCE.illegalWrapperBehaviorInJsonQueryFunc(wrapperBehavior.toString()).ex();
+          throw RESOURCE.illegalWrapperBehaviorInJsonQueryFunc(
+              wrapperBehavior.toString()).ex();
         }
       }
       if (value == null || context.mode == PathMode.LAX
@@ -2629,10 +2636,12 @@ public class SqlFunctions {
         case EMPTY_OBJECT:
           return "{}";
         default:
-          throw RESOURCE.illegalEmptyBehaviorInJsonQueryFunc(emptyBehavior.toString()).ex();
+          throw RESOURCE.illegalEmptyBehaviorInJsonQueryFunc(
+              emptyBehavior.toString()).ex();
         }
       } else if (context.mode == PathMode.STRICT && isScalarObject(value)) {
-        exc = RESOURCE.arrayOrObjectValueRequiredInStrictModeOfJsonQueryFunc(value.toString()).ex();
+        exc = RESOURCE.arrayOrObjectValueRequiredInStrictModeOfJsonQueryFunc(
+            value.toString()).ex();
       } else {
         try {
           return jsonize(value);
@@ -2651,7 +2660,8 @@ public class SqlFunctions {
     case EMPTY_OBJECT:
       return "{}";
     default:
-      throw RESOURCE.illegalErrorBehaviorInJsonQueryFunc(errorBehavior.toString()).ex();
+      throw RESOURCE.illegalErrorBehaviorInJsonQueryFunc(
+          errorBehavior.toString()).ex();
     }
   }
 
@@ -2663,7 +2673,8 @@ public class SqlFunctions {
     return JSON_PATH_JSON_PROVIDER.parse(input);
   }
 
-  public static String jsonObject(SqlJsonConstructorNullClause nullClause, Object... kvs) {
+  public static String jsonObject(SqlJsonConstructorNullClause nullClause,
+      Object... kvs) {
     assert kvs.length % 2 == 0;
     Map<String, Object> map = new HashMap<>();
     for (int i = 0; i < kvs.length; i += 2) {
@@ -2684,7 +2695,7 @@ public class SqlFunctions {
   }
 
   public static void jsonObjectAggAdd(Map map, String k, Object v,
-                                        SqlJsonConstructorNullClause nullClause) {
+      SqlJsonConstructorNullClause nullClause) {
     if (k == null) {
       throw RESOURCE.nullKeyOfJsonObjectNotAllowed().ex();
     }
@@ -2705,7 +2716,8 @@ public class SqlFunctions {
     jsonObjectAggAdd(map, k, v, SqlJsonConstructorNullClause.ABSENT_ON_NULL);
   }
 
-  public static String jsonArray(SqlJsonConstructorNullClause nullClause, Object... elements) {
+  public static String jsonArray(SqlJsonConstructorNullClause nullClause,
+      Object... elements) {
     List<Object> list = new ArrayList<>();
     for (Object element : elements) {
       if (element == null) {
@@ -2720,7 +2732,7 @@ public class SqlFunctions {
   }
 
   public static void jsonArrayAggAdd(List list, Object element,
-                                      SqlJsonConstructorNullClause nullClause) {
+      SqlJsonConstructorNullClause nullClause) {
     if (element == null) {
       if (nullClause == SqlJsonConstructorNullClause.NULL_ON_NULL) {
         list.add(null);
@@ -2823,8 +2835,9 @@ public class SqlFunctions {
   }
 
   /**
-   * Path spec has two different modes: lax mode and strict mode. Lax mode suppress any thrown
-   * exception and return null; where strict mode throws exceptions.
+   * Path spec has two different modes: lax mode and strict mode.
+   * Lax mode suppresses any thrown exception and returns null,
+   * whereas strict mode throws exceptions.
    */
   public enum PathMode {
     LAX,

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/SqlJsonEncoding.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlJsonEncoding.java b/core/src/main/java/org/apache/calcite/sql/SqlJsonEncoding.java
index 77bc632..b658081 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlJsonEncoding.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlJsonEncoding.java
@@ -17,7 +17,8 @@
 package org.apache.calcite.sql;
 
 /**
- * SqlJsonEncoding lists the supported json encodings that could be passed to JsonValueExpression.
+ * Supported json encodings that could be passed to a
+ * {@code JsonValueExpression}.
  */
 public enum SqlJsonEncoding {
   UTF8("UTF8"),

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryEmptyOrErrorBehavior.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryEmptyOrErrorBehavior.java b/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryEmptyOrErrorBehavior.java
index ce363fc..2dd2e34 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryEmptyOrErrorBehavior.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryEmptyOrErrorBehavior.java
@@ -22,10 +22,14 @@ import java.util.Locale;
  * Categorizing Json query empty or error behaviors.
  */
 public enum SqlJsonQueryEmptyOrErrorBehavior {
-  ERROR, NULL, EMPTY_ARRAY, EMPTY_OBJECT;
+  ERROR,
+  NULL,
+  EMPTY_ARRAY,
+  EMPTY_OBJECT;
 
   @Override public String toString() {
-    return String.format(Locale.ENGLISH, "SqlJsonQueryEmptyOrErrorBehavior[%s]", name());
+    return String.format(Locale.ENGLISH,
+        "SqlJsonQueryEmptyOrErrorBehavior[%s]", name());
   }
 }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryWrapperBehavior.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryWrapperBehavior.java b/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryWrapperBehavior.java
index 12c9dc4..b58440b 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryWrapperBehavior.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlJsonQueryWrapperBehavior.java
@@ -20,7 +20,9 @@ package org.apache.calcite.sql;
  * How json query function handle array result.
  */
 public enum SqlJsonQueryWrapperBehavior {
-  WITHOUT_ARRAY, WITH_CONDITIONAL_ARRAY, WITH_UNCONDITIONAL_ARRAY
+  WITHOUT_ARRAY,
+  WITH_CONDITIONAL_ARRAY,
+  WITH_UNCONDITIONAL_ARRAY
 }
 
 // End SqlJsonQueryWrapperBehavior.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/SqlJsonValueEmptyOrErrorBehavior.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/SqlJsonValueEmptyOrErrorBehavior.java b/core/src/main/java/org/apache/calcite/sql/SqlJsonValueEmptyOrErrorBehavior.java
index 42cc84c..cb39279 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlJsonValueEmptyOrErrorBehavior.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlJsonValueEmptyOrErrorBehavior.java
@@ -22,10 +22,13 @@ import java.util.Locale;
  * Categorizing Json value empty or error behaviors.
  */
 public enum SqlJsonValueEmptyOrErrorBehavior {
-  ERROR, NULL, DEFAULT;
+  ERROR,
+  NULL,
+  DEFAULT;
 
   @Override public String toString() {
-    return String.format(Locale.ENGLISH, "SqlJsonValueEmptyOrErrorBehavior[%s]", name());
+    return String.format(Locale.ENGLISH,
+        "SqlJsonValueEmptyOrErrorBehavior[%s]", name());
   }
 }
 

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/dialect/HsqldbSqlDialect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/dialect/HsqldbSqlDialect.java b/core/src/main/java/org/apache/calcite/sql/dialect/HsqldbSqlDialect.java
index 1cbd56c..6321914 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/HsqldbSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/HsqldbSqlDialect.java
@@ -94,12 +94,10 @@ public class HsqldbSqlDialect extends SqlDialect {
             SqlStdOperatorTable.COUNT.createCall(SqlParserPos.ZERO, operand),
             SqlNodeList.of(
                 SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO),
-                SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO)
-            ),
+                SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO)),
             SqlNodeList.of(
                 nullLiteral,
-                SqlStdOperatorTable.MIN.createCall(SqlParserPos.ZERO, operand)
-            ),
+                SqlStdOperatorTable.MIN.createCall(SqlParserPos.ZERO, operand)),
             SqlStdOperatorTable.SCALAR_QUERY.createCall(SqlParserPos.ZERO,
                 SqlStdOperatorTable.UNION_ALL
                     .createCall(SqlParserPos.ZERO, unionOperand, unionOperand)));

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java b/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
index e4f6b7f..807ba6c 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/MysqlSqlDialect.java
@@ -127,12 +127,10 @@ public class MysqlSqlDialect extends SqlDialect {
             SqlStdOperatorTable.COUNT.createCall(SqlParserPos.ZERO, operand),
             SqlNodeList.of(
                 SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO),
-                SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO)
-            ),
+                SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO)),
             SqlNodeList.of(
                 nullLiteral,
-                operand
-            ),
+                operand),
             SqlStdOperatorTable.SCALAR_QUERY.createCall(SqlParserPos.ZERO,
                 SqlStdOperatorTable.UNION_ALL
                     .createCall(SqlParserPos.ZERO, unionOperand, unionOperand)));

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonApiCommonSyntaxOperator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonApiCommonSyntaxOperator.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonApiCommonSyntaxOperator.java
index 3cf5baa..de50336 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonApiCommonSyntaxOperator.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonApiCommonSyntaxOperator.java
@@ -34,28 +34,20 @@ import org.apache.calcite.sql.validate.SqlValidator;
 public class SqlJsonApiCommonSyntaxOperator extends SqlSpecialOperator {
 
   public SqlJsonApiCommonSyntaxOperator() {
-    super(
-        "JSON_API_COMMON_SYNTAX",
-        SqlKind.JSON_API_COMMON_SYNTAX,
-        100,
-        true,
-        ReturnTypes.explicit(SqlTypeName.ANY),
-        null,
-        OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.STRING)
-    );
+    super("JSON_API_COMMON_SYNTAX", SqlKind.JSON_API_COMMON_SYNTAX, 100, true,
+        ReturnTypes.explicit(SqlTypeName.ANY), null,
+        OperandTypes.family(SqlTypeFamily.ANY, SqlTypeFamily.STRING));
   }
 
-  @Override protected void checkOperandCount(
-      SqlValidator validator,
-      SqlOperandTypeChecker argType,
-      SqlCall call
-  ) {
+  @Override protected void checkOperandCount(SqlValidator validator,
+      SqlOperandTypeChecker argType, SqlCall call) {
     if (call.operandCount() != 2) {
       throw new UnsupportedOperationException("json passing syntax is not yet supported");
     }
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     SqlWriter.Frame frame = writer.startList(SqlWriter.FrameTypeEnum.SIMPLE);
     call.operand(0).unparse(writer, 0, 0);
     writer.sep(",", true);

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayAggAggFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayAggAggFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayAggAggFunction.java
index f4a33d2..4791e67 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayAggAggFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayAggAggFunction.java
@@ -32,27 +32,18 @@ import org.apache.calcite.util.Optionality;
  * The <code>JSON_OBJECTAGG</code> aggregation function.
  */
 public class SqlJsonArrayAggAggFunction extends SqlAggFunction {
-  private final String name;
   private final SqlJsonConstructorNullClause nullClause;
 
-  public SqlJsonArrayAggAggFunction(String name, SqlJsonConstructorNullClause nullClause) {
-    super(
-        name,
-        null,
-        SqlKind.JSON_ARRAYAGG,
-        ReturnTypes.VARCHAR_2000,
-        null,
-        OperandTypes.ANY,
-        SqlFunctionCategory.SYSTEM,
-        false,
-        false,
-        Optionality.FORBIDDEN
-    );
-    this.name = name;
+  public SqlJsonArrayAggAggFunction(String name,
+      SqlJsonConstructorNullClause nullClause) {
+    super(name, null, SqlKind.JSON_ARRAYAGG, ReturnTypes.VARCHAR_2000, null,
+        OperandTypes.ANY, SqlFunctionCategory.SYSTEM, false, false,
+        Optionality.FORBIDDEN);
     this.nullClause = nullClause;
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     assert call.operandCount() == 1;
     final SqlWriter.Frame frame = writer.startFunCall("JSON_ARRAYAGG");
     call.operand(0).unparse(writer, leftPrec, rightPrec);

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayFunction.java
index b702a98..0306654 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonArrayFunction.java
@@ -39,36 +39,32 @@ import java.util.Locale;
  */
 public class SqlJsonArrayFunction extends SqlFunction {
   public SqlJsonArrayFunction() {
-    super(
-        "JSON_ARRAY",
-        SqlKind.OTHER_FUNCTION,
-        ReturnTypes.VARCHAR_2000,
-        null,
-        OperandTypes.VARIADIC,
-        SqlFunctionCategory.SYSTEM
-    );
+    super("JSON_ARRAY", SqlKind.OTHER_FUNCTION, ReturnTypes.VARCHAR_2000, null,
+        OperandTypes.VARIADIC, SqlFunctionCategory.SYSTEM);
   }
 
   @Override public SqlOperandCountRange getOperandCountRange() {
     return SqlOperandCountRanges.from(1);
   }
 
-  @Override protected void checkOperandCount(SqlValidator validator, SqlOperandTypeChecker argType,
-                                             SqlCall call) {
+  @Override protected void checkOperandCount(SqlValidator validator,
+      SqlOperandTypeChecker argType, SqlCall call) {
     assert call.operandCount() >= 1;
   }
 
-  @Override public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos,
-                                      SqlNode... operands) {
+  @Override public SqlCall createCall(SqlLiteral functionQualifier,
+      SqlParserPos pos, SqlNode... operands) {
     if (operands[0] == null) {
-      operands[0] = SqlLiteral.createSymbol(SqlJsonConstructorNullClause.ABSENT_ON_NULL, pos);
+      operands[0] =
+          SqlLiteral.createSymbol(SqlJsonConstructorNullClause.ABSENT_ON_NULL,
+              pos);
     }
     return super.createCall(functionQualifier, pos, operands);
   }
 
   @Override public String getSignatureTemplate(int operandsCount) {
     assert operandsCount >= 1;
-    StringBuilder sb = new StringBuilder();
+    final StringBuilder sb = new StringBuilder();
     sb.append("{0}(");
     for (int i = 1; i < operandsCount; i++) {
       sb.append(String.format(Locale.ENGLISH, "{%d} ", i + 1));
@@ -77,7 +73,8 @@ public class SqlJsonArrayFunction extends SqlFunction {
     return sb.toString();
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     assert call.operandCount() >= 1;
     final SqlWriter.Frame frame = writer.startFunCall(getName());
     SqlWriter.Frame listFrame = writer.startList("", "");

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonExistsFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonExistsFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonExistsFunction.java
index 4c10c01..84774b2 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonExistsFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonExistsFunction.java
@@ -29,14 +29,10 @@ import org.apache.calcite.sql.type.ReturnTypes;
  */
 public class SqlJsonExistsFunction extends SqlFunction {
   public SqlJsonExistsFunction() {
-    super(
-        "JSON_EXISTS",
-        SqlKind.OTHER_FUNCTION,
-        ReturnTypes.BOOLEAN_FORCE_NULLABLE,
-        null,
+    super("JSON_EXISTS", SqlKind.OTHER_FUNCTION,
+        ReturnTypes.BOOLEAN_FORCE_NULLABLE, null,
         OperandTypes.or(OperandTypes.ANY, OperandTypes.ANY_ANY),
-        SqlFunctionCategory.SYSTEM
-    );
+        SqlFunctionCategory.SYSTEM);
   }
 
   @Override public String getSignatureTemplate(int operandsCount) {
@@ -47,7 +43,8 @@ public class SqlJsonExistsFunction extends SqlFunction {
     return "{0}({1} {2} ON ERROR)";
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     final SqlWriter.Frame frame = writer.startFunCall(getName());
     call.operand(0).unparse(writer, 0, 0);
     if (call.operandCount() == 2) {

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectAggAggFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectAggAggFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectAggAggFunction.java
index 075d3d2..4b50c5c 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectAggAggFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectAggAggFunction.java
@@ -33,27 +33,18 @@ import org.apache.calcite.util.Optionality;
  * The <code>JSON_OBJECTAGG</code> aggregation function.
  */
 public class SqlJsonObjectAggAggFunction extends SqlAggFunction {
-  private final String name;
   private final SqlJsonConstructorNullClause nullClause;
 
-  public SqlJsonObjectAggAggFunction(String name, SqlJsonConstructorNullClause nullClause) {
-    super(
-        name,
-        null,
-        SqlKind.JSON_OBJECTAGG,
-        ReturnTypes.VARCHAR_2000,
-        null,
+  public SqlJsonObjectAggAggFunction(String name,
+      SqlJsonConstructorNullClause nullClause) {
+    super(name, null, SqlKind.JSON_OBJECTAGG, ReturnTypes.VARCHAR_2000, null,
         OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.ANY),
-        SqlFunctionCategory.SYSTEM,
-        false,
-        false,
-        Optionality.FORBIDDEN
-    );
-    this.name = name;
+        SqlFunctionCategory.SYSTEM, false, false, Optionality.FORBIDDEN);
     this.nullClause = nullClause;
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     assert call.operandCount() == 2;
     final SqlWriter.Frame frame = writer.startFunCall("JSON_OBJECTAGG");
     writer.keyword("KEY");

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectFunction.java
index 8ca8eed..771c823 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonObjectFunction.java
@@ -43,27 +43,22 @@ import static org.apache.calcite.util.Static.RESOURCE;
  */
 public class SqlJsonObjectFunction extends SqlFunction {
   public SqlJsonObjectFunction() {
-    super(
-        "JSON_OBJECT",
-        SqlKind.OTHER_FUNCTION,
-        ReturnTypes.VARCHAR_2000,
-        null,
-        null,
-        SqlFunctionCategory.SYSTEM
-    );
+    super("JSON_OBJECT", SqlKind.OTHER_FUNCTION, ReturnTypes.VARCHAR_2000, null,
+        null, SqlFunctionCategory.SYSTEM);
   }
 
   @Override public SqlOperandCountRange getOperandCountRange() {
     return SqlOperandCountRanges.from(1);
   }
 
-  @Override protected void checkOperandCount(SqlValidator validator, SqlOperandTypeChecker argType,
-                                             SqlCall call) {
+  @Override protected void checkOperandCount(SqlValidator validator,
+      SqlOperandTypeChecker argType, SqlCall call) {
     assert call.operandCount() % 2 == 1;
   }
 
-  @Override public boolean checkOperandTypes(SqlCallBinding callBinding, boolean throwOnFailure) {
-    int count = callBinding.getOperandCount();
+  @Override public boolean checkOperandTypes(SqlCallBinding callBinding,
+      boolean throwOnFailure) {
+    final int count = callBinding.getOperandCount();
     for (int i = 1; i < count; i += 2) {
       RelDataType nameType = callBinding.getOperandType(i);
       if (!SqlTypeUtil.inCharFamily(nameType)) {
@@ -75,7 +70,8 @@ public class SqlJsonObjectFunction extends SqlFunction {
       if (nameType.isNullable()) {
         if (throwOnFailure) {
           throw callBinding.newError(
-              RESOURCE.argumentMustNotBeNull(callBinding.operand(i).toString()));
+              RESOURCE.argumentMustNotBeNull(
+                  callBinding.operand(i).toString()));
         }
         return false;
       }
@@ -83,10 +79,11 @@ public class SqlJsonObjectFunction extends SqlFunction {
     return true;
   }
 
-  @Override public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos,
-                                      SqlNode... operands) {
+  @Override public SqlCall createCall(SqlLiteral functionQualifier,
+      SqlParserPos pos, SqlNode... operands) {
     if (operands[0] == null) {
-      operands[0] = SqlLiteral.createSymbol(SqlJsonConstructorNullClause.NULL_ON_NULL, pos);
+      operands[0] = SqlLiteral.createSymbol(
+          SqlJsonConstructorNullClause.NULL_ON_NULL, pos);
     }
     return super.createCall(functionQualifier, pos, operands);
   }
@@ -102,7 +99,8 @@ public class SqlJsonObjectFunction extends SqlFunction {
     return sb.toString();
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     assert call.operandCount() % 2 == 1;
     final SqlWriter.Frame frame = writer.startFunCall(getName());
     SqlWriter.Frame listFrame = writer.startList("", "");

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonQueryFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonQueryFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonQueryFunction.java
index f650fbb..91f9c55 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonQueryFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonQueryFunction.java
@@ -36,25 +36,25 @@ import org.apache.calcite.sql.type.SqlTypeTransforms;
  */
 public class SqlJsonQueryFunction extends SqlFunction {
   public SqlJsonQueryFunction() {
-    super(
-        "JSON_QUERY",
-        SqlKind.OTHER_FUNCTION,
-        ReturnTypes.cascade(ReturnTypes.VARCHAR_2000, SqlTypeTransforms.FORCE_NULLABLE),
+    super("JSON_QUERY", SqlKind.OTHER_FUNCTION,
+        ReturnTypes.cascade(ReturnTypes.VARCHAR_2000,
+            SqlTypeTransforms.FORCE_NULLABLE),
         null,
         OperandTypes.family(SqlTypeFamily.ANY,
             SqlTypeFamily.ANY, SqlTypeFamily.ANY, SqlTypeFamily.ANY),
-        SqlFunctionCategory.SYSTEM
-    );
+        SqlFunctionCategory.SYSTEM);
   }
 
   @Override public String getSignatureTemplate(int operandsCount) {
     return "{0}({1} {2} WRAPPER {3} ON EMPTY {4} ON ERROR)";
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     final SqlWriter.Frame frame = writer.startFunCall(getName());
     call.operand(0).unparse(writer, 0, 0);
-    SqlJsonQueryWrapperBehavior wrapperBehavior = getEnumValue(call.operand(1));
+    final SqlJsonQueryWrapperBehavior wrapperBehavior =
+        getEnumValue(call.operand(1));
     switch (wrapperBehavior) {
     case WITHOUT_ARRAY:
       writer.keyword("WITHOUT ARRAY");
@@ -76,8 +76,8 @@ public class SqlJsonQueryFunction extends SqlFunction {
     writer.endFunCall(frame);
   }
 
-  @Override public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos,
-                                      SqlNode... operands) {
+  @Override public SqlCall createCall(SqlLiteral functionQualifier,
+      SqlParserPos pos, SqlNode... operands) {
     if (operands[1] == null) {
       operands[1] = SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY, pos);
     }
@@ -90,9 +90,8 @@ public class SqlJsonQueryFunction extends SqlFunction {
     return super.createCall(functionQualifier, pos, operands);
   }
 
-
   private void unparseEmptyOrErrorBehavior(SqlWriter writer,
-                                           SqlJsonQueryEmptyOrErrorBehavior emptyBehavior) {
+      SqlJsonQueryEmptyOrErrorBehavior emptyBehavior) {
     switch (emptyBehavior) {
     case NULL:
       writer.keyword("NULL");

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueExpressionOperator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueExpressionOperator.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueExpressionOperator.java
index ac6b53c..fbad8e1 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueExpressionOperator.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueExpressionOperator.java
@@ -16,55 +16,42 @@
  */
 package org.apache.calcite.sql.fun;
 
-import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.rel.type.RelDataTypeFactory;
 import org.apache.calcite.sql.SqlCall;
-import org.apache.calcite.sql.SqlCallBinding;
 import org.apache.calcite.sql.SqlKind;
-import org.apache.calcite.sql.SqlOperatorBinding;
 import org.apache.calcite.sql.SqlSpecialOperator;
 import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.type.OperandTypes;
-import org.apache.calcite.sql.type.SqlOperandTypeInference;
-import org.apache.calcite.sql.type.SqlReturnTypeInference;
 import org.apache.calcite.sql.type.SqlTypeName;
 
 /**
- * The JSON value expression operator which indicate that the value expression
+ * The JSON value expression operator that indicates that the value expression
  * should be parsed as JSON.
  */
 public class SqlJsonValueExpressionOperator extends SqlSpecialOperator {
   private final boolean structured;
 
   public SqlJsonValueExpressionOperator(String name, boolean structured) {
-    super(
-        name,
-        SqlKind.JSON_VALUE_EXPRESSION,
-        100,
-        true,
-        new SqlReturnTypeInference() {
-          @Override public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
-            return opBinding.getTypeFactory().createTypeWithNullability(
-                opBinding.getTypeFactory().createSqlType(SqlTypeName.ANY),
-                true);
-          }
+    super(name, SqlKind.JSON_VALUE_EXPRESSION, 100, true,
+        opBinding -> {
+          final RelDataTypeFactory typeFactory = opBinding.getTypeFactory();
+          return typeFactory.createTypeWithNullability(
+              typeFactory.createSqlType(SqlTypeName.ANY), true);
         },
-        new SqlOperandTypeInference() {
-          @Override public void inferOperandTypes(SqlCallBinding callBinding,
-                                                  RelDataType returnType,
-                                                  RelDataType[] operandTypes) {
-            if (callBinding.isOperandNull(0, false)) {
-              operandTypes[0] = callBinding.getTypeFactory().createTypeWithNullability(
-                  callBinding.getTypeFactory().createSqlType(SqlTypeName.ANY),
-                  true);
-            }
+        (callBinding, returnType, operandTypes) -> {
+          if (callBinding.isOperandNull(0, false)) {
+            final RelDataTypeFactory typeFactory =
+                callBinding.getTypeFactory();
+            operandTypes[0] = typeFactory.createTypeWithNullability(
+                typeFactory.createSqlType(SqlTypeName.ANY), true);
           }
         },
-        structured ? OperandTypes.ANY : OperandTypes.STRING
-    );
+        structured ? OperandTypes.ANY : OperandTypes.STRING);
     this.structured = structured;
   }
 
-  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec, int rightPrec) {
+  @Override public void unparse(SqlWriter writer, SqlCall call, int leftPrec,
+      int rightPrec) {
     call.operand(0).unparse(writer, 0, 0);
     if (!structured) {
       writer.keyword("FORMAT JSON");

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueFunction.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueFunction.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueFunction.java
index 2b16500..f99a09c 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueFunction.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlJsonValueFunction.java
@@ -33,9 +33,9 @@ import org.apache.calcite.sql.SqlOperatorBinding;
 import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.sql.type.SqlOperandCountRanges;
-import org.apache.calcite.sql.type.SqlOperandTypeInference;
 import org.apache.calcite.sql.type.SqlTypeName;
 import org.apache.calcite.sql.type.SqlTypeUtil;
+import org.apache.calcite.sql.validate.SqlValidator;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -46,44 +46,35 @@ import static org.apache.calcite.util.Static.RESOURCE;
  * The <code>JSON_VALUE</code> function.
  */
 public class SqlJsonValueFunction extends SqlFunction {
-
   private final boolean returnAny;
 
   public SqlJsonValueFunction(String name, boolean returnAny) {
-    super(
-        name,
-        SqlKind.OTHER_FUNCTION,
-        null,
-        new SqlOperandTypeInference() {
-          @Override public void inferOperandTypes(SqlCallBinding callBinding,
-                                                  RelDataType returnType,
-                                                  RelDataType[] operandTypes) {
-            RelDataTypeFactory typeFactory = callBinding.getTypeFactory();
-            for (int i = 0; i < operandTypes.length; ++i) {
-              operandTypes[i] =
-                  typeFactory.createSqlType(SqlTypeName.ANY);
-            }
+    super(name, SqlKind.OTHER_FUNCTION, null,
+        (callBinding, returnType, operandTypes) -> {
+          RelDataTypeFactory typeFactory = callBinding.getTypeFactory();
+          for (int i = 0; i < operandTypes.length; ++i) {
+            operandTypes[i] = typeFactory.createSqlType(SqlTypeName.ANY);
           }
         },
-        null,
-        SqlFunctionCategory.SYSTEM
-    );
+        null, SqlFunctionCategory.SYSTEM);
     this.returnAny = returnAny;
   }
 
-  @Override public SqlCall createCall(SqlLiteral functionQualifier, SqlParserPos pos,
-                                      SqlNode... operands) {
+  @Override public SqlCall createCall(SqlLiteral functionQualifier,
+      SqlParserPos pos, SqlNode... operands) {
     List<SqlNode> operandList = new ArrayList<>();
     operandList.add(operands[0]);
     if (operands[1] == null) {
-      operandList.add(SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.NULL, pos));
+      operandList.add(
+          SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.NULL, pos));
       operandList.add(SqlLiteral.createNull(pos));
     } else {
       operandList.add(operands[1]);
       operandList.add(operands[2]);
     }
     if (operands[3] == null) {
-      operandList.add(SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.NULL, pos));
+      operandList.add(
+          SqlLiteral.createSymbol(SqlJsonValueEmptyOrErrorBehavior.NULL, pos));
       operandList.add(SqlLiteral.createNull(pos));
     } else {
       operandList.add(operands[3]);
@@ -91,15 +82,15 @@ public class SqlJsonValueFunction extends SqlFunction {
     }
     if (operands.length == 6 && operands[5] != null) {
       if (returnAny) {
-        throw new IllegalArgumentException("illegal returning clause in json_value_any function");
+        throw new IllegalArgumentException(
+            "illegal returning clause in json_value_any function");
       }
       operandList.add(operands[5]);
     } else if (!returnAny) {
-      SqlDataTypeSpec defaultTypeSpec = new SqlDataTypeSpec(
-          new SqlIdentifier("VARCHAR", pos), 2000, -1,
-          null, null, pos);
-      operandList.add(
-          defaultTypeSpec);
+      SqlDataTypeSpec defaultTypeSpec =
+          new SqlDataTypeSpec(new SqlIdentifier("VARCHAR", pos), 2000, -1,
+              null, null, pos);
+      operandList.add(defaultTypeSpec);
     }
     return super.createCall(functionQualifier, pos,
         operandList.toArray(SqlNode.EMPTY_ARRAY));
@@ -110,33 +101,35 @@ public class SqlJsonValueFunction extends SqlFunction {
   }
 
   @Override public boolean checkOperandTypes(SqlCallBinding callBinding,
-                                             boolean throwOnFailure) {
+      boolean throwOnFailure) {
+    final SqlValidator validator = callBinding.getValidator();
     RelDataType defaultValueOnEmptyType =
-        callBinding.getValidator().getValidatedNodeType(callBinding.operand(2));
+        validator.getValidatedNodeType(callBinding.operand(2));
     RelDataType defaultValueOnErrorType =
-        callBinding.getValidator().getValidatedNodeType(callBinding.operand(4));
-    RelDataType returnType = callBinding.getValidator().deriveType(
-        callBinding.getScope(), callBinding.operand(5));
-    if (!canCastFrom(callBinding, throwOnFailure, defaultValueOnEmptyType, returnType)) {
+        validator.getValidatedNodeType(callBinding.operand(4));
+    RelDataType returnType =
+        validator.deriveType(callBinding.getScope(), callBinding.operand(5));
+    if (!canCastFrom(callBinding, throwOnFailure, defaultValueOnEmptyType,
+        returnType)) {
       return false;
     }
-    if (!canCastFrom(callBinding, throwOnFailure, defaultValueOnErrorType, returnType)) {
+    if (!canCastFrom(callBinding, throwOnFailure, defaultValueOnErrorType,
+        returnType)) {
       return false;
     }
     return true;
   }
 
   @Override public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
-    assert opBinding.getOperandCount() == 5 || opBinding.getOperandCount() == 6;
+    assert opBinding.getOperandCount() == 5
+        || opBinding.getOperandCount() == 6;
     RelDataType ret;
     if (opBinding.getOperandCount() == 6) {
       ret = opBinding.getOperandType(5);
     } else {
       ret = opBinding.getTypeFactory().createSqlType(SqlTypeName.ANY);
     }
-    return opBinding.getTypeFactory().createTypeWithNullability(
-        ret,
-        true);
+    return opBinding.getTypeFactory().createTypeWithNullability(ret, true);
   }
 
   @Override public String getSignatureTemplate(int operandsCount) {
@@ -179,8 +172,8 @@ public class SqlJsonValueFunction extends SqlFunction {
         == SqlJsonValueEmptyOrErrorBehavior.DEFAULT;
   }
 
-  private boolean canCastFrom(SqlCallBinding callBinding, boolean throwOnFailure,
-                              RelDataType inType, RelDataType outType) {
+  private boolean canCastFrom(SqlCallBinding callBinding,
+      boolean throwOnFailure, RelDataType inType, RelDataType outType) {
     if (SqlTypeUtil.canCastFrom(outType, inType, true)) {
       return true;
     }

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/fun/SqlStdOperatorTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/fun/SqlStdOperatorTable.java b/core/src/main/java/org/apache/calcite/sql/fun/SqlStdOperatorTable.java
index 99fc91d..03d4336 100644
--- a/core/src/main/java/org/apache/calcite/sql/fun/SqlStdOperatorTable.java
+++ b/core/src/main/java/org/apache/calcite/sql/fun/SqlStdOperatorTable.java
@@ -1273,38 +1273,41 @@ public class SqlStdOperatorTable extends ReflectiveSqlOperatorTable {
       new SqlJsonValueExpressionOperator("JSON_VALUE_EXPRESSION", false);
 
   public static final SqlJsonValueExpressionOperator JSON_STRUCTURED_VALUE_EXPRESSION =
-      new SqlJsonValueExpressionOperator("JSON_STRUCTURED_VALUE_EXPRESSION", true);
+      new SqlJsonValueExpressionOperator("JSON_STRUCTURED_VALUE_EXPRESSION",
+          true);
 
   public static final SqlJsonApiCommonSyntaxOperator JSON_API_COMMON_SYNTAX =
       new SqlJsonApiCommonSyntaxOperator();
 
   public static final SqlFunction JSON_EXISTS = new SqlJsonExistsFunction();
 
-  public static final SqlFunction JSON_VALUE = new SqlJsonValueFunction("JSON_VALUE", false);
+  public static final SqlFunction JSON_VALUE =
+      new SqlJsonValueFunction("JSON_VALUE", false);
 
-  public static final SqlFunction JSON_VALUE_ANY = new SqlJsonValueFunction("JSON_VALUE_ANY", true);
+  public static final SqlFunction JSON_VALUE_ANY =
+      new SqlJsonValueFunction("JSON_VALUE_ANY", true);
 
   public static final SqlFunction JSON_QUERY = new SqlJsonQueryFunction();
 
   public static final SqlFunction JSON_OBJECT = new SqlJsonObjectFunction();
 
-  public static final SqlAggFunction JSON_OBJECTAGG_NULL_ON_NULL
-      = new SqlJsonObjectAggAggFunction("JSON_OBJECTAGG_NULL_ON_NULL",
-      SqlJsonConstructorNullClause.NULL_ON_NULL);
+  public static final SqlAggFunction JSON_OBJECTAGG_NULL_ON_NULL =
+      new SqlJsonObjectAggAggFunction("JSON_OBJECTAGG_NULL_ON_NULL",
+          SqlJsonConstructorNullClause.NULL_ON_NULL);
 
-  public static final SqlAggFunction JSON_OBJECTAGG_ABSENT_ON_NULL
-      = new SqlJsonObjectAggAggFunction("JSON_OBJECTAGG_ABSENT_ON_NULL",
-      SqlJsonConstructorNullClause.ABSENT_ON_NULL);
+  public static final SqlAggFunction JSON_OBJECTAGG_ABSENT_ON_NULL =
+      new SqlJsonObjectAggAggFunction("JSON_OBJECTAGG_ABSENT_ON_NULL",
+          SqlJsonConstructorNullClause.ABSENT_ON_NULL);
 
   public static final SqlFunction JSON_ARRAY = new SqlJsonArrayFunction();
 
-  public static final SqlAggFunction JSON_ARRAYAGG_NULL_ON_NULL
-      = new SqlJsonArrayAggAggFunction("JSON_ARRAYAGG_NULL_ON_NULL",
-      SqlJsonConstructorNullClause.NULL_ON_NULL);
+  public static final SqlAggFunction JSON_ARRAYAGG_NULL_ON_NULL =
+      new SqlJsonArrayAggAggFunction("JSON_ARRAYAGG_NULL_ON_NULL",
+          SqlJsonConstructorNullClause.NULL_ON_NULL);
 
-  public static final SqlAggFunction JSON_ARRAYAGG_ABSENT_ON_NULL
-      = new SqlJsonArrayAggAggFunction("JSON_ARRAYAGG_ABSENT_ON_NULL",
-      SqlJsonConstructorNullClause.ABSENT_ON_NULL);
+  public static final SqlAggFunction JSON_ARRAYAGG_ABSENT_ON_NULL =
+      new SqlJsonArrayAggAggFunction("JSON_ARRAYAGG_ABSENT_ON_NULL",
+          SqlJsonConstructorNullClause.ABSENT_ON_NULL);
 
   public static final SqlBetweenOperator BETWEEN =
       new SqlBetweenOperator(

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java b/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
index fe77119..fddcdb5 100644
--- a/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
+++ b/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
@@ -203,7 +203,8 @@ public abstract class ReturnTypes {
       };
 
   /**
-   * Type-inference strategy whereby the result type of a call is a nullable Boolean.
+   * Type-inference strategy whereby the result type of a call is a nullable
+   * Boolean.
    */
   public static final SqlReturnTypeInference BOOLEAN_FORCE_NULLABLE =
       cascade(BOOLEAN, SqlTypeTransforms.FORCE_NULLABLE);

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java b/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java
index e5d5557..6f783f9 100644
--- a/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java
+++ b/core/src/main/java/org/apache/calcite/sql2rel/StandardConvertletTable.java
@@ -213,25 +213,15 @@ public class StandardConvertletTable extends ReflectiveConvertletTable {
     // to cast(json_value('{"foo":"bar"}', 'lax $.foo') as varchar(2000))
     registerOp(
         SqlStdOperatorTable.JSON_VALUE,
-        new SqlRexConvertlet() {
-          @Override public RexNode convertCall(SqlRexContext cx, SqlCall call) {
-            SqlNode expanded = SqlStdOperatorTable.CAST.createCall(
-                SqlParserPos.ZERO,
-                SqlStdOperatorTable.JSON_VALUE_ANY.createCall(
-                    SqlParserPos.ZERO,
-                    call.operand(0),
-                    call.operand(1),
-                    call.operand(2),
-                    call.operand(3),
-                    call.operand(4),
-                    null
-                ),
-                call.operand(5)
-            );
-            return cx.convertExpression(expanded);
-          }
-        }
-    );
+        (cx, call) -> {
+          SqlNode expanded =
+              SqlStdOperatorTable.CAST.createCall(SqlParserPos.ZERO,
+                  SqlStdOperatorTable.JSON_VALUE_ANY.createCall(
+                      SqlParserPos.ZERO, call.operand(0), call.operand(1),
+                      call.operand(2), call.operand(3), call.operand(4), null),
+              call.operand(5));
+          return cx.convertExpression(expanded);
+        });
 
     // REVIEW jvs 24-Apr-2006: This only seems to be working from within a
     // windowed agg.  I have added an optimizer rule

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/main/java/org/apache/calcite/util/BuiltInMethod.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/util/BuiltInMethod.java b/core/src/main/java/org/apache/calcite/util/BuiltInMethod.java
index 79efaac..b3803dd 100644
--- a/core/src/main/java/org/apache/calcite/util/BuiltInMethod.java
+++ b/core/src/main/java/org/apache/calcite/util/BuiltInMethod.java
@@ -259,10 +259,12 @@ public enum BuiltInMethod {
   UPPER(SqlFunctions.class, "upper", String.class),
   LOWER(SqlFunctions.class, "lower", String.class),
   JSONIZE(SqlFunctions.class, "jsonize", Object.class),
-  JSON_VALUE_EXPRESSION(SqlFunctions.class, "jsonValueExpression", String.class),
-  JSON_STRUCTURED_VALUE_EXPRESSION(SqlFunctions.class, "jsonStructuredValueExpression",
-      Object.class),
-  JSON_API_COMMON_SYNTAX(SqlFunctions.class, "jsonApiCommonSyntax", Object.class, String.class),
+  JSON_VALUE_EXPRESSION(SqlFunctions.class, "jsonValueExpression",
+      String.class),
+  JSON_STRUCTURED_VALUE_EXPRESSION(SqlFunctions.class,
+      "jsonStructuredValueExpression", Object.class),
+  JSON_API_COMMON_SYNTAX(SqlFunctions.class, "jsonApiCommonSyntax",
+      Object.class, String.class),
   JSON_EXISTS(SqlFunctions.class, "jsonExists", Object.class),
   JSON_VALUE_ANY(SqlFunctions.class, "jsonValueAny", Object.class,
       SqlJsonValueEmptyOrErrorBehavior.class,
@@ -274,16 +276,18 @@ public enum BuiltInMethod {
       SqlJsonQueryWrapperBehavior.class,
       SqlJsonQueryEmptyOrErrorBehavior.class,
       SqlJsonQueryEmptyOrErrorBehavior.class),
-  JSON_OBJECT(SqlFunctions.class, "jsonObject", SqlJsonConstructorNullClause.class),
-  JSON_OBJECTAGG_ADD_NULL_ON_NULL(SqlFunctions.class, "jsonObjectAggAddNullOnNull",
-      Map.class, String.class, Object.class),
-  JSON_OBJECTAGG_ADD_ABSENT_ON_NULL(SqlFunctions.class, "jsonObjectAggAddAbsentOnNull",
-      Map.class, String.class, Object.class),
-  JSON_ARRAY(SqlFunctions.class, "jsonArray", SqlJsonConstructorNullClause.class),
-  JSON_ARRAYAGG_ADD_NULL_ON_NULL(SqlFunctions.class, "jsonArrayAggAddNullOnNull",
-      List.class, Object.class),
-  JSON_ARRAYAGG_ADD_ABSENT_ON_NULL(SqlFunctions.class, "jsonArrayAggAddAbsentOnNull",
-      List.class, Object.class),
+  JSON_OBJECT(SqlFunctions.class, "jsonObject",
+      SqlJsonConstructorNullClause.class),
+  JSON_OBJECTAGG_ADD_NULL_ON_NULL(SqlFunctions.class,
+      "jsonObjectAggAddNullOnNull", Map.class, String.class, Object.class),
+  JSON_OBJECTAGG_ADD_ABSENT_ON_NULL(SqlFunctions.class,
+      "jsonObjectAggAddAbsentOnNull", Map.class, String.class, Object.class),
+  JSON_ARRAY(SqlFunctions.class, "jsonArray",
+      SqlJsonConstructorNullClause.class),
+  JSON_ARRAYAGG_ADD_NULL_ON_NULL(SqlFunctions.class,
+      "jsonArrayAggAddNullOnNull", List.class, Object.class),
+  JSON_ARRAYAGG_ADD_ABSENT_ON_NULL(SqlFunctions.class,
+      "jsonArrayAggAddAbsentOnNull", List.class, Object.class),
   IS_JSON_VALUE(SqlFunctions.class, "isJsonValue", String.class),
   IS_JSON_OBJECT(SqlFunctions.class, "isJsonObject", String.class),
   IS_JSON_ARRAY(SqlFunctions.class, "isJsonArray", String.class),

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
index c1cb089..78a2fb7 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
@@ -4254,7 +4254,6 @@ public abstract class SqlOperatorBaseTest {
     tester.checkNull("upper(cast(null as varchar(1)))");
   }
 
-
   @Test public void testJsonExists() {
     tester.checkBoolean("json_exists('{\"foo\":\"bar\"}', "
         + "'strict $.foo' false on error)", Boolean.TRUE);

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/test/java/org/apache/calcite/sql/test/SqlTester.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlTester.java b/core/src/test/java/org/apache/calcite/sql/test/SqlTester.java
index ef63253..4e9ad88 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlTester.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlTester.java
@@ -318,7 +318,8 @@ public interface SqlTester extends AutoCloseable, SqlValidatorTestCase.Tester {
       double delta);
 
   /**
-   * Checks that an aggregate expression with multiple args returns the expected result.
+   * Checks that an aggregate expression with multiple args returns the expected
+   * result.
    *
    * @param expr        Aggregate expression, e.g. <code>AGG_FUNC(x, x2, x3)</code>
    * @param inputValues Nested array of input values, e.g. <code>[

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/test/java/org/apache/calcite/sql/test/SqlTests.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlTests.java b/core/src/test/java/org/apache/calcite/sql/test/SqlTests.java
index a46a002..aa032fa 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlTests.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlTests.java
@@ -137,13 +137,15 @@ public abstract class SqlTests {
     return buf.toString();
   }
 
-  public static String generateAggQueryWithMultipleArgs(String expr, String[][] inputValues) {
+  public static String generateAggQueryWithMultipleArgs(String expr,
+      String[][] inputValues) {
     int argCount = -1;
     for (String[] row : inputValues) {
       if (argCount == -1) {
         argCount = row.length;
       } else if (argCount != row.length) {
-        throw new IllegalArgumentException("invalid test input: " + Arrays.toString(row));
+        throw new IllegalArgumentException("invalid test input: "
+            + Arrays.toString(row));
       }
     }
     StringBuilder buf = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/test/java/org/apache/calcite/test/BookstoreSchema.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/BookstoreSchema.java b/core/src/test/java/org/apache/calcite/test/BookstoreSchema.java
index 65ad112..cfd75e9 100644
--- a/core/src/test/java/org/apache/calcite/test/BookstoreSchema.java
+++ b/core/src/test/java/org/apache/calcite/test/BookstoreSchema.java
@@ -61,8 +61,7 @@ public final class BookstoreSchema {
                       new Page(2, "Acknowledgements"))),
               new Book("The Last Temptation of Christ",
                   1955,
-                  Collections.singletonList(new Page(1, "Contents")))
-          )),
+                  Collections.singletonList(new Page(1, "Contents"))))),
       new Author(3,
           "Homer",
           new Place(null,

http://git-wip-us.apache.org/repos/asf/calcite/blob/6d9242a1/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RexProgramTest.java b/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
index 7dddb71..5f50144 100644
--- a/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RexProgramTest.java
@@ -1158,8 +1158,8 @@ public class RexProgramTest extends RexProgramBuilderBase {
     checkSimplify(
         case_(eq(falseLiteral, falseLiteral), falseLiteral,
               eq(falseLiteral, falseLiteral), trueLiteral,
-              trueLiteral
-    ), "false");
+              trueLiteral),
+        "false");
 
     // is null, applied to not-null value
     checkSimplify(rexBuilder.makeCall(SqlStdOperatorTable.IS_NULL, aRef),


[3/3] calcite git commit: [CALCITE-2661] In RelBuilder, add methods for creating Exchange and SortExchange relational expressions (Chunwei Lei)

Posted by jh...@apache.org.
[CALCITE-2661] In RelBuilder, add methods for creating Exchange and SortExchange relational expressions (Chunwei Lei)

Close apache/calcite#910


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/1d292910
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/1d292910
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/1d292910

Branch: refs/heads/master
Commit: 1d2929105f47b944c65529fe59b3072cce167116
Parents: 6d9242a
Author: chunwei.lcw <ch...@163.com>
Authored: Fri Nov 9 11:30:29 2018 +0800
Committer: Julian Hyde <jh...@apache.org>
Committed: Mon Nov 12 13:54:38 2018 -0800

----------------------------------------------------------------------
 .../org/apache/calcite/rel/core/Exchange.java   |  2 +-
 .../apache/calcite/rel/core/RelFactories.java   | 60 +++++++++++++++++
 .../rel/logical/LogicalSortExchange.java        | 68 ++++++++++++++++++++
 .../org/apache/calcite/tools/RelBuilder.java    | 25 +++++++
 .../org/apache/calcite/test/RelBuilderTest.java | 26 ++++++++
 site/_docs/algebra.md                           |  4 ++
 6 files changed, 184 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/1d292910/core/src/main/java/org/apache/calcite/rel/core/Exchange.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/Exchange.java b/core/src/main/java/org/apache/calcite/rel/core/Exchange.java
index 221740b..ebb17f2 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/Exchange.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/Exchange.java
@@ -65,7 +65,7 @@ public abstract class Exchange extends SingleRel {
   }
 
   /**
-   * Creates a Exchange by parsing serialized output.
+   * Creates an Exchange by parsing serialized output.
    */
   public Exchange(RelInput input) {
     this(input.getCluster(), input.getTraitSet().plus(input.getCollation()),

http://git-wip-us.apache.org/repos/asf/calcite/blob/1d292910/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java b/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
index 8baef30..c7e290c 100644
--- a/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
+++ b/core/src/main/java/org/apache/calcite/rel/core/RelFactories.java
@@ -22,9 +22,11 @@ import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitSet;
 import org.apache.calcite.plan.ViewExpanders;
 import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelDistribution;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.logical.LogicalAggregate;
 import org.apache.calcite.rel.logical.LogicalCorrelate;
+import org.apache.calcite.rel.logical.LogicalExchange;
 import org.apache.calcite.rel.logical.LogicalFilter;
 import org.apache.calcite.rel.logical.LogicalIntersect;
 import org.apache.calcite.rel.logical.LogicalJoin;
@@ -32,6 +34,7 @@ import org.apache.calcite.rel.logical.LogicalMatch;
 import org.apache.calcite.rel.logical.LogicalMinus;
 import org.apache.calcite.rel.logical.LogicalProject;
 import org.apache.calcite.rel.logical.LogicalSort;
+import org.apache.calcite.rel.logical.LogicalSortExchange;
 import org.apache.calcite.rel.logical.LogicalTableScan;
 import org.apache.calcite.rel.logical.LogicalUnion;
 import org.apache.calcite.rel.logical.LogicalValues;
@@ -75,6 +78,12 @@ public class RelFactories {
   public static final SortFactory DEFAULT_SORT_FACTORY =
       new SortFactoryImpl();
 
+  public static final ExchangeFactory DEFAULT_EXCHANGE_FACTORY =
+      new ExchangeFactoryImpl();
+
+  public static final SortExchangeFactory DEFAULT_SORT_EXCHANGE_FACTORY =
+      new SortExchangeFactoryImpl();
+
   public static final AggregateFactory DEFAULT_AGGREGATE_FACTORY =
       new AggregateFactoryImpl();
 
@@ -99,6 +108,8 @@ public class RelFactories {
               DEFAULT_JOIN_FACTORY,
               DEFAULT_SEMI_JOIN_FACTORY,
               DEFAULT_SORT_FACTORY,
+              DEFAULT_EXCHANGE_FACTORY,
+              DEFAULT_SORT_EXCHANGE_FACTORY,
               DEFAULT_AGGREGATE_FACTORY,
               DEFAULT_MATCH_FACTORY,
               DEFAULT_SET_OP_FACTORY,
@@ -162,6 +173,55 @@ public class RelFactories {
   }
 
   /**
+   * Can create a {@link org.apache.calcite.rel.core.Exchange}
+   * of the appropriate type for a rule's calling convention.
+   */
+  public interface ExchangeFactory {
+    /** Creates a Exchange. */
+    RelNode createExchange(RelNode input, RelDistribution distribution);
+  }
+
+  /**
+   * Implementation of
+   * {@link RelFactories.ExchangeFactory}
+   * that returns a {@link Exchange}.
+   */
+  private static class ExchangeFactoryImpl implements ExchangeFactory {
+    @Override public RelNode createExchange(
+        RelNode input, RelDistribution distribution) {
+      return LogicalExchange.create(input, distribution);
+    }
+  }
+
+  /**
+   * Can create a {@link SortExchange}
+   * of the appropriate type for a rule's calling convention.
+   */
+  public interface SortExchangeFactory {
+    /**
+     * Creates a {@link SortExchange}.
+     */
+    RelNode createSortExchange(
+        RelNode input,
+        RelDistribution distribution,
+        RelCollation collation);
+  }
+
+  /**
+   * Implementation of
+   * {@link RelFactories.SortExchangeFactory}
+   * that returns a {@link SortExchange}.
+   */
+  private static class SortExchangeFactoryImpl implements SortExchangeFactory {
+    @Override public RelNode createSortExchange(
+        RelNode input,
+        RelDistribution distribution,
+        RelCollation collation) {
+      return LogicalSortExchange.create(input, distribution, collation);
+    }
+  }
+
+  /**
    * Can create a {@link SetOp} for a particular kind of
    * set operation (UNION, EXCEPT, INTERSECT) and of the appropriate type
    * for this rule's calling convention.

http://git-wip-us.apache.org/repos/asf/calcite/blob/1d292910/core/src/main/java/org/apache/calcite/rel/logical/LogicalSortExchange.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/rel/logical/LogicalSortExchange.java b/core/src/main/java/org/apache/calcite/rel/logical/LogicalSortExchange.java
new file mode 100644
index 0000000..73a066a
--- /dev/null
+++ b/core/src/main/java/org/apache/calcite/rel/logical/LogicalSortExchange.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.calcite.rel.logical;
+
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelCollationTraitDef;
+import org.apache.calcite.rel.RelDistribution;
+import org.apache.calcite.rel.RelDistributionTraitDef;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.SortExchange;
+
+/**
+ * Sub-class of {@link org.apache.calcite.rel.core.SortExchange} not
+ * targeted at any particular engine or calling convention.
+ */
+public class LogicalSortExchange extends SortExchange {
+  private LogicalSortExchange(RelOptCluster cluster, RelTraitSet traitSet,
+      RelNode input, RelDistribution distribution, RelCollation collation) {
+    super(cluster, traitSet, input, distribution, collation);
+  }
+
+  /**
+   * Creates a LogicalSortExchange.
+   *
+   * @param input     Input relational expression
+   * @param distribution Distribution specification
+   * @param collation array of sort specifications
+   */
+  public static LogicalSortExchange create(
+      RelNode input,
+      RelDistribution distribution,
+      RelCollation collation) {
+    RelOptCluster cluster = input.getCluster();
+    collation = RelCollationTraitDef.INSTANCE.canonize(collation);
+    distribution = RelDistributionTraitDef.INSTANCE.canonize(distribution);
+    RelTraitSet traitSet =
+        input.getTraitSet().replace(Convention.NONE).replace(distribution).replace(collation);
+    return new LogicalSortExchange(cluster, traitSet, input, distribution,
+        collation);
+  }
+
+  //~ Methods ----------------------------------------------------------------
+
+  @Override public SortExchange copy(RelTraitSet traitSet, RelNode newInput,
+      RelDistribution newDistribution, RelCollation newCollation) {
+    return new LogicalSortExchange(this.getCluster(), traitSet, newInput,
+        newDistribution, newCollation);
+  }
+}
+
+// End LogicalSortExchange.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/1d292910/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
index 3b0be9c..9b7a6e9 100644
--- a/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
+++ b/core/src/main/java/org/apache/calcite/tools/RelBuilder.java
@@ -27,6 +27,7 @@ import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelOptUtil;
 import org.apache.calcite.rel.RelCollation;
 import org.apache.calcite.rel.RelCollations;
+import org.apache.calcite.rel.RelDistribution;
 import org.apache.calcite.rel.RelFieldCollation;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.Aggregate;
@@ -133,6 +134,8 @@ public class RelBuilder {
   private final RelFactories.ProjectFactory projectFactory;
   private final RelFactories.AggregateFactory aggregateFactory;
   private final RelFactories.SortFactory sortFactory;
+  private final RelFactories.ExchangeFactory exchangeFactory;
+  private final RelFactories.SortExchangeFactory sortExchangeFactory;
   private final RelFactories.SetOpFactory setOpFactory;
   private final RelFactories.JoinFactory joinFactory;
   private final RelFactories.SemiJoinFactory semiJoinFactory;
@@ -164,6 +167,12 @@ public class RelBuilder {
     this.sortFactory =
         Util.first(context.unwrap(RelFactories.SortFactory.class),
             RelFactories.DEFAULT_SORT_FACTORY);
+    this.exchangeFactory =
+        Util.first(context.unwrap(RelFactories.ExchangeFactory.class),
+            RelFactories.DEFAULT_EXCHANGE_FACTORY);
+    this.sortExchangeFactory =
+        Util.first(context.unwrap(RelFactories.SortExchangeFactory.class),
+            RelFactories.DEFAULT_SORT_EXCHANGE_FACTORY);
     this.setOpFactory =
         Util.first(context.unwrap(RelFactories.SetOpFactory.class),
             RelFactories.DEFAULT_SET_OP_FACTORY);
@@ -1883,6 +1892,22 @@ public class RelBuilder {
     return sortLimit(offset, fetch, ImmutableList.of());
   }
 
+  /** Creates an Exchange by distribution. */
+  public RelBuilder exchange(RelDistribution distribution) {
+    RelNode exchange = exchangeFactory.createExchange(peek(), distribution);
+    replaceTop(exchange);
+    return this;
+  }
+
+  /** Creates a SortExchange by distribution and collation. */
+  public RelBuilder sortExchange(RelDistribution distribution,
+      RelCollation collation) {
+    RelNode exchange = sortExchangeFactory
+        .createSortExchange(peek(), distribution, collation);
+    replaceTop(exchange);
+    return this;
+  }
+
   /** Creates a {@link Sort} by field ordinals.
    *
    * <p>Negative fields mean descending: -1 means field(0) descending,

http://git-wip-us.apache.org/repos/asf/calcite/blob/1d292910/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
index e3d5b95..e6cfe62 100644
--- a/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
+++ b/core/src/test/java/org/apache/calcite/test/RelBuilderTest.java
@@ -20,6 +20,8 @@ import org.apache.calcite.jdbc.CalciteConnection;
 import org.apache.calcite.plan.Contexts;
 import org.apache.calcite.plan.RelOptTable;
 import org.apache.calcite.plan.RelTraitDef;
+import org.apache.calcite.rel.RelCollations;
+import org.apache.calcite.rel.RelDistributions;
 import org.apache.calcite.rel.RelNode;
 import org.apache.calcite.rel.core.AggregateCall;
 import org.apache.calcite.rel.core.Correlate;
@@ -2276,6 +2278,30 @@ public class RelBuilderTest {
             .build();
     assertThat(root, matcher);
   }
+
+  @Test public void testExchange() {
+    final RelBuilder builder = RelBuilder.create(config().build());
+    final RelNode root = builder.scan("EMP")
+        .exchange(RelDistributions.hash(Lists.newArrayList(0)))
+        .build();
+    final String expected =
+        "LogicalExchange(distribution=[hash[0]])\n"
+            + "  LogicalTableScan(table=[[scott, EMP]])\n";
+    assertThat(root, hasTree(expected));
+  }
+
+  @Test public void testSortExchange() {
+    final RelBuilder builder = RelBuilder.create(config().build());
+    final RelNode root =
+        builder.scan("EMP")
+            .sortExchange(RelDistributions.hash(Lists.newArrayList(0)),
+                RelCollations.of(0))
+            .build();
+    final String expected =
+        "LogicalSortExchange(distribution=[hash[0]], collation=[[0]])\n"
+            + "  LogicalTableScan(table=[[scott, EMP]])\n";
+    assertThat(root, hasTree(expected));
+  }
 }
 
 // End RelBuilderTest.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/1d292910/site/_docs/algebra.md
----------------------------------------------------------------------
diff --git a/site/_docs/algebra.md b/site/_docs/algebra.md
index 8ff2339..4c45f39 100644
--- a/site/_docs/algebra.md
+++ b/site/_docs/algebra.md
@@ -270,6 +270,8 @@ return the `RelBuilder`.
 | `sort(fieldOrdinal...)`<br/>`sort(expr...)`<br/>`sort(exprList)` | Creates a [Sort]({{ site.apiRoot }}/org/apache/calcite/rel/core/Sort.html).<br/><br/>In the first form, field ordinals are 0-based, and a negative ordinal indicates descending; for example, -2 means field 1 descending.<br/><br/>In the other forms, you can wrap expressions in `as`, `nullsFirst` or `nullsLast`.
 | `sortLimit(offset, fetch, expr...)`<br/>`sortLimit(offset, fetch, exprList)` | Creates a [Sort]({{ site.apiRoot }}/org/apache/calcite/rel/core/Sort.html) with offset and limit.
 | `limit(offset, fetch)` | Creates a [Sort]({{ site.apiRoot }}/org/apache/calcite/rel/core/Sort.html) that does not sort, only applies with offset and limit.
+| `exchange(distribution)` | Creates an [Exchange]({{ site.apiRoot }}/org/apache/calcite/rel/core/Exchange.html).
+| `sortExchange(distribution, collation)` | Creates a [SortExchange]({{ site.apiRoot }}/org/apache/calcite/rel/core/SortExchange.html).
 | `join(joinType, expr...)`<br/>`join(joinType, exprList)`<br/>`join(joinType, fieldName...)` | Creates a [Join]({{ site.apiRoot }}/org/apache/calcite/rel/core/Join.html) of the two most recent relational expressions.<br/><br/>The first form joins on a boolean expression (multiple conditions are combined using AND).<br/><br/>The last form joins on named fields; each side must have a field of each name.
 | `semiJoin(expr)` | Creates a [SemiJoin]({{ site.apiRoot }}/org/apache/calcite/rel/core/SemiJoin.html) of the two most recent relational expressions.
 | `union(all [, n])` | Creates a [Union]({{ site.apiRoot }}/org/apache/calcite/rel/core/Union.html) of the `n` (default two) most recent relational expressions.
@@ -299,6 +301,8 @@ Argument types:
 * `varHolder` [Holder]({{ site.apiRoot }}/org/apache/calcite/util/Holder.html) of [RexCorrelVariable]({{ site.apiRoot }}/org/apache/calcite/rex/RexCorrelVariable.html)
 * `patterns` Map whose key is String, value is [RexNode]({{ site.apiRoot }}/org/apache/calcite/rex/RexNode.html)
 * `subsets` Map whose key is String, value is a sorted set of String
+* `distribution` [RelDistribution]({{ site.apiRoot }}/org/apache/calcite/rel/RelDistribution.html)
+* `collation` [RelCollation]({{ site.apiRoot }}/org/apache/calcite/rel/RelCollation.html)
 
 The builder methods perform various optimizations, including: