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 <[email protected]> Authored: Mon Nov 12 12:22:58 2018 -0800 Committer: Julian Hyde <[email protected]> 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),
