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: