You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by cg...@apache.org on 2022/01/03 01:58:30 UTC
[drill] branch master updated: DRILL-8088: Improve expression evaluation performance (#2412)
This is an automated email from the ASF dual-hosted git repository.
cgivre pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
The following commit(s) were added to refs/heads/master by this push:
new 84d3d32 DRILL-8088: Improve expression evaluation performance (#2412)
84d3d32 is described below
commit 84d3d32d1d76ce945f9c357c5b6f79119dae95f5
Author: leon <32...@qq.com>
AuthorDate: Mon Jan 3 09:58:20 2022 +0800
DRILL-8088: Improve expression evaluation performance (#2412)
* DRILL-8088: Improve expression evaluation performance
* fix checkstyle
---
.../org/apache/drill/exec/expr/EvaluationVisitor.java | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
index 18b7af4..88eca6d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/EvaluationVisitor.java
@@ -79,6 +79,7 @@ import org.apache.drill.exec.vector.ValueHolderHelper;
import org.apache.drill.exec.vector.complex.reader.FieldReader;
import org.apache.drill.shaded.guava.com.google.common.base.Function;
+import org.apache.drill.shaded.guava.com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -217,7 +218,7 @@ public class EvaluationVisitor {
void newScope() {
mapStack.push(previousExpressions);
- previousExpressions = new HashMap<>(previousExpressions);
+ previousExpressions = Maps.newHashMap();
}
void leaveScope() {
@@ -229,7 +230,17 @@ public class EvaluationVisitor {
* Get a HoldingContainer for the expression if it had been already evaluated
*/
private HoldingContainer getPrevious(LogicalExpression expression, MappingSet mappingSet) {
- HoldingContainer previous = previousExpressions.get(new ExpressionHolder(expression, mappingSet));
+ ExpressionHolder holder = new ExpressionHolder(expression, mappingSet);
+ HoldingContainer previous = null;
+ for (Map<ExpressionHolder,HoldingContainer> m : mapStack) {
+ previous = m.get(holder);
+ if (previous != null) {
+ break;
+ }
+ }
+ if (previous == null) {
+ previous = previousExpressions.get(holder);
+ }
if (previous != null) {
logger.debug("Found previously evaluated expression: {}", ExpressionStringBuilder.toString(expression));
}