This is an automated email from the ASF dual-hosted git repository. gvvinblade pushed a commit to branch ignite-12248 in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-12248 by this push: new f54e7a5 minor improvements f54e7a5 is described below commit f54e7a57855d6b5bc8076791ea9bfcd6ce6776ce Author: Igor Seliverstov <gvvinbl...@gmail.com> AuthorDate: Sat Sep 5 13:18:50 2020 +0300 minor improvements --- .../query/calcite/externalize/RelJson.java | 34 +++++++--------------- .../query/calcite/externalize/RelJsonWriter.java | 11 ++++--- .../processors/query/calcite/PlannerTest.java | 9 ++---- 3 files changed, 18 insertions(+), 36 deletions(-) diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java index 278268c..36b2068 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJson.java @@ -95,6 +95,7 @@ import org.apache.calcite.sql.type.SqlTypeName; import org.apache.calcite.sql.validate.SqlNameMatchers; import org.apache.calcite.util.ImmutableBitSet; import org.apache.calcite.util.Util; +import org.apache.ignite.IgniteException; import org.apache.ignite.internal.processors.query.calcite.rel.IgniteRel; import org.apache.ignite.internal.processors.query.calcite.trait.DistributionFunction; import org.apache.ignite.internal.processors.query.calcite.trait.DistributionFunction.AffinityDistribution; @@ -103,6 +104,7 @@ import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistribut import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions; import org.apache.ignite.internal.processors.query.calcite.util.Commons; import org.apache.ignite.internal.util.typedef.F; +import org.apache.ignite.internal.util.typedef.internal.U; /** * Utilities for converting {@link RelNode} into JSON format. @@ -110,24 +112,12 @@ import org.apache.ignite.internal.util.typedef.F; @SuppressWarnings({"rawtypes", "unchecked"}) class RelJson { /** */ - @FunctionalInterface + @SuppressWarnings("PublicInnerClass") @FunctionalInterface public static interface RelFactory extends Function<RelInput, RelNode> { /** {@inheritDoc} */ @Override RelNode apply(RelInput input); } - private static final Map<String,Class> PRIMITIVE_CLASSES = ImmutableMap.<String,Class>builder() - .put("int", Integer.TYPE) - .put("long", Long.TYPE) - .put("double", Double.TYPE) - .put("float", Float.TYPE) - .put("boolean", Boolean.TYPE) - .put("char", Character.TYPE) - .put("byte", Byte.TYPE) - .put("void", Void.TYPE) - .put("short", Short.TYPE) - .build(); - /** */ private static final LoadingCache<String, RelFactory> FACTORIES_CACHE = CacheBuilder.newBuilder() .build(CacheLoader.from(RelJson::relFactory)); @@ -154,12 +144,12 @@ class RelJson { constructor = (Constructor<RelNode>)clazz.getConstructor(RelInput.class); } catch (NoSuchMethodException e) { - throw new RuntimeException("class does not have required constructor, " + throw new IgniteException("class does not have required constructor, " + clazz + "(RelInput)"); } - ParameterExpression input_ = Expressions.parameter(RelInput.class); BlockBuilder builder = new BlockBuilder(); + ParameterExpression input_ = Expressions.parameter(RelInput.class); builder.add(Expressions.new_(constructor, input_)); MethodDeclaration declaration = Expressions.methodDecl( Modifier.PUBLIC, RelNode.class, "apply", F.asList(input_), builder.toBlock()); @@ -208,18 +198,14 @@ class RelJson { /** */ private static Class<?> classForName(String typeName, boolean skipNotFound) { try { - Class aClass = PRIMITIVE_CLASSES.get(typeName); - if (aClass == null) - aClass = Class.forName(typeName); - - return aClass; + return U.forName(typeName, U.gridClassLoader()); } catch (ClassNotFoundException e) { - if (skipNotFound) - return null; - - throw new RuntimeException("unknown type " + typeName); + if (!skipNotFound) + throw new IgniteException("unknown type " + typeName); } + + return null; } /** */ diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonWriter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonWriter.java index 3bafa24..25e8d44 100644 --- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonWriter.java +++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/externalize/RelJsonWriter.java @@ -32,6 +32,7 @@ import org.apache.calcite.rex.RexNode; import org.apache.calcite.sql.SqlExplainLevel; import org.apache.calcite.util.Pair; import org.apache.ignite.IgniteException; +import org.apache.ignite.IgniteSystemProperties; /** * Callback for a relational expression to dump itself as JSON. @@ -40,6 +41,9 @@ import org.apache.ignite.IgniteException; */ public class RelJsonWriter implements RelWriter { /** */ + private static final boolean PRETTY_PRINT = IgniteSystemProperties.getBoolean("IGNITE_CALCITE_REL_JSON_PRETTY_PRINT", false); + + /** */ private final RelJson relJson = new RelJson(); /** */ @@ -58,13 +62,8 @@ public class RelJsonWriter implements RelWriter { private List<Pair<String, Object>> items = new ArrayList<>(); /** */ - public RelJsonWriter() { - this(false); - } - - /** */ public static String toJson(RelNode rel) { - RelJsonWriter writer = new RelJsonWriter(); + RelJsonWriter writer = new RelJsonWriter(PRETTY_PRINT); rel.explain(writer); return writer.asString(); diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/PlannerTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/PlannerTest.java index 629a62b..524aaec 100644 --- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/PlannerTest.java +++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/PlannerTest.java @@ -72,7 +72,6 @@ import org.apache.ignite.internal.processors.query.calcite.exec.rel.Node; import org.apache.ignite.internal.processors.query.calcite.exec.rel.Outbox; import org.apache.ignite.internal.processors.query.calcite.exec.rel.RootNode; import org.apache.ignite.internal.processors.query.calcite.externalize.RelJsonReader; -import org.apache.ignite.internal.processors.query.calcite.externalize.RelJsonWriter; import org.apache.ignite.internal.processors.query.calcite.message.CalciteMessage; import org.apache.ignite.internal.processors.query.calcite.message.MessageServiceImpl; import org.apache.ignite.internal.processors.query.calcite.message.TestIoManager; @@ -117,6 +116,7 @@ import static org.apache.calcite.tools.Frameworks.createRootSchema; import static org.apache.calcite.tools.Frameworks.newConfigBuilder; import static org.apache.ignite.configuration.IgniteConfiguration.DFLT_THREAD_KEEP_ALIVE_TIME; import static org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.FRAMEWORK_CONFIG; +import static org.apache.ignite.internal.processors.query.calcite.externalize.RelJsonWriter.toJson; import static org.apache.ignite.internal.processors.query.calcite.metadata.NodesMapping.DEDUPLICATED; import static org.apache.ignite.internal.processors.query.calcite.metadata.NodesMapping.HAS_REPLICATED_CACHES; import static org.apache.ignite.internal.processors.query.calcite.metadata.NodesMapping.PARTIALLY_REPLICATED; @@ -2364,11 +2364,8 @@ public class PlannerTest extends GridCommonAbstractTest { List<Fragment> fragments = new Splitter().go((IgniteRel)rel); List<String> serialized = new ArrayList<>(fragments.size()); - for (Fragment fragment : fragments) { - RelJsonWriter writer = new RelJsonWriter(); - fragment.root().explain(writer); - serialized.add(writer.asString()); - } + for (Fragment fragment : fragments) + serialized.add(toJson(fragment.root())); assertNotNull(serialized);