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