You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by mm...@apache.org on 2019/03/06 14:36:49 UTC
[calcite] branch master updated: [CALCITE-2897] Reduce expensive
calls to Class#getSimpleName
This is an automated email from the ASF dual-hosted git repository.
mmior pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/master by this push:
new e2b364e [CALCITE-2897] Reduce expensive calls to Class#getSimpleName
e2b364e is described below
commit e2b364e3353b4b78ac74e6404410df6f1a130950
Author: Stamatis Zampetakis <za...@gmail.com>
AuthorDate: Wed Mar 6 11:19:20 2019 +0100
[CALCITE-2897] Reduce expensive calls to Class#getSimpleName
1. Replace rule.getClass().getSimpleName() with rule.toString():
(i) It conforms to the API VolcanoPlannerPhaseRuleMappingInitializer;
(ii) It is safer to use when the same rule class has many instances;
(iii) It is much more efficient.
2. Precompute the class name for Boxed primitives and use where necessary.
3. Remove Types#boxClassName since it is slightly redundant.
---
.../org/apache/calcite/plan/volcano/RuleQueue.java | 10 +++++----
.../apache/calcite/adapter/csv/CsvFieldType.java | 2 +-
.../apache/calcite/adapter/file/FileFieldType.java | 2 +-
.../calcite/linq4j/tree/ConstantExpression.java | 2 +-
.../calcite/linq4j/tree/FunctionExpression.java | 5 +++--
.../org/apache/calcite/linq4j/tree/Primitive.java | 2 ++
.../java/org/apache/calcite/linq4j/tree/Types.java | 24 ----------------------
7 files changed, 14 insertions(+), 33 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java b/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
index 45c4683..2a58e8d 100644
--- a/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
+++ b/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java
@@ -103,8 +103,11 @@ class RuleQueue {
Ordering.from(new RelImportanceComparator());
/**
- * Maps a {@link VolcanoPlannerPhase} to a set of rule names. Named rules
+ * Maps a {@link VolcanoPlannerPhase} to a set of rule descriptions. Named rules
* may be invoked in their corresponding phase.
+ *
+ * See {@link VolcanoPlannerPhaseRuleMappingInitializer} for more information regarding the
+ * contents of this Map and how it is initialized.
*/
private final Map<VolcanoPlannerPhase, Set<String>> phaseRuleMapping;
@@ -330,11 +333,10 @@ class RuleQueue {
continue;
}
- String ruleClassName = match.getRule().getClass().getSimpleName();
-
Set<String> phaseRuleSet = phaseRuleMapping.get(matchList.phase);
if (phaseRuleSet != ALL_RULES) {
- if (!phaseRuleSet.contains(ruleClassName)) {
+ String ruleDescription = match.getRule().toString();
+ if (!phaseRuleSet.contains(ruleDescription)) {
continue;
}
}
diff --git a/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvFieldType.java b/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvFieldType.java
index 66adfc6..99ab0ad 100644
--- a/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvFieldType.java
+++ b/example/csv/src/main/java/org/apache/calcite/adapter/csv/CsvFieldType.java
@@ -56,7 +56,7 @@ enum CsvFieldType {
}
CsvFieldType(Primitive primitive) {
- this(primitive.boxClass, primitive.primitiveClass.getSimpleName());
+ this(primitive.boxClass, primitive.primitiveName);
}
CsvFieldType(Class clazz, String simpleName) {
diff --git a/file/src/main/java/org/apache/calcite/adapter/file/FileFieldType.java b/file/src/main/java/org/apache/calcite/adapter/file/FileFieldType.java
index 3b3c5b9..3b75bb5 100644
--- a/file/src/main/java/org/apache/calcite/adapter/file/FileFieldType.java
+++ b/file/src/main/java/org/apache/calcite/adapter/file/FileFieldType.java
@@ -59,7 +59,7 @@ enum FileFieldType {
builder.put(value.clazz.getSimpleName(), value);
if (value.primitive != null) {
- builder.put(value.primitive.primitiveClass.getSimpleName(), value);
+ builder.put(value.primitive.primitiveName, value);
}
}
MAP = builder.build();
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/ConstantExpression.java b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/ConstantExpression.java
index 129ecaf..7680e0b 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/ConstantExpression.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/ConstantExpression.java
@@ -132,7 +132,7 @@ public class ConstantExpression extends Expression {
}
final Primitive primitive2 = Primitive.ofBox(type);
if (primitive2 != null) {
- writer.append(primitive2.boxClass.getSimpleName() + ".valueOf(");
+ writer.append(primitive2.boxName + ".valueOf(");
write(writer, value, primitive2.primitiveClass);
return writer.append(")");
}
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/FunctionExpression.java b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/FunctionExpression.java
index 06e3945..56e71f5 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/FunctionExpression.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/FunctionExpression.java
@@ -173,7 +173,7 @@ public final class FunctionExpression<F extends Function<?>>
final String bridgeResultTypeName =
isAbstractMethodPrimitive()
? Types.className(bridgeResultType)
- : Types.boxClassName(bridgeResultType);
+ : Types.className(Types.box(bridgeResultType));
if (!boxBridgeParams.equals(params)) {
writer
.append("public ")
@@ -204,7 +204,8 @@ public final class FunctionExpression<F extends Function<?>>
private boolean isAbstractMethodPrimitive() {
Method method = getAbstractMethod();
- return method != null && Primitive.is(method.getReturnType());
+ assert method != null;
+ return Primitive.is(method.getReturnType());
}
private String getAbstractMethodName() {
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Primitive.java b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Primitive.java
index db4a282..091284d 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Primitive.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Primitive.java
@@ -57,6 +57,7 @@ public enum Primitive {
public final Class primitiveClass;
public final Class boxClass;
public final String primitiveName; // e.g. "int"
+ public final String boxName;
private final int family;
/** The default value of this primitive class. This is the value
@@ -105,6 +106,7 @@ public enum Primitive {
this.primitiveName =
primitiveClass != null ? primitiveClass.getSimpleName() : null;
this.boxClass = boxClass;
+ this.boxName = boxClass != null ? boxClass.getSimpleName() : null;
this.defaultValue = defaultValue;
this.min = min;
this.maxNegative = maxNegative;
diff --git a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Types.java b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Types.java
index b7c8d33..65a2726 100644
--- a/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Types.java
+++ b/linq4j/src/main/java/org/apache/calcite/linq4j/tree/Types.java
@@ -197,30 +197,6 @@ public abstract class Types {
}
}
- /**
- * Boxes a type, if it is primitive, and returns the type name.
- * The type is abbreviated if it is in the "java.lang" package.
- *
- * <p>For example,
- * boxClassName(int) returns "Integer";
- * boxClassName(List<String>) returns "List<String>"</p>
- *
- * @param type Type
- *
- * @return Class name
- */
- static String boxClassName(Type type) {
- if (!(type instanceof Class)) {
- return type.toString();
- }
- Primitive primitive = Primitive.of(type);
- if (primitive != null) {
- return primitive.boxClass.getSimpleName();
- } else {
- return className(type);
- }
- }
-
public static Type box(Type type) {
Primitive primitive = Primitive.of(type);
if (primitive != null) {