Search in sources :

Example 1 with MultilineEntityResult

use of com.bakdata.conquery.models.query.results.MultilineEntityResult in project conquery by bakdata.

the class TableExportQueryPlan method execute.

@Override
public Optional<MultilineEntityResult> execute(QueryExecutionContext ctx, Entity entity) {
    Optional<? extends EntityResult> result = subPlan.execute(ctx, entity);
    if (result.isEmpty() || tables.isEmpty()) {
        return Optional.empty();
    }
    List<Object[]> results = new ArrayList<>();
    final int totalColumns = positions.values().stream().mapToInt(i -> i).max().getAsInt() + 1;
    for (TableExportDescription exportDescription : tables) {
        for (Bucket bucket : ctx.getEntityBucketsForTable(entity, exportDescription.getTable())) {
            int entityId = entity.getId();
            if (!bucket.containsEntity(entityId)) {
                continue;
            }
            int start = bucket.getEntityStart(entityId);
            int end = bucket.getEntityEnd(entityId);
            for (int event = start; event < end; event++) {
                // Export Full-table if it has no validity date.
                if (exportDescription.getValidityDateColumn() != null && !bucket.eventIsContainedIn(event, exportDescription.getValidityDateColumn(), CDateSet.create(dateRange))) {
                    continue;
                }
                Object[] entry = new Object[totalColumns];
                for (Column column : exportDescription.getTable().getColumns()) {
                    if (!bucket.has(event, column)) {
                        continue;
                    }
                    if (column.equals(exportDescription.getValidityDateColumn())) {
                        entry[0] = List.of(bucket.getAsDateRange(event, column));
                    } else {
                        entry[positions.get(column)] = bucket.createScriptValue(event, column);
                    }
                }
                results.add(entry);
            }
        }
    }
    return Optional.of(new MultilineEntityResult(entity.getId(), results));
}
Also used : Bucket(com.bakdata.conquery.models.events.Bucket) Getter(lombok.Getter) Table(com.bakdata.conquery.models.datasets.Table) EntityResult(com.bakdata.conquery.models.query.results.EntityResult) RequiredArgsConstructor(lombok.RequiredArgsConstructor) CDateRange(com.bakdata.conquery.models.common.daterange.CDateRange) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) ArrayList(java.util.ArrayList) Entity(com.bakdata.conquery.models.query.entity.Entity) List(java.util.List) QueryExecutionContext(com.bakdata.conquery.models.query.QueryExecutionContext) Map(java.util.Map) Aggregator(com.bakdata.conquery.models.query.queryplan.aggregators.Aggregator) Optional(java.util.Optional) Nullable(javax.annotation.Nullable) CDateSet(com.bakdata.conquery.models.common.CDateSet) Column(com.bakdata.conquery.models.datasets.Column) Bucket(com.bakdata.conquery.models.events.Bucket) Column(com.bakdata.conquery.models.datasets.Column) ArrayList(java.util.ArrayList) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult)

Example 2 with MultilineEntityResult

use of com.bakdata.conquery.models.query.results.MultilineEntityResult in project conquery by bakdata.

the class FormQueryPlan method execute.

@Override
public Optional<MultilineEntityResult> execute(QueryExecutionContext ctx, Entity entity) {
    if (!isOfInterest(entity)) {
        // If the entity is not covered by the query generate a basic result line with constants but without features
        return Optional.of(createResultForNotContained(entity, null));
    }
    List<Object[]> resultValues = new ArrayList<>(dateContexts.size());
    for (DateContext dateContext : dateContexts) {
        CDateSet dateRestriction = CDateSet.create(ctx.getDateRestriction());
        dateRestriction.retainAll(dateContext.getDateRange());
        // Reference the dates per sub-query, don't accumulate dates of all sub-queries
        QueryExecutionContext innerContext = QueryUtils.determineDateAggregatorForContext(ctx, features::getValidityDateAggregator).withDateRestriction(dateRestriction);
        features.init(ctx, entity);
        Optional<SinglelineEntityResult> subResult = features.execute(innerContext, entity);
        if (subResult.isEmpty()) {
            resultValues.addAll(createResultForNotContained(entity, dateContext).listResultLines());
            continue;
        }
        resultValues.addAll(ResultModifier.modify(subResult.get(), ResultModifier.existAggValuesSetterFor(features.getAggregators(), OptionalInt.of(0)).unaryAndThen(v -> addConstants(v, dateContext))).listResultLines());
    }
    return Optional.of(new MultilineEntityResult(entity.getId(), resultValues));
}
Also used : Getter(lombok.Getter) SinglelineEntityResult(com.bakdata.conquery.models.query.results.SinglelineEntityResult) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) OptionalInt(java.util.OptionalInt) ArrayConceptQueryPlan(com.bakdata.conquery.models.query.queryplan.ArrayConceptQueryPlan) ArrayList(java.util.ArrayList) Entity(com.bakdata.conquery.models.query.entity.Entity) List(java.util.List) DateContext(com.bakdata.conquery.models.forms.util.DateContext) QueryExecutionContext(com.bakdata.conquery.models.query.QueryExecutionContext) ResultModifier(com.bakdata.conquery.models.forms.util.ResultModifier) Aggregator(com.bakdata.conquery.models.query.queryplan.aggregators.Aggregator) QueryUtils(com.bakdata.conquery.util.QueryUtils) Optional(java.util.Optional) QueryPlan(com.bakdata.conquery.models.query.queryplan.QueryPlan) CDateSet(com.bakdata.conquery.models.common.CDateSet) QueryExecutionContext(com.bakdata.conquery.models.query.QueryExecutionContext) ArrayList(java.util.ArrayList) DateContext(com.bakdata.conquery.models.forms.util.DateContext) SinglelineEntityResult(com.bakdata.conquery.models.query.results.SinglelineEntityResult) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) CDateSet(com.bakdata.conquery.models.common.CDateSet)

Example 3 with MultilineEntityResult

use of com.bakdata.conquery.models.query.results.MultilineEntityResult in project conquery by bakdata.

the class FormQueryPlan method createResultForNotContained.

private MultilineEntityResult createResultForNotContained(Entity entity, DateContext dateContext) {
    List<Object[]> result = new ArrayList<>();
    result.add(new Object[features.getAggregatorSize()]);
    return ResultModifier.modify(new MultilineEntityResult(entity.getId(), result), ResultModifier.existAggValuesSetterFor(getAggregators(), OptionalInt.of(0)).unaryAndThen(v -> addConstants(v, dateContext)));
}
Also used : Getter(lombok.Getter) SinglelineEntityResult(com.bakdata.conquery.models.query.results.SinglelineEntityResult) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) OptionalInt(java.util.OptionalInt) ArrayConceptQueryPlan(com.bakdata.conquery.models.query.queryplan.ArrayConceptQueryPlan) ArrayList(java.util.ArrayList) Entity(com.bakdata.conquery.models.query.entity.Entity) List(java.util.List) DateContext(com.bakdata.conquery.models.forms.util.DateContext) QueryExecutionContext(com.bakdata.conquery.models.query.QueryExecutionContext) ResultModifier(com.bakdata.conquery.models.forms.util.ResultModifier) Aggregator(com.bakdata.conquery.models.query.queryplan.aggregators.Aggregator) QueryUtils(com.bakdata.conquery.util.QueryUtils) Optional(java.util.Optional) QueryPlan(com.bakdata.conquery.models.query.queryplan.QueryPlan) CDateSet(com.bakdata.conquery.models.common.CDateSet) ArrayList(java.util.ArrayList) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult)

Example 4 with MultilineEntityResult

use of com.bakdata.conquery.models.query.results.MultilineEntityResult in project conquery by bakdata.

the class JacksonTest method testNonStrictNumbers.

@Test
public void testNonStrictNumbers() throws JSONException, IOException {
    SerializationTestUtil.forType(Double.class).test(Double.NaN, null);
    SerializationTestUtil.forType(Double.class).test(Double.NEGATIVE_INFINITY, null);
    SerializationTestUtil.forType(Double.class).test(Double.POSITIVE_INFINITY, null);
    SerializationTestUtil.forType(Double.class).test(Double.MAX_VALUE);
    SerializationTestUtil.forType(Double.class).test(Double.MIN_VALUE);
    SerializationTestUtil.forType(EntityResult.class).test(new MultilineEntityResult(4, List.of(new Object[] { 0, 1, 2 }, new Object[] { Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY })), new MultilineEntityResult(4, List.of(new Object[] { 0, 1, 2 }, new Object[] { null, null, null })));
}
Also used : EntityResult(com.bakdata.conquery.models.query.results.EntityResult) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) Test(org.junit.jupiter.api.Test)

Example 5 with MultilineEntityResult

use of com.bakdata.conquery.models.query.results.MultilineEntityResult in project conquery by bakdata.

the class EntityDateQueryPlan method execute.

@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
    // Execute the prerequisite query
    Optional<EntityResult> preResult = query.execute(ctx, entity);
    if (preResult.isEmpty()) {
        return Optional.empty();
    }
    Optional<DateAggregator> validityDateAggregator = query.getValidityDateAggregator();
    if (validityDateAggregator.isEmpty()) {
        return Optional.empty();
    }
    final CDateSet aggregationResult = validityDateAggregator.get().createAggregationResult();
    aggregationResult.retainAll(dateRestriction);
    // Generate DateContexts in the provided resolutions
    List<DateContext> contexts = new ArrayList<>();
    for (CDateRange range : aggregationResult.asRanges()) {
        contexts.addAll(DateContext.generateAbsoluteContexts(range, resolutionsAndAlignments));
    }
    FormQueryPlan resolutionQuery = new FormQueryPlan(contexts, features);
    return resolutionQuery.execute(ctx, entity);
}
Also used : ArrayList(java.util.ArrayList) CDateRange(com.bakdata.conquery.models.common.daterange.CDateRange) EntityResult(com.bakdata.conquery.models.query.results.EntityResult) MultilineEntityResult(com.bakdata.conquery.models.query.results.MultilineEntityResult) DateContext(com.bakdata.conquery.models.forms.util.DateContext) DateAggregator(com.bakdata.conquery.models.query.queryplan.DateAggregator) CDateSet(com.bakdata.conquery.models.common.CDateSet)

Aggregations

MultilineEntityResult (com.bakdata.conquery.models.query.results.MultilineEntityResult)6 CDateSet (com.bakdata.conquery.models.common.CDateSet)5 ArrayList (java.util.ArrayList)5 DateContext (com.bakdata.conquery.models.forms.util.DateContext)4 EntityResult (com.bakdata.conquery.models.query.results.EntityResult)4 QueryExecutionContext (com.bakdata.conquery.models.query.QueryExecutionContext)3 Entity (com.bakdata.conquery.models.query.entity.Entity)3 Aggregator (com.bakdata.conquery.models.query.queryplan.aggregators.Aggregator)3 List (java.util.List)3 Optional (java.util.Optional)3 OptionalInt (java.util.OptionalInt)3 Getter (lombok.Getter)3 CDateRange (com.bakdata.conquery.models.common.daterange.CDateRange)2 ResultModifier (com.bakdata.conquery.models.forms.util.ResultModifier)2 ArrayConceptQueryPlan (com.bakdata.conquery.models.query.queryplan.ArrayConceptQueryPlan)2 QueryPlan (com.bakdata.conquery.models.query.queryplan.QueryPlan)2 SinglelineEntityResult (com.bakdata.conquery.models.query.results.SinglelineEntityResult)2 QueryUtils (com.bakdata.conquery.util.QueryUtils)2 Column (com.bakdata.conquery.models.datasets.Column)1 Table (com.bakdata.conquery.models.datasets.Table)1