Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -278,7 +278,14 @@ public static class SqlError extends ConqueryError {
public String getMessageTemplate(ErrorMessages errorMessages) {
return errorMessages.sqlError(error);
}
}


@CPSType(base = ConqueryError.class, id = "CQ_RELATIVE_NO_DATES")
@RequiredArgsConstructor(onConstructor_ = {@JsonCreator})
public static class RelativeFormMissingDatesError extends ConqueryError {
@Override
public String getMessageTemplate(ErrorMessages errorMessages) {
return errorMessages.relativeFormMissingDates();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,4 +68,8 @@ public interface ErrorMessages {
@En("The id {0} could not be resolved'.")
@De("Die id {0} konnte nicht aufgelöst werden.")
String idUnresolvable(Id<?, ?> id);

@En("The selected query does not contain any dates.")
@De("Die ausgewählte Anfrage enthält keine Zeiträume.")
String relativeFormMissingDates();
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
import com.bakdata.conquery.apiv1.query.QueryDescription;
import com.bakdata.conquery.apiv1.query.ResultHeaders;
import com.bakdata.conquery.apiv1.query.TemporalSamplerFactory;
import com.bakdata.conquery.apiv1.query.concept.specific.CQConcept;
import com.bakdata.conquery.apiv1.query.concept.specific.external.CQExternal;
import com.bakdata.conquery.io.cps.CPSType;
import com.bakdata.conquery.models.error.ConqueryError;
import com.bakdata.conquery.models.forms.util.CalendarUnit;
import com.bakdata.conquery.models.identifiable.ids.specific.ManagedExecutionId;
import com.bakdata.conquery.models.query.DateAggregationMode;
Expand All @@ -29,13 +32,15 @@
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@CPSType(id="RELATIVE_FORM_QUERY", base=QueryDescription.class)
@CPSType(id = "RELATIVE_FORM_QUERY", base = QueryDescription.class)
@Getter
@RequiredArgsConstructor(onConstructor_ = {@JsonCreator})
public class RelativeFormQuery extends Query {
@NotNull @Valid
@NotNull
@Valid
private final Query query;
@NotNull @Valid
@NotNull
@Valid
private final ArrayConceptQuery features;
@NotNull
private final TemporalSamplerFactory indexSelector;
Expand All @@ -54,6 +59,20 @@ public class RelativeFormQuery extends Query {
public void resolve(QueryResolveContext context) {
query.resolve(context.withDateAggregationMode(DateAggregationMode.MERGE));
features.resolve(context.withDateAggregationMode(DateAggregationMode.NONE));

boolean noDates = Visitable.stream(query)
.noneMatch(v ->
switch (v) {
case CQConcept cqConcept -> cqConcept.isAggregateEventDates();
case CQExternal external -> external.containsDates();
default -> false;
}
);

if (noDates) {
throw new ConqueryError.RelativeFormMissingDatesError();
}

}

@Override
Expand All @@ -71,7 +90,7 @@ public void collectRequiredQueries(Set<ManagedExecutionId> requiredQueries) {
query.collectRequiredQueries(requiredQueries);
features.collectRequiredQueries(requiredQueries);
}

@Override
public List<ResultInfo> getResultInfos() {
List<ResultInfo> resultInfos = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public class RelativeFormQueryPlan implements QueryPlan<MultilineEntityResult> {
@Override
public void init(QueryExecutionContext ctxt, Entity entity) {
query.init(ctxt, entity);


featurePlan.init(ctxt, entity);

indexSelector = indexSelectorFactory.sampler(ctxt.getToday());
Expand All @@ -70,9 +72,7 @@ public void init(QueryExecutionContext ctxt, Entity entity) {

@Override
public Optional<MultilineEntityResult> execute(QueryExecutionContext ctx, Entity entity) {

// Don't set the query date aggregator here because the subqueries should set their aggregator independently

Optional<? extends EntityResult> preResult = query.execute(ctx, entity);

if (preResult.isEmpty()) {
Expand All @@ -88,7 +88,7 @@ public Optional<MultilineEntityResult> execute(QueryExecutionContext ctx, Entity

// dateset is empty or sampling failed.
if (sampled.isEmpty()) {
log.warn("Sampled empty result for Entity[{}]: `{}({})`", contained.getEntityId(), indexSelector, dateSet);
log.trace("Sampled empty result for Entity[{}]: `{}({})`", contained.getEntityId(), indexSelector, dateSet);
List<Object[]> results = new ArrayList<>();
results.add(new Object[size]);
return Optional.of(
Expand Down
Loading