diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conquery/SqlMatchingStats.java b/backend/src/main/java/com/bakdata/conquery/sql/conquery/SqlMatchingStats.java index f9e3d55844..eff787c82d 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conquery/SqlMatchingStats.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conquery/SqlMatchingStats.java @@ -1,6 +1,7 @@ package com.bakdata.conquery.sql.conquery; import java.sql.Date; +import jakarta.validation.constraints.NotBlank; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -237,6 +238,19 @@ private SelectJoinStep createMatchingStatsStatement(TreeConcep Field[] validityDates = collectValidityDateFields(connector); + Name tableName = name(connector.getResolvedTable().getName()); + + Condition condition = noCondition(); + + if (connector.getColumn() != null) { + condition = field(name(tableName, name(connector.getColumn().getColumn()))).isNotNull(); + } + + if (connector.getCondition() != null) { + CTConditionContext context = CTConditionContext.forConnector(connector, functionProvider); + condition = condition.and(connector.getCondition().convertToSqlCondition(context).condition()); + } + SelectConditionStep connectorTable = dslContext.select( TablePrimaryColumnUtil.findPrimaryColumn(connector.getResolvedTable(), defaultPrimaryColumn).as(PID_FIELD), @@ -244,13 +258,11 @@ private SelectJoinStep createMatchingStatsStatement(TreeConcep least(positiveInfinity, validityDates).as(LB_FIELD), greatest(negativeInfinity, validityDates).as(UB_FIELD), CONCEPT_ID_FIELD) - .from(table(name(connector.getResolvedTable().getName()))) + .from(table(tableName)) .leftJoin(mapping.table()) // join onto the concept-ids table to assign the most specific id. .on(mapping.joinCondition(connector)) - .where(connector.getCondition() != null ? connector.getCondition() - .convertToSqlCondition(CTConditionContext.forConnector(connector, functionProvider)) - .condition() : noCondition()); + .where(condition); connectorTables.add(connectorTable); } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CTConditionContext.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CTConditionContext.java index 4f2badcce4..c3cb2f684a 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CTConditionContext.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CTConditionContext.java @@ -1,12 +1,12 @@ package com.bakdata.conquery.sql.conversion.cqelement.concept; -import static org.jooq.impl.DSL.name; - import com.bakdata.conquery.models.datasets.concepts.Connector; import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import lombok.Value; import org.jooq.Name; +import static org.jooq.impl.DSL.name; + @Value public class CTConditionContext {