diff --git a/backend/src/main/java/com/bakdata/conquery/models/events/CBlock.java b/backend/src/main/java/com/bakdata/conquery/models/events/CBlock.java index 8dec9ff316..424fe60dc1 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/events/CBlock.java +++ b/backend/src/main/java/com/bakdata/conquery/models/events/CBlock.java @@ -139,30 +139,31 @@ else if (treeConcept.countElements() == 1) { try { - // Events without values are assigned to the root - // Events can also be filtered, allowing a single table to be used by multiple connectors. - if (column != null && !bucket.has(event, column)) { - mostSpecificChildren[event] = treeConcept.getPrefix(); - continue; - } - String stringValue = ""; - if (column != null) { + final boolean has = column != null && bucket.has(event, column); + + if (column != null && has) { stringValue = bucket.getString(event, column); } + // Events can also be filtered, allowing a single table to be used by multiple connectors. // Lazy evaluation of map to avoid allocations if possible. // Copy event for closure. final int _event = event; final CalculatedValue> rowMap = new CalculatedValue<>(() -> bucket.calculateMap(_event)); - if (connectorCondition != null && !connectorCondition.matches(stringValue, rowMap)) { mostSpecificChildren[event] = Connector.NOT_CONTAINED; continue; } + // Events without values are assigned to the root + if (column != null && !has) { + mostSpecificChildren[event] = treeConcept.getPrefix(); + continue; + } + final ConceptTreeChild child = cache == null ? treeConcept.findMostSpecificChild(stringValue, rowMap) : cache.findMostSpecificChild(stringValue, rowMap);