This is an automated email from the ASF dual-hosted git repository.

abhishek pushed a commit to branch 29.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/29.0.0 by this push:
     new e93c41457a0 Revert "Reduce amount of expression objects created during 
evaluations (#15552)" (#15768)
e93c41457a0 is described below

commit e93c41457a0194b94bf5abf2db0708b320977f4e
Author: Zoltan Haindrich <[email protected]>
AuthorDate: Mon Jan 29 06:10:16 2024 +0100

    Revert "Reduce amount of expression objects created during evaluations 
(#15552)" (#15768)
    
    This reverts commit 7552dc49fb7937b4de2ef26e9857b8d26003e4cc.
---
 .../druid/benchmark/ExpressionFilterBenchmark.java |   2 -
 .../benchmark/ExpressionSelectorBenchmark.java     | 156 +--------------------
 .../org/apache/druid/math/expr/ConstantExpr.java   |  20 +--
 .../java/org/apache/druid/math/expr/ExprEval.java  |   6 +-
 .../druid/math/expr/ExpressionTypeConversion.java  |   3 -
 .../java/org/apache/druid/math/expr/ExprTest.java  |   7 +-
 .../org/apache/druid/math/expr/OutputTypeTest.java |  11 --
 7 files changed, 12 insertions(+), 193 deletions(-)

diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionFilterBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionFilterBenchmark.java
index e7d8ad00bc5..eea1804292a 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionFilterBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionFilterBenchmark.java
@@ -25,7 +25,6 @@ import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.java.util.common.granularity.Granularities;
 import org.apache.druid.java.util.common.guava.Sequence;
 import org.apache.druid.java.util.common.io.Closer;
-import org.apache.druid.math.expr.ExpressionProcessing;
 import org.apache.druid.query.expression.TestExprMacroTable;
 import org.apache.druid.query.filter.AndDimFilter;
 import org.apache.druid.query.filter.DimFilter;
@@ -71,7 +70,6 @@ public class ExpressionFilterBenchmark
 {
   static {
     NullHandling.initializeForTests();
-    ExpressionProcessing.initializeForTests();
   }
 
   @Param({"1000000"})
diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionSelectorBenchmark.java
 
b/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionSelectorBenchmark.java
index d8e1dfc7646..fcc4cf24794 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionSelectorBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/ExpressionSelectorBenchmark.java
@@ -25,10 +25,8 @@ import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.java.util.common.granularity.Granularities;
 import org.apache.druid.java.util.common.guava.Sequence;
 import org.apache.druid.java.util.common.io.Closer;
-import org.apache.druid.math.expr.ExpressionProcessing;
 import org.apache.druid.query.dimension.DefaultDimensionSpec;
 import org.apache.druid.query.dimension.ExtractionDimensionSpec;
-import org.apache.druid.query.expression.LookupEnabledTestExprMacroTable;
 import org.apache.druid.query.expression.TestExprMacroTable;
 import org.apache.druid.query.extraction.StrlenExtractionFn;
 import org.apache.druid.query.extraction.TimeFormatExtractionFn;
@@ -61,21 +59,21 @@ import org.openjdk.jmh.annotations.State;
 import org.openjdk.jmh.annotations.TearDown;
 import org.openjdk.jmh.annotations.Warmup;
 import org.openjdk.jmh.infra.Blackhole;
+
 import java.util.BitSet;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 @State(Scope.Benchmark)
 @Fork(value = 1)
-@Warmup(iterations = 3, time = 3)
-@Measurement(iterations = 10, time = 3)
+@Warmup(iterations = 15)
+@Measurement(iterations = 30)
 @BenchmarkMode(Mode.AverageTime)
 @OutputTimeUnit(TimeUnit.MILLISECONDS)
 public class ExpressionSelectorBenchmark
 {
   static {
     NullHandling.initializeForTests();
-    ExpressionProcessing.initializeForTests();
   }
 
   @Param({"1000000"})
@@ -453,154 +451,6 @@ public class ExpressionSelectorBenchmark
     blackhole.consume(results);
   }
 
-  @Benchmark
-  public void caseSearched1(Blackhole blackhole)
-  {
-    final Sequence<Cursor> cursors = new 
QueryableIndexStorageAdapter(index).makeCursors(
-        null,
-        index.getDataInterval(),
-        VirtualColumns.create(
-            ImmutableList.of(
-                new ExpressionVirtualColumn(
-                    "v",
-                    "case_searched(s == 'asd' || isnull(s) || s == 'xxx', 1, s 
== 'foo' || s == 'bar', 2, 3)",
-                    ColumnType.LONG,
-                    TestExprMacroTable.INSTANCE
-                )
-            )
-        ),
-        Granularities.ALL,
-        false,
-        null
-    );
-
-    final List<?> results = cursors
-        .map(cursor -> {
-          final ColumnValueSelector selector = 
cursor.getColumnSelectorFactory().makeColumnValueSelector("v");
-          consumeLong(cursor, selector, blackhole);
-          return null;
-        })
-        .toList();
-
-    blackhole.consume(results);
-  }
-
-  @Benchmark
-  public void caseSearched2(Blackhole blackhole)
-  {
-    final Sequence<Cursor> cursors = new 
QueryableIndexStorageAdapter(index).makeCursors(
-        null,
-        index.getDataInterval(),
-        VirtualColumns.create(
-            ImmutableList.of(
-                new ExpressionVirtualColumn(
-                    "v",
-                    "case_searched(s == 'asd' || isnull(s) || n == 1, 1, n == 
2, 2, 3)",
-                    ColumnType.LONG,
-                    TestExprMacroTable.INSTANCE
-                )
-            )
-        ),
-        Granularities.ALL,
-        false,
-        null
-    );
-
-    final List<?> results = cursors
-        .map(cursor -> {
-          final ColumnValueSelector selector = 
cursor.getColumnSelectorFactory().makeColumnValueSelector("v");
-          consumeLong(cursor, selector, blackhole);
-          return null;
-        })
-        .toList();
-
-    blackhole.consume(results);
-  }
-
-  @Benchmark
-  public void caseSearchedWithLookup(Blackhole blackhole)
-  {
-    final Sequence<Cursor> cursors = new 
QueryableIndexStorageAdapter(index).makeCursors(
-        null,
-        index.getDataInterval(),
-        VirtualColumns.create(
-            ImmutableList.of(
-                new ExpressionVirtualColumn(
-                    "v",
-                    "case_searched(n == 1001, -1, "
-                        + "lookup(s, 'lookyloo') == 'asd1', 1, "
-                        + "lookup(s, 'lookyloo') == 'asd2', 2, "
-                        + "lookup(s, 'lookyloo') == 'asd3', 3, "
-                        + "lookup(s, 'lookyloo') == 'asd4', 4, "
-                        + "lookup(s, 'lookyloo') == 'asd5', 5, "
-                        + "-2)",
-                    ColumnType.LONG,
-                    LookupEnabledTestExprMacroTable.INSTANCE
-                )
-            )
-        ),
-        Granularities.ALL,
-        false,
-        null
-    );
-
-    final List<?> results = cursors
-        .map(cursor -> {
-          final ColumnValueSelector selector = 
cursor.getColumnSelectorFactory().makeColumnValueSelector("v");
-          consumeLong(cursor, selector, blackhole);
-          return null;
-        })
-        .toList();
-
-    blackhole.consume(results);
-  }
-
-  @Benchmark
-  public void caseSearchedWithLookup2(Blackhole blackhole)
-  {
-    final Sequence<Cursor> cursors = new 
QueryableIndexStorageAdapter(index).makeCursors(
-        null,
-        index.getDataInterval(),
-        VirtualColumns.create(
-            ImmutableList.of(
-                new ExpressionVirtualColumn(
-                    "ll",
-                    "lookup(s, 'lookyloo')",
-                    ColumnType.STRING,
-                    LookupEnabledTestExprMacroTable.INSTANCE
-                ),
-                new ExpressionVirtualColumn(
-                    "v",
-                    "case_searched(n == 1001, -1, "
-                        + "ll == 'asd1', 1, "
-                        + "ll == 'asd2', 2, "
-                        + "ll == 'asd3', 3, "
-                        + "ll == 'asd4', 4, "
-                        + "ll == 'asd5', 5, "
-                        + "-2)",
-                    ColumnType.LONG,
-                    LookupEnabledTestExprMacroTable.INSTANCE
-                )
-            )
-        ),
-        Granularities.ALL,
-        false,
-        null
-    );
-
-    final List<?> results = cursors
-        .map(cursor -> {
-          final ColumnValueSelector selector = 
cursor.getColumnSelectorFactory().makeColumnValueSelector("v");
-          consumeLong(cursor, selector, blackhole);
-          return null;
-        })
-        .toList();
-
-    blackhole.consume(results);
-  }
-
-
-
   private void consumeDimension(final Cursor cursor, final DimensionSelector 
selector, final Blackhole blackhole)
   {
     if (selector.getValueCardinality() >= 0) {
diff --git 
a/processing/src/main/java/org/apache/druid/math/expr/ConstantExpr.java 
b/processing/src/main/java/org/apache/druid/math/expr/ConstantExpr.java
index 8790b2ed614..fdf6f080ee9 100644
--- a/processing/src/main/java/org/apache/druid/math/expr/ConstantExpr.java
+++ b/processing/src/main/java/org/apache/druid/math/expr/ConstantExpr.java
@@ -157,12 +157,9 @@ class BigIntegerExpr extends ConstantExpr<BigInteger>
 
 class LongExpr extends ConstantExpr<Long>
 {
-  private final ExprEval expr;
-
   LongExpr(Long value)
   {
     super(ExpressionType.LONG, Preconditions.checkNotNull(value, "value"));
-    expr = ExprEval.ofLong(value);
   }
 
   @Override
@@ -174,7 +171,7 @@ class LongExpr extends ConstantExpr<Long>
   @Override
   public ExprEval eval(ObjectBinding bindings)
   {
-    return expr;
+    return ExprEval.ofLong(value);
   }
 
   @Override
@@ -243,12 +240,9 @@ class NullLongExpr extends ConstantExpr<Long>
 
 class DoubleExpr extends ConstantExpr<Double>
 {
-  private final ExprEval expr;
-
   DoubleExpr(Double value)
   {
     super(ExpressionType.DOUBLE, Preconditions.checkNotNull(value, "value"));
-    expr = ExprEval.ofDouble(value);
   }
 
   @Override
@@ -260,7 +254,7 @@ class DoubleExpr extends ConstantExpr<Double>
   @Override
   public ExprEval eval(ObjectBinding bindings)
   {
-    return expr;
+    return ExprEval.ofDouble(value);
   }
 
   @Override
@@ -329,12 +323,9 @@ class NullDoubleExpr extends ConstantExpr<Double>
 
 class StringExpr extends ConstantExpr<String>
 {
-  private final ExprEval expr;
-
   StringExpr(@Nullable String value)
   {
     super(ExpressionType.STRING, NullHandling.emptyToNullIfNeeded(value));
-    expr = ExprEval.of(value);
   }
 
   @Override
@@ -346,7 +337,7 @@ class StringExpr extends ConstantExpr<String>
   @Override
   public ExprEval eval(ObjectBinding bindings)
   {
-    return expr;
+    return ExprEval.of(value);
   }
 
   @Override
@@ -473,18 +464,15 @@ class ArrayExpr extends ConstantExpr<Object[]>
 
 class ComplexExpr extends ConstantExpr<Object>
 {
-  private final ExprEval expr;
-
   protected ComplexExpr(ExpressionType outputType, @Nullable Object value)
   {
     super(outputType, value);
-    expr = ExprEval.ofComplex(outputType, value);
   }
 
   @Override
   public ExprEval eval(ObjectBinding bindings)
   {
-    return expr;
+    return ExprEval.ofComplex(outputType, value);
   }
 
   @Override
diff --git a/processing/src/main/java/org/apache/druid/math/expr/ExprEval.java 
b/processing/src/main/java/org/apache/druid/math/expr/ExprEval.java
index 9c0f5e2736a..8b8cee07824 100644
--- a/processing/src/main/java/org/apache/druid/math/expr/ExprEval.java
+++ b/processing/src/main/java/org/apache/druid/math/expr/ExprEval.java
@@ -366,7 +366,7 @@ public abstract class ExprEval<T>
       case DOUBLE:
         return ExprEval.of(Evals.asDouble(value));
       case LONG:
-        return ofLongBoolean(value);
+        return ExprEval.of(Evals.asLong(value));
       case STRING:
         return ExprEval.of(String.valueOf(value));
       default:
@@ -379,7 +379,7 @@ public abstract class ExprEval<T>
    */
   public static ExprEval ofLongBoolean(boolean value)
   {
-    return value ? LongExprEval.TRUE : LongExprEval.FALSE;
+    return ExprEval.of(Evals.asLong(value));
   }
 
   public static ExprEval ofComplex(ExpressionType outputType, @Nullable Object 
value)
@@ -932,8 +932,6 @@ public abstract class ExprEval<T>
 
   private static class LongExprEval extends NumericExprEval
   {
-    private static final LongExprEval TRUE = new 
LongExprEval(Evals.asLong(true));
-    private static final LongExprEval FALSE = new 
LongExprEval(Evals.asLong(false));
     private static final LongExprEval OF_NULL = new LongExprEval(null);
 
     private LongExprEval(@Nullable Number value)
diff --git 
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeConversion.java
 
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeConversion.java
index efe0328a837..ba576afa0c1 100644
--- 
a/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeConversion.java
+++ 
b/processing/src/main/java/org/apache/druid/math/expr/ExpressionTypeConversion.java
@@ -55,9 +55,6 @@ public class ExpressionTypeConversion
   {
     ExpressionType type = eval.type();
     ExpressionType otherType = otherEval.type();
-    if (type == otherType && type.getType().isPrimitive()) {
-      return type;
-    }
     if (Types.is(type, ExprType.STRING) && Types.is(otherType, 
ExprType.STRING)) {
       return ExpressionType.STRING;
     }
diff --git a/processing/src/test/java/org/apache/druid/math/expr/ExprTest.java 
b/processing/src/test/java/org/apache/druid/math/expr/ExprTest.java
index f8d222e0838..3c089ac5b6a 100644
--- a/processing/src/test/java/org/apache/druid/math/expr/ExprTest.java
+++ b/processing/src/test/java/org/apache/druid/math/expr/ExprTest.java
@@ -139,7 +139,7 @@ public class ExprTest
   public void testEqualsContractForStringExpr()
   {
     EqualsVerifier.forClass(StringExpr.class)
-                  .withIgnoredFields("outputType", "expr")
+                  .withIgnoredFields("outputType")
                   .withPrefabValues(ExpressionType.class, 
ExpressionType.STRING, ExpressionType.DOUBLE)
                   .usingGetClass()
                   .verify();
@@ -149,7 +149,7 @@ public class ExprTest
   public void testEqualsContractForDoubleExpr()
   {
     EqualsVerifier.forClass(DoubleExpr.class)
-                  .withIgnoredFields("outputType", "expr")
+                  .withIgnoredFields("outputType")
                   .withPrefabValues(ExpressionType.class, 
ExpressionType.DOUBLE, ExpressionType.LONG)
                   .usingGetClass()
                   .verify();
@@ -159,7 +159,7 @@ public class ExprTest
   public void testEqualsContractForLongExpr()
   {
     EqualsVerifier.forClass(LongExpr.class)
-                  .withIgnoredFields("outputType", "expr")
+                  .withIgnoredFields("outputType")
                   .withPrefabValues(ExpressionType.class, ExpressionType.LONG, 
ExpressionType.STRING)
                   .usingGetClass()
                   .verify();
@@ -187,7 +187,6 @@ public class ExprTest
                       ExpressionTypeFactory.getInstance().ofComplex("bar")
                   )
                   .withNonnullFields("outputType")
-                  .withIgnoredFields("expr")
                   .usingGetClass()
                   .verify();
   }
diff --git 
a/processing/src/test/java/org/apache/druid/math/expr/OutputTypeTest.java 
b/processing/src/test/java/org/apache/druid/math/expr/OutputTypeTest.java
index d313749fef8..f8d663abc70 100644
--- a/processing/src/test/java/org/apache/druid/math/expr/OutputTypeTest.java
+++ b/processing/src/test/java/org/apache/druid/math/expr/OutputTypeTest.java
@@ -453,8 +453,6 @@ public class OutputTypeTest extends 
InitializedNullHandlingTest
     final ExprEval<?> longEval = ExprEval.of(1L);
     final ExprEval<?> doubleEval = ExprEval.of(1.0);
     final ExprEval<?> arrayEval = ExprEval.ofLongArray(new Long[]{1L, 2L, 3L});
-    final ExprEval<?> complexEval = 
ExprEval.ofComplex(ExpressionType.UNKNOWN_COMPLEX, new Object());
-    final ExprEval<?> complexEval2 = ExprEval.ofComplex(new 
ExpressionType(ExprType.COMPLEX, null, null), new Object());
 
     // only long stays long
     Assert.assertEquals(ExpressionType.LONG, 
ExpressionTypeConversion.autoDetect(longEval, longEval));
@@ -481,15 +479,6 @@ public class OutputTypeTest extends 
InitializedNullHandlingTest
     Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(nullStringEval, arrayEval));
     Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(doubleEval, arrayEval));
     Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(longEval, arrayEval));
-
-    Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(longEval, complexEval));
-    Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(doubleEval, complexEval));
-    Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(arrayEval, complexEval));
-    Assert.assertEquals(ExpressionType.DOUBLE, 
ExpressionTypeConversion.autoDetect(complexEval, complexEval));
-    Assert.assertEquals(
-        ExpressionTypeConversion.autoDetect(complexEval, complexEval),
-        ExpressionTypeConversion.autoDetect(complexEval2, complexEval)
-    );
   }
 
   @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to