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

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


The following commit(s) were added to refs/heads/master by this push:
     new 1a96bc96a6d make VirtualColumns.equivalence lazy computed (#18370)
1a96bc96a6d is described below

commit 1a96bc96a6d63d77f95247703b2b38ba5490fc60
Author: Clint Wylie <cwy...@apache.org>
AuthorDate: Tue Aug 5 16:17:42 2025 -0700

    make VirtualColumns.equivalence lazy computed (#18370)
---
 .../org/apache/druid/segment/VirtualColumns.java   | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java 
b/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
index 676067a959f..5cff089a11e 100644
--- a/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
+++ b/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
@@ -133,7 +135,7 @@ public class VirtualColumns implements Cacheable
   private final List<VirtualColumn> virtualColumns;
   private final List<String> virtualColumnNames;
   // For equivalence
-  private final Map<VirtualColumn.EquivalenceKey, VirtualColumn> equivalence;
+  private final Supplier<Map<VirtualColumn.EquivalenceKey, VirtualColumn>> 
equivalence;
 
   // For getVirtualColumn:
   private final Map<String, VirtualColumn> withDotSupport;
@@ -151,15 +153,21 @@ public class VirtualColumns implements Cacheable
     this.withoutDotSupport = withoutDotSupport;
     this.virtualColumnNames = new ArrayList<>(virtualColumns.size());
     this.hasNoDotColumns = withDotSupport.isEmpty();
-    this.equivalence = Maps.newHashMapWithExpectedSize(virtualColumns.size());
     for (VirtualColumn virtualColumn : virtualColumns) {
       detectCycles(virtualColumn, null);
       virtualColumnNames.add(virtualColumn.getOutputName());
-      VirtualColumn.EquivalenceKey key = virtualColumn.getEquivalanceKey();
-      if (key != null) {
-        equivalence.put(key, virtualColumn);
-      }
     }
+    this.equivalence = Suppliers.memoize(() -> {
+      final Map<VirtualColumn.EquivalenceKey, VirtualColumn> equiv =
+          Maps.newHashMapWithExpectedSize(virtualColumns.size());
+      for (VirtualColumn virtualColumn : virtualColumns) {
+        final VirtualColumn.EquivalenceKey key = 
virtualColumn.getEquivalanceKey();
+        if (key != null) {
+          equiv.putIfAbsent(key, virtualColumn);
+        }
+      }
+      return equiv;
+    });
   }
 
   /**
@@ -195,7 +203,7 @@ public class VirtualColumns implements Cacheable
   @Nullable
   public VirtualColumn findEquivalent(VirtualColumn virtualColumn)
   {
-    return equivalence.get(virtualColumn.getEquivalanceKey());
+    return equivalence.get().get(virtualColumn.getEquivalanceKey());
   }
 
   /**


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org
For additional commands, e-mail: commits-h...@druid.apache.org

Reply via email to