diff --git a/backend/src/main/java/com/bakdata/conquery/mode/cluster/ClusterStorageListener.java b/backend/src/main/java/com/bakdata/conquery/mode/cluster/ClusterStorageListener.java index 79dfe49306..46d3f36194 100644 --- a/backend/src/main/java/com/bakdata/conquery/mode/cluster/ClusterStorageListener.java +++ b/backend/src/main/java/com/bakdata/conquery/mode/cluster/ClusterStorageListener.java @@ -18,49 +18,43 @@ import com.bakdata.conquery.models.worker.DatasetRegistry; import com.bakdata.conquery.models.worker.DistributedNamespace; import com.bakdata.conquery.models.worker.WorkerHandler; -import lombok.AllArgsConstructor; /** * Propagates changes of stored entities to relevant ConQuery shards in the cluster. */ -@AllArgsConstructor -public -class ClusterStorageListener implements StorageListener { - - private final JobManager jobManager; - private final DatasetRegistry datasetRegistry; +public record ClusterStorageListener(JobManager jobManager, DatasetRegistry datasetRegistry) implements StorageListener { @Override public void onAddSecondaryId(SecondaryIdDescription secondaryId) { - datasetRegistry.get(secondaryId.getDataset()).getWorkerHandler().sendToAll(new UpdateSecondaryId(secondaryId)); + datasetRegistry().get(secondaryId.getDataset()).getWorkerHandler().sendToAll(new UpdateSecondaryId(secondaryId)); } @Override public void onDeleteSecondaryId(SecondaryIdDescriptionId secondaryId) { - datasetRegistry.get(secondaryId.getDataset()).getWorkerHandler().sendToAll(new RemoveSecondaryId(secondaryId)); + datasetRegistry().get(secondaryId.getDataset()).getWorkerHandler().sendToAll(new RemoveSecondaryId(secondaryId)); } @Override public void onAddTable(Table table) { - datasetRegistry.get(table.getDataset()).getWorkerHandler().sendToAll(new UpdateTable(table)); + datasetRegistry().get(table.getDataset()).getWorkerHandler().sendToAll(new UpdateTable(table)); } @Override public void onRemoveTable(TableId table) { - datasetRegistry.get(table.getDataset()).getWorkerHandler().sendToAll(new RemoveTable(table)); + datasetRegistry().get(table.getDataset()).getWorkerHandler().sendToAll(new RemoveTable(table)); } @Override public void onAddConcept(Concept concept) { - WorkerHandler handler = datasetRegistry.get(concept.getDataset()).getWorkerHandler(); + WorkerHandler handler = datasetRegistry().get(concept.getDataset()).getWorkerHandler(); SimpleJob simpleJob = new SimpleJob(String.format("sendToAll : Add %s ", concept.getId()), () -> handler.sendToAll(new UpdateConcept(concept))); - jobManager.addSlowJob(simpleJob); + jobManager().addSlowJob(simpleJob); } @Override public void onDeleteConcept(ConceptId concept) { - WorkerHandler handler = datasetRegistry.get(concept.getDataset()).getWorkerHandler(); + WorkerHandler handler = datasetRegistry().get(concept.getDataset()).getWorkerHandler(); SimpleJob simpleJob = new SimpleJob("sendToAll: remove " + concept, () -> handler.sendToAll(new RemoveConcept(concept))); - jobManager.addSlowJob(simpleJob); + jobManager().addSlowJob(simpleJob); } } diff --git a/backend/src/main/java/com/bakdata/conquery/mode/local/LocalManagerProvider.java b/backend/src/main/java/com/bakdata/conquery/mode/local/LocalManagerProvider.java index 725c696490..fe9d62d8ce 100644 --- a/backend/src/main/java/com/bakdata/conquery/mode/local/LocalManagerProvider.java +++ b/backend/src/main/java/com/bakdata/conquery/mode/local/LocalManagerProvider.java @@ -12,6 +12,7 @@ import com.bakdata.conquery.mode.NamespaceHandler; import com.bakdata.conquery.mode.cluster.InternalMapperFactory; import com.bakdata.conquery.models.config.ConqueryConfig; +import com.bakdata.conquery.models.jobs.JobManager; import com.bakdata.conquery.models.worker.DatasetRegistry; import com.bakdata.conquery.models.worker.LocalNamespace; import com.bakdata.conquery.models.worker.ShardNodeInformation; @@ -29,6 +30,8 @@ public DelegateManager provideManager(ConqueryConfig config, Env final ConnectionManager connectionManager = config.getSqlConnectorConfig().toConnectionManager(environment); + final JobManager jobManager = ManagerProvider.newJobManager(config); + final MetaStorage storage = new MetaStorage(config.getStorage()); final InternalMapperFactory internalMapperFactory = new InternalMapperFactory(config, environment.getValidator()); final NamespaceHandler namespaceHandler = new LocalNamespaceHandler(config, internalMapperFactory, connectionManager, clock); @@ -40,7 +43,7 @@ public DelegateManager provideManager(ConqueryConfig config, Env datasetRegistry, storage, new FailingImportHandler(), - new LocalStorageListener(), + new LocalStorageListener(jobManager, datasetRegistry), EMPTY_NODE_PROVIDER, List.of(), internalMapperFactory, diff --git a/backend/src/main/java/com/bakdata/conquery/mode/local/LocalNamespaceHandler.java b/backend/src/main/java/com/bakdata/conquery/mode/local/LocalNamespaceHandler.java index e0442c6c26..fced1ca2da 100644 --- a/backend/src/main/java/com/bakdata/conquery/mode/local/LocalNamespaceHandler.java +++ b/backend/src/main/java/com/bakdata/conquery/mode/local/LocalNamespaceHandler.java @@ -13,6 +13,7 @@ import com.bakdata.conquery.models.worker.DatasetRegistry; import com.bakdata.conquery.models.worker.LocalNamespace; import com.bakdata.conquery.sql.conquery.SqlExecutionManager; +import com.bakdata.conquery.sql.conquery.SqlMatchingStats; import com.bakdata.conquery.sql.conversion.NodeConversions; import com.bakdata.conquery.sql.conversion.SqlConverter; import com.bakdata.conquery.sql.conversion.dialect.DialectBundle; @@ -62,7 +63,8 @@ public LocalNamespace createNamespace( dslContext, sqlStorageHandler, namespaceData.jobManager(), namespaceData.filterSearch(), - sqlEntityResolver + sqlEntityResolver, + connection.getConnection() ); } diff --git a/backend/src/main/java/com/bakdata/conquery/mode/local/LocalStorageListener.java b/backend/src/main/java/com/bakdata/conquery/mode/local/LocalStorageListener.java index 8027cabd3e..0d8091d425 100644 --- a/backend/src/main/java/com/bakdata/conquery/mode/local/LocalStorageListener.java +++ b/backend/src/main/java/com/bakdata/conquery/mode/local/LocalStorageListener.java @@ -4,13 +4,15 @@ import com.bakdata.conquery.models.datasets.SecondaryIdDescription; import com.bakdata.conquery.models.datasets.Table; import com.bakdata.conquery.models.datasets.concepts.Concept; +import com.bakdata.conquery.models.datasets.concepts.tree.TreeConcept; import com.bakdata.conquery.models.identifiable.ids.specific.ConceptId; import com.bakdata.conquery.models.identifiable.ids.specific.SecondaryIdDescriptionId; import com.bakdata.conquery.models.identifiable.ids.specific.TableId; -import lombok.Data; +import com.bakdata.conquery.models.jobs.JobManager; +import com.bakdata.conquery.models.worker.DatasetRegistry; +import com.bakdata.conquery.models.worker.LocalNamespace; -@Data -public class LocalStorageListener implements StorageListener { +public record LocalStorageListener(JobManager jobManager, DatasetRegistry datasetRegistry) implements StorageListener { @Override public void onAddSecondaryId(SecondaryIdDescription secondaryId) { @@ -31,9 +33,13 @@ public void onRemoveTable(TableId table) { @Override public void onAddConcept(Concept concept) { + LocalNamespace namespace = datasetRegistry().get(concept.getDataset()); + namespace.getMatchingStats().createConceptIdJoinTable((TreeConcept) concept); } @Override public void onDeleteConcept(ConceptId concept) { + LocalNamespace namespace = datasetRegistry().get(concept.getDataset()); + namespace.getMatchingStats().deleteConceptIdJoinTable(concept); } } diff --git a/backend/src/main/java/com/bakdata/conquery/mode/local/ManagedConnection.java b/backend/src/main/java/com/bakdata/conquery/mode/local/ManagedConnection.java index fc1a78ff44..e0fe124c8e 100644 --- a/backend/src/main/java/com/bakdata/conquery/mode/local/ManagedConnection.java +++ b/backend/src/main/java/com/bakdata/conquery/mode/local/ManagedConnection.java @@ -1,7 +1,6 @@ package com.bakdata.conquery.mode.local; import java.sql.SQLException; - import javax.annotation.CheckForNull; import com.bakdata.conquery.models.config.DatabaseConnectionConfig; diff --git a/backend/src/main/java/com/bakdata/conquery/mode/local/UpdateMatchingStatsSqlJob.java b/backend/src/main/java/com/bakdata/conquery/mode/local/UpdateMatchingStatsSqlJob.java new file mode 100644 index 0000000000..28d603d1de --- /dev/null +++ b/backend/src/main/java/com/bakdata/conquery/mode/local/UpdateMatchingStatsSqlJob.java @@ -0,0 +1,78 @@ +package com.bakdata.conquery.mode.local; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + +import com.bakdata.conquery.models.datasets.Dataset; +import com.bakdata.conquery.models.datasets.concepts.Concept; +import com.bakdata.conquery.models.datasets.concepts.tree.TreeConcept; +import com.bakdata.conquery.models.jobs.Job; +import com.bakdata.conquery.sql.conquery.SqlMatchingStats; +import com.google.common.base.Stopwatch; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import lombok.Data; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.builder.ToStringExclude; +import org.checkerframework.checker.nullness.qual.Nullable; + +@Slf4j +@Data +public class UpdateMatchingStatsSqlJob extends Job { + + @ToString.Exclude + private final List> concepts; + private final Dataset dataset; + + @ToString.Exclude + private final SqlMatchingStats matchingStats; + + + @Override + public void execute() throws Exception { + + log.info("BEGIN collecting SQL matching stats for {}", dataset); + + Stopwatch stopwatch = Stopwatch.createStarted(); + + ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newVirtualThreadPerTaskExecutor()); + + List> jobs = new ArrayList<>(); + + for (Concept concept : concepts) { + if (!(concept instanceof TreeConcept)) { + continue; + } + jobs.add(matchingStats.collectMatchingStatsForConcept((TreeConcept) concept, executorService)); + } + + ListenableFuture> all = Futures.allAsList(jobs); + + while (!all.isDone()) { + if (isCancelled()) { + all.cancel(true); + log.debug("CANCELLED update matching stats for {}", getDataset(), all.exceptionNow()); + return; + } + + all.get(5, TimeUnit.SECONDS); + log.trace("WAITING for matching stats to finish {}", getDataset()); + + if (all.state().equals(Future.State.FAILED)) { + log.error("FAILED update matching stats for {}", getDataset(), all.exceptionNow()); + return; + } + } + + log.debug("DONE collecting SQL matching stats for {} within {}", dataset, stopwatch); + } + + @Override + public String getLabel() { + return "Collect matching stats for %s (%s concepts)".formatted(dataset.getName(), concepts.size()); + } +} diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/MatchingStats.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/MatchingStats.java index 293d845f7d..24cf785758 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/MatchingStats.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/MatchingStats.java @@ -6,10 +6,6 @@ import java.util.Set; import com.bakdata.conquery.models.common.daterange.CDateRange; -import com.bakdata.conquery.models.datasets.Column; -import com.bakdata.conquery.models.datasets.Table; -import com.bakdata.conquery.models.events.Bucket; -import com.bakdata.conquery.models.identifiable.ids.specific.WorkerId; import com.fasterxml.jackson.annotation.JsonIgnore; import lombok.AllArgsConstructor; import lombok.Data; @@ -19,77 +15,64 @@ @Getter @Setter +@NoArgsConstructor public class MatchingStats { - private Map entries = new HashMap<>(); - @JsonIgnore - private transient CDateRange span; - - @JsonIgnore - private transient long numberOfEvents = -1L; - - @JsonIgnore - private transient long numberOfEntities = -1L; - - public long countEvents() { - if (numberOfEvents == -1L) { - synchronized (this) { - if (numberOfEvents == -1L) { - numberOfEvents = entries.values().stream().mapToLong(Entry::getNumberOfEvents).sum(); - } - } - } - return numberOfEvents; - } - - - public long countEntities() { - if (numberOfEntities == -1L) { - synchronized (this) { - if (numberOfEntities == -1L) { - numberOfEntities = entries.values().stream().mapToLong(Entry::getNumberOfEntities).sum(); - } - } - } - return numberOfEntities; - } - - public CDateRange spanEvents() { - if (span == null) { - synchronized (this) { - if (span == null) { - span = entries.values().stream().map(Entry::getSpan).reduce(CDateRange.all(), CDateRange::spanClosed); - } - } - } - return span; - - } - - public void putEntry(WorkerId source, Entry entry) { - synchronized (this) { - entries.put(source, entry); - span = null; - numberOfEntities = -1L; - numberOfEvents = -1L; - } - } - - @Data - @NoArgsConstructor - @AllArgsConstructor - public static class Entry { - private long numberOfEvents; - - @JsonIgnore - private final Set foundEntities = new HashSet<>(); - private long numberOfEntities; + private Map entries = new HashMap<>(); + @JsonIgnore + private CDateRange span; + + @JsonIgnore + private long numberOfEvents = -1L; + + @JsonIgnore + private long numberOfEntities = -1L; + + public synchronized long countEvents() { + if (numberOfEvents == -1L) { + numberOfEvents = entries.values().stream().mapToLong(Entry::getNumberOfEvents).sum(); + } + return numberOfEvents; + } + + + public synchronized long countEntities() { + if (numberOfEntities == -1L) { + numberOfEntities = entries.values().stream().mapToLong(Entry::getNumberOfEntities).sum(); + } + return numberOfEntities; + } + + public synchronized CDateRange spanEvents() { + if (span == null) { + span = entries.values().stream().map(Entry::getSpan).reduce(CDateRange.all(), CDateRange::spanClosed); + } + return span; + + } + + public synchronized void putEntry(String source, Entry entry) { + entries.put(source, entry); + span = null; + numberOfEntities = -1L; + numberOfEvents = -1L; + } + + + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class Entry { + @JsonIgnore + private final Set foundEntities = new HashSet<>(); + private long numberOfEvents; + private long numberOfEntities; private int minDate = Integer.MAX_VALUE; private int maxDate = Integer.MIN_VALUE; @JsonIgnore public CDateRange getSpan() { - if(minDate == Integer.MAX_VALUE && maxDate == Integer.MIN_VALUE) { + if (minDate == Integer.MAX_VALUE && maxDate == Integer.MIN_VALUE) { return null; } @@ -99,32 +82,24 @@ public CDateRange getSpan() { ); } - public void addEvent(Table table, Bucket bucket, int event, String entityForEvent) { - numberOfEvents++; - if (foundEntities.add(entityForEvent)) { - numberOfEntities++; - } - - for (Column c : table.getColumns()) { - if (!c.getType().isDateCompatible()) { - continue; - } - - if (!bucket.has(event, c)) { - continue; - } - - final CDateRange time = bucket.getAsDateRange(event, c); - - if (time.hasUpperBound()){ - maxDate = Math.max(time.getMaxValue(), maxDate); - } - - if (time.hasLowerBound()){ - minDate = Math.min(time.getMinValue(), minDate); - } - } - } - } + public void addEvents(String entityForEvent, int events, CDateRange time) { + numberOfEvents += events; + if (foundEntities.add(entityForEvent)) { + numberOfEntities++; + } + + if (time == null) { + return; + } + + if (time.hasUpperBound()) { + maxDate = Math.max(time.getMaxValue(), maxDate); + } + + if (time.hasLowerBound()) { + minDate = Math.min(time.getMinValue(), minDate); + } + } + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/AndCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/AndCondition.java index df9b2fce32..6e06ea5118 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/AndCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/AndCondition.java @@ -1,5 +1,6 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import java.util.Collections; import java.util.List; import java.util.Map; import jakarta.validation.Valid; @@ -52,4 +53,18 @@ public WhereCondition convertToSqlCondition(CTConditionContext context) { () -> new IllegalStateException("At least one condition is required to convert %s to a SQL condition.".formatted(getClass())) ); } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + List conceptConditions = conditions.stream().map(cond -> cond.buildExpression(context, id)) + .toList(); + + ConceptConditions out = new ConceptConditions(id, Collections.emptyMap()); + + for (ConceptConditions conceptCondition : conceptConditions) { + out = out.and(conceptCondition); + } + + return out; + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/CTCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/CTCondition.java index f334c24dc6..241031bf34 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/CTCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/CTCondition.java @@ -1,6 +1,15 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.SQLDataType.VARCHAR; + +import java.util.Collection; +import java.util.HashMap; import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import com.bakdata.conquery.io.cps.CPSBase; import com.bakdata.conquery.models.datasets.concepts.ConceptElement; @@ -9,19 +18,99 @@ import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.util.CalculatedValue; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.google.common.collect.Sets; +import org.jooq.Field; +import org.jooq.Name; +import org.jooq.Param; /** * A general condition that serves as a guard for concept tree nodes. */ -@JsonTypeInfo(use=JsonTypeInfo.Id.CUSTOM, property="type") +@JsonTypeInfo(use = JsonTypeInfo.Id.CUSTOM, property = "type") @CPSBase public interface CTCondition { default void init(ConceptElement node) throws ConceptConfigurationException { } - + boolean matches(String value, CalculatedValue> rowMap) throws ConceptConfigurationException; + //TODO implement using join-table WhereCondition convertToSqlCondition(CTConditionContext context); + ConceptConditions buildExpression(CTConditionContext context, ConceptElement id); + + /** + * Extractor is used to join original data onto join-Table. + * + * @param extractor field statement to extract value from source table + * @param params values result of extractor is compared against. + */ + record FieldCondition(Field extractor, Set> params) { + + } + + /** + * Describes mapping of connector fields by way of {@link FieldCondition} to specific conceptElements. + * + * @param conceptElement The conceptElement being defined by the conditions + * @param conditions The conditions defining the conceptElement. Fields are assumed to be and-ed, multiple entries in a field are or-ed. + * So a definition of `{"a": [1], "b": [1,2]}` emits the rows [{a=1 AND b=1}, {a=1 AND b=2}]. + * + * + */ + record ConceptConditions(ConceptElement conceptElement, Map, FieldCondition> conditions) { + public ConceptConditions and(ConceptConditions other) { + if (other == null) { + return this; + } + + Set fields = Stream.of(other.conditions.keySet(), conditions.keySet()).flatMap(Collection::stream) + .map(Field::getUnqualifiedName) + .collect(Collectors.toSet()); + + Map> rByName = other.conditions.keySet().stream().collect(Collectors.toMap(Field::getUnqualifiedName, Function.identity())); + Map> lByName = conditions.keySet().stream().collect(Collectors.toMap(Field::getUnqualifiedName, Function.identity())); + + Map, FieldCondition> combined = new HashMap<>(); + + // AND combine fields, if both are present. + for (Name fieldName : fields) { + Field rField = rByName.get(fieldName); + Field lField = lByName.get(fieldName); + + if (rField == null) { + combined.put(lField, conditions.get(lField)); + continue; + } + + if (lField == null) { + combined.put(rField, other.conditions.get(rField)); + continue; + } + + // If both are present, intersect params + FieldCondition otherCond = other.conditions.get(rField); + FieldCondition myCond = conditions.get(lField); + + FieldCondition condition = new FieldCondition(myCond.extractor, Sets.intersection(otherCond.params, myCond.params)); + + // Recompute string field to fit in all values. + // Otherwise, assume both fields are the same type + Field outField; + if (lField.getDataType().isString()) { + outField = field(lField.getUnqualifiedName(), VARCHAR(Math.max(lField.getDataType().length(), rField.getDataType().length()))); + } + else { + assert lField.getDataType().equals(rField.getDataType()); + outField = lField; + } + combined.put(outField, condition); + } + + return new ConceptConditions(conceptElement(), combined); + } + } + + } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/ColumnEqualCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/ColumnEqualCondition.java index 1b98784e95..1f8e49dc43 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/ColumnEqualCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/ColumnEqualCondition.java @@ -1,16 +1,24 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.DSL.name; +import static org.jooq.impl.SQLDataType.VARCHAR; + import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; import com.bakdata.conquery.sql.conversion.model.filter.MultiSelectCondition; import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.util.CalculatedValue; import com.bakdata.conquery.util.CollectionsUtil; import com.fasterxml.jackson.annotation.JsonCreator; -import jakarta.validation.constraints.NotEmpty; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -21,13 +29,17 @@ /** * This condition requires the value of another column to be equal to a given value. */ -@CPSType(id="COLUMN_EQUAL", base=CTCondition.class) +@CPSType(id = "COLUMN_EQUAL", base = CTCondition.class) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class ColumnEqualCondition implements CTCondition { - @Setter @Getter @NotEmpty - private Set values; - @NotEmpty @Setter @Getter + @Setter + @Getter + @NotEmpty + private Set<@NotBlank String> values; + @NotEmpty + @Setter + @Getter private String column; @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) @@ -38,7 +50,7 @@ public static ColumnEqualCondition create(Set values, String column) { @Override public boolean matches(String value, CalculatedValue> rowMap) { Object checkedValue = rowMap.getValue().get(column); - if(checkedValue == null) { + if (checkedValue == null) { return false; } return values.contains(checkedValue.toString()); @@ -46,7 +58,18 @@ public boolean matches(String value, CalculatedValue> rowMap @Override public WhereCondition convertToSqlCondition(CTConditionContext context) { - Field field = DSL.field(DSL.name(context.getConnectorTable().getName(), column), String.class); + Field field = field(name(column), String.class); return new MultiSelectCondition(field, values.toArray(String[]::new), context.getFunctionProvider()); } + + private int fieldLength() { + return values.stream().mapToInt(str -> str.getBytes().length).max().orElse(0); + } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + FieldCondition condition = new FieldCondition(field(name(getColumn()), VARCHAR), values.stream().map(DSL::inline).collect(Collectors.toSet())); + + return new ConceptConditions(id, Map.of(field(name("%s_equal".formatted(column)), VARCHAR(fieldLength())), condition)); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/EqualCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/EqualCondition.java index 80e3e104a6..5afdfae99c 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/EqualCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/EqualCondition.java @@ -1,11 +1,16 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.DSL.name; +import static org.jooq.impl.SQLDataType.VARCHAR; + import java.util.Map; import java.util.Set; - +import java.util.stream.Collectors; import jakarta.validation.constraints.NotEmpty; import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; import com.bakdata.conquery.sql.conversion.model.filter.MultiSelectCondition; import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; @@ -15,17 +20,18 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -import org.jooq.Field; import org.jooq.impl.DSL; /** * This condition requires each value to be exactly as given in the list. */ -@CPSType(id="EQUAL", base=CTCondition.class) +@CPSType(id = "EQUAL", base = CTCondition.class) @AllArgsConstructor public class EqualCondition implements CTCondition { - @Setter @Getter @NotEmpty + @Setter + @Getter + @NotEmpty private Set values; @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) @@ -40,7 +46,16 @@ public boolean matches(String value, CalculatedValue> rowMap @Override public WhereCondition convertToSqlCondition(CTConditionContext context) { - Field field = DSL.field(DSL.name(context.getConnectorTable().getName(), context.getConnectorColumn().getName()), String.class); - return new MultiSelectCondition(field, values.toArray(String[]::new), context.getFunctionProvider()); + return new MultiSelectCondition(field(context.getConnectorColumn(), VARCHAR), values.toArray(String[]::new), context.getFunctionProvider()); + } + + private int fieldLength() { + return values.stream().mapToInt(str -> str.getBytes().length).max().orElse(0); + } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + FieldCondition condition = new FieldCondition(field(name(context.getConnectorColumn()), VARCHAR), values.stream().map(DSL::inline).collect(Collectors.toSet())); + return new ConceptConditions(id, Map.of(field(name(CTConditionContext.COLUMN_VALUE_FIELD), VARCHAR(fieldLength())), condition)); } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/GroovyCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/GroovyCondition.java index a7bd4f6a97..13bbb04a45 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/GroovyCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/GroovyCondition.java @@ -26,6 +26,7 @@ */ @Slf4j @CPSType(id = "GROOVY", base = CTCondition.class) +@Deprecated public class GroovyCondition implements CTCondition { public static final String[] AUTO_IMPORTS = Stream.of( @@ -117,4 +118,9 @@ public Object getProperty(String property) { } } } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + throw new IllegalStateException("Not implemented"); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsEmptyCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsEmptyCondition.java new file mode 100644 index 0000000000..cc967ab09c --- /dev/null +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsEmptyCondition.java @@ -0,0 +1,49 @@ +package com.bakdata.conquery.models.datasets.concepts.conditions; + +import static org.jooq.impl.DSL.*; +import static org.jooq.impl.SQLDataType.BOOLEAN; + +import java.util.Map; +import java.util.Set; + +import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; +import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; +import com.bakdata.conquery.sql.conversion.model.filter.ConditionWrappingWhereCondition; +import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; +import com.bakdata.conquery.util.CalculatedValue; +import lombok.Getter; +import lombok.NonNull; +import lombok.Setter; +import org.jooq.Condition; +import org.jooq.impl.DSL; + +/** + * This condition requires that the selected Column has a value. + */ +@CPSType(id = "NOT_PRESENT", base = CTCondition.class) +@Deprecated +public class IsEmptyCondition implements CTCondition { + + @Getter + @Setter + @NonNull + private String column; + + @Override + public boolean matches(String value, CalculatedValue> rowMap) { + return rowMap.getValue().containsKey(column); + } + + @Override + public WhereCondition convertToSqlCondition(CTConditionContext context) { + Condition condition = field(name(column)).isNull(); + return new ConditionWrappingWhereCondition(condition); + } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + FieldCondition condition = new FieldCondition(context.getFunctionProvider().isNull(field(name(column))), Set.of(inline(true))); + return new ConceptConditions(id, Map.of(field(name("%s_is_empty".formatted(column)), BOOLEAN), condition)); + } +} diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsPresentCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsPresentCondition.java index 783e98e7d0..5a1ffb7746 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsPresentCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/IsPresentCondition.java @@ -1,11 +1,17 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import static org.jooq.impl.DSL.*; +import static org.jooq.impl.SQLDataType.BOOLEAN; +import static org.jooq.impl.SQLDataType.VARCHAR; + import java.util.Map; +import java.util.Set; import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; -import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.sql.conversion.model.filter.ConditionWrappingWhereCondition; +import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.util.CalculatedValue; import lombok.Getter; import lombok.NonNull; @@ -16,10 +22,11 @@ /** * This condition requires that the selected Column has a value. */ -@CPSType(id="PRESENT", base=CTCondition.class) +@CPSType(id = "PRESENT", base = CTCondition.class) public class IsPresentCondition implements CTCondition { - @Getter @Setter + @Getter + @Setter @NonNull private String column; @@ -30,7 +37,14 @@ public boolean matches(String value, CalculatedValue> rowMap @Override public WhereCondition convertToSqlCondition(CTConditionContext context) { - Condition condition = DSL.field(DSL.name(context.getConnectorTable().getName(), column)).isNotNull(); + Condition condition = field(name(column)).isNotNull(); return new ConditionWrappingWhereCondition(condition); } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + + FieldCondition condition = new FieldCondition(context.getFunctionProvider().isNull(field(name(column))), Set.of(inline(false))); + return new ConceptConditions(id, Map.of(field(name("%s_is_empty".formatted(column)), BOOLEAN), condition)); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/NotCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/NotCondition.java index 3d5e9ff9e5..3dfb4d902e 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/NotCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/NotCondition.java @@ -16,6 +16,7 @@ * This condition matches if its child does not. */ @CPSType(id="NOT", base=CTCondition.class) +@Deprecated public class NotCondition implements CTCondition { @Setter @Getter @Valid @@ -36,4 +37,9 @@ public WhereCondition convertToSqlCondition(CTConditionContext context) { WhereCondition whereCondition = condition.convertToSqlCondition(context); return whereCondition.negate(); } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + throw new IllegalStateException("Not implemented"); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/OrCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/OrCondition.java deleted file mode 100644 index b5b0d8b2bb..0000000000 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/OrCondition.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.bakdata.conquery.models.datasets.concepts.conditions; - -import java.util.List; -import java.util.Map; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotEmpty; - -import com.bakdata.conquery.io.cps.CPSType; -import com.bakdata.conquery.models.datasets.concepts.ConceptElement; -import com.bakdata.conquery.models.exceptions.ConceptConfigurationException; -import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; -import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; -import com.bakdata.conquery.util.CalculatedValue; -import lombok.Getter; -import lombok.Setter; - -/** - * This condition connects multiple conditions with an or. - */ -@CPSType(id = "OR", base = CTCondition.class) -public class OrCondition implements CTCondition { - - @Setter - @Getter - @Valid - @NotEmpty - private List conditions; - - @Override - public boolean matches(String value, CalculatedValue> rowMap) throws ConceptConfigurationException { - for (CTCondition cond : conditions) { - if (cond.matches(value, rowMap)) { - return true; - } - } - return false; - } - - @Override - public void init(ConceptElement node) throws ConceptConfigurationException { - for (CTCondition cond : conditions) { - cond.init(node); - } - } - - @Override - public WhereCondition convertToSqlCondition(CTConditionContext context) { - return conditions.stream() - .map(condition -> condition.convertToSqlCondition(context)) - .reduce(WhereCondition::or) - .orElseThrow( - () -> new IllegalStateException("At least one condition is required to convert %s to a SQL condition.".formatted(getClass())) - ); - } -} diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixCondition.java index 5f90cd47b5..28a72733e2 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixCondition.java @@ -1,10 +1,14 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.SQLDataType.VARCHAR; + import java.util.Arrays; import java.util.Map; import java.util.stream.Collectors; import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; import com.bakdata.conquery.sql.conversion.model.filter.ConditionWrappingWhereCondition; @@ -14,14 +18,13 @@ import lombok.Setter; import lombok.ToString; import org.jooq.Condition; -import org.jooq.Field; -import org.jooq.impl.DSL; /** * This condition requires each value to start with one of the given values. */ @CPSType(id = "PREFIX_LIST", base = CTCondition.class) @ToString +@Deprecated public class PrefixCondition implements CTCondition { @Setter @@ -41,9 +44,14 @@ public boolean matches(String value, CalculatedValue> rowMap @Override public WhereCondition convertToSqlCondition(CTConditionContext context) { - Field field = DSL.field(DSL.name(context.getConnectorTable().getName(), context.getConnectorColumn().getName()), String.class); String pattern = Arrays.stream(prefixes).collect(Collectors.joining("|", "", context.getFunctionProvider().getAnyCharRegex())); - Condition condition = context.getFunctionProvider().likeRegex(field, pattern); + Condition condition = context.getFunctionProvider().likeRegex(field(context.getConnectorColumn(), VARCHAR), pattern); return new ConditionWrappingWhereCondition(condition); } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + // Implementation is technically possible but extremely slow and PREFIX has caused issues historically + throw new IllegalStateException("Not implemented"); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixRangeCondition.java b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixRangeCondition.java index 66219f1366..c8a653828c 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixRangeCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/models/datasets/concepts/conditions/PrefixRangeCondition.java @@ -1,9 +1,13 @@ package com.bakdata.conquery.models.datasets.concepts.conditions; +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.SQLDataType.VARCHAR; + import java.util.Map; import jakarta.validation.constraints.NotEmpty; import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import com.bakdata.conquery.sql.conversion.model.filter.WhereCondition; @@ -15,12 +19,12 @@ import lombok.Setter; import org.jooq.Condition; import org.jooq.Field; -import org.jooq.impl.DSL; /** * This condition requires each value to start with a prefix between the two given values */ @CPSType(id = "PREFIX_RANGE", base = CTCondition.class) +@Deprecated public class PrefixRangeCondition implements CTCondition { private static final String ANY_CHAR_REGEX = ".*"; @@ -54,7 +58,7 @@ public boolean matches(String value, CalculatedValue> rowMap @Override public WhereCondition convertToSqlCondition(CTConditionContext context) { - Field field = DSL.field(DSL.name(context.getConnectorTable().getName(), context.getConnectorColumn().getName()), String.class); + Field field = field(context.getConnectorColumn(), VARCHAR); String pattern = buildSqlRegexPattern(context.getFunctionProvider()); Condition regexCondition = context.getFunctionProvider().likeRegex(field, pattern); return new ConditionWrappingWhereCondition(regexCondition); @@ -76,4 +80,9 @@ private String buildSqlRegexPattern(SqlFunctionProvider functionProvider) { } return builder.append(functionProvider.getAnyCharRegex()).toString(); } + + @Override + public ConceptConditions buildExpression(CTConditionContext context, ConceptElement id) { + throw new IllegalStateException("Not implemented"); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateElementMatchingStats.java b/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateElementMatchingStats.java index 9d5821b198..ffd7afb675 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateElementMatchingStats.java +++ b/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateElementMatchingStats.java @@ -33,6 +33,8 @@ public class UpdateElementMatchingStats extends NamespaceMessage { @Override public void react(DistributedNamespace context) throws Exception { + String sourceString = source.toString(); + // We collect the concepts outside the loop to update the storage afterward Map> conceptsToUpdate = new HashMap<>(); @@ -56,7 +58,7 @@ public void react(DistributedNamespace context) throws Exception { matchingStats = new MatchingStats(); target.setMatchingStats(matchingStats); } - matchingStats.putEntry(source, value); + matchingStats.putEntry(sourceString, value); } catch (Exception e) { log.error("Failed to set matching stats for '{}' (enable TRACE for exception)", entry.getKey(), (Exception) (log.isTraceEnabled() ? e : null)); } diff --git a/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateMatchingStatsMessage.java b/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateMatchingStatsMessage.java index 3e9407b720..7a6927360a 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateMatchingStatsMessage.java +++ b/backend/src/main/java/com/bakdata/conquery/models/messages/namespaces/specific/UpdateMatchingStatsMessage.java @@ -1,7 +1,9 @@ package com.bakdata.conquery.models.messages.namespaces.specific; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @@ -11,6 +13,8 @@ import java.util.stream.Stream; import com.bakdata.conquery.io.cps.CPSType; +import com.bakdata.conquery.models.common.daterange.CDateRange; +import com.bakdata.conquery.models.datasets.Column; import com.bakdata.conquery.models.datasets.Table; import com.bakdata.conquery.models.datasets.concepts.Concept; import com.bakdata.conquery.models.datasets.concepts.ConceptElement; @@ -33,6 +37,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.mina.core.future.WriteFuture; +import org.jetbrains.annotations.Nullable; /** * For each {@link com.bakdata.conquery.models.query.queryplan.specific.ConceptNode} calculate the number of matching events and the span of date-ranges. @@ -45,6 +50,45 @@ public class UpdateMatchingStatsMessage extends WorkerMessage { @Getter private final Collection concepts; + @Nullable + private static CDateRange spannedValidityDates(Bucket bucket, int event, Iterable dateColumns) { + int maxDate = Integer.MIN_VALUE; + int minDate = Integer.MAX_VALUE; + + for (Column c : dateColumns) { + + if (!bucket.has(event, c)) { + continue; + } + + final CDateRange time = bucket.getAsDateRange(event, c); + + if (time.hasUpperBound()) { + maxDate = Math.max(time.getMaxValue(), maxDate); + } + + if (time.hasLowerBound()) { + minDate = Math.min(time.getMinValue(), minDate); + } + } + + final CDateRange span; + + if (minDate == Integer.MAX_VALUE && maxDate == Integer.MIN_VALUE) { + span = null; + } + else if (minDate == Integer.MAX_VALUE) { + span = CDateRange.atMost(maxDate); + } + else if (maxDate == Integer.MIN_VALUE) { + span = CDateRange.atLeast(minDate); + } + else { + span = CDateRange.of(minDate, maxDate); + } + return span; + } + @Override public void react(Worker worker) throws Exception { @@ -144,6 +188,7 @@ private static Map, MatchingStats.Entry> calculateConceptMat CBlock cBlock = cBlockId.resolve(); final Bucket bucket = cBlock.getBucket().resolve(); final Table table = bucket.getTable().resolve(); + final List dateColumns = Arrays.stream(table.getColumns()).filter(c -> c.getType().isDateCompatible()).toList(); for (String entity : bucket.entities()) { @@ -152,10 +197,12 @@ private static Map, MatchingStats.Entry> calculateConceptMat for (int event = bucket.getEntityStart(entity); event < entityEnd; event++) { final int[] localIds = cBlock.getPathToMostSpecificChild(event); + final CDateRange span = spannedValidityDates(bucket, event, dateColumns); if (!(concept instanceof TreeConcept) || localIds == null) { - matchingStats.computeIfAbsent(conceptId, (ignored) -> new MatchingStats.Entry()).addEvent(table, bucket, event, entity); + matchingStats.computeIfAbsent(conceptId, (ignored) -> new MatchingStats.Entry()) + .addEvents(entity, 1, span); continue; } @@ -167,7 +214,7 @@ private static Map, MatchingStats.Entry> calculateConceptMat while (element != null) { matchingStats.computeIfAbsent(element.getId(), (ignored) -> new MatchingStats.Entry()) - .addEvent(table, bucket, event, entity); + .addEvents(entity, 1, span); element = element.getParent(); } } diff --git a/backend/src/main/java/com/bakdata/conquery/models/worker/LocalNamespace.java b/backend/src/main/java/com/bakdata/conquery/models/worker/LocalNamespace.java index b4461511fd..6ba57c5127 100644 --- a/backend/src/main/java/com/bakdata/conquery/models/worker/LocalNamespace.java +++ b/backend/src/main/java/com/bakdata/conquery/models/worker/LocalNamespace.java @@ -7,9 +7,12 @@ import com.bakdata.conquery.io.storage.NamespaceStorage; import com.bakdata.conquery.mode.local.SqlEntityResolver; import com.bakdata.conquery.mode.local.SqlStorageHandler; +import com.bakdata.conquery.mode.local.UpdateMatchingStatsSqlJob; +import com.bakdata.conquery.models.config.DatabaseConnectionConfig; import com.bakdata.conquery.models.datasets.Column; import com.bakdata.conquery.models.jobs.JobManager; import com.bakdata.conquery.models.query.ExecutionManager; +import com.bakdata.conquery.sql.conquery.SqlMatchingStats; import com.bakdata.conquery.sql.conversion.dialect.DialectBundle; import com.bakdata.conquery.util.search.SearchProcessor; import com.fasterxml.jackson.databind.ObjectMapper; @@ -24,6 +27,7 @@ public class LocalNamespace extends Namespace { private final DialectBundle dialect; private final DSLContext dslContext; private final SqlStorageHandler storageHandler; + private final SqlMatchingStats matchingStats; public LocalNamespace( DialectBundle dialect, @@ -34,17 +38,21 @@ public LocalNamespace( SqlStorageHandler storageHandler, JobManager jobManager, SearchProcessor filterSearch, - SqlEntityResolver sqlEntityResolver + SqlEntityResolver sqlEntityResolver, DatabaseConnectionConfig databaseConfig ) { super(preprocessMapper, storage, executionManager, jobManager, filterSearch, sqlEntityResolver); this.dslContext = dslContext; this.storageHandler = storageHandler; this.dialect = dialect; + matchingStats = new SqlMatchingStats(dslContext, dialect.getFunctionProvider(), databaseConfig.getPrimaryColumn()); } + @Override void updateMatchingStats() { - // TODO Build basic statistic on data + getJobManager().addSlowJob( + new UpdateMatchingStatsSqlJob(getStorage().getAllConcepts().toList(), getDataset(), getMatchingStats()) + ); } @Override 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 new file mode 100644 index 0000000000..3188c86796 --- /dev/null +++ b/backend/src/main/java/com/bakdata/conquery/sql/conquery/SqlMatchingStats.java @@ -0,0 +1,434 @@ +package com.bakdata.conquery.sql.conquery; + +import static org.jooq.impl.DSL.*; + +import java.sql.Date; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletionStage; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; + +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import jakarta.validation.constraints.NotBlank; + +import com.bakdata.conquery.models.common.daterange.CDateRange; +import com.bakdata.conquery.models.datasets.Column; +import com.bakdata.conquery.models.datasets.concepts.ConceptElement; +import com.bakdata.conquery.models.datasets.concepts.Connector; +import com.bakdata.conquery.models.datasets.concepts.MatchingStats; +import com.bakdata.conquery.models.datasets.concepts.ValidityDate; +import com.bakdata.conquery.models.datasets.concepts.conditions.CTCondition; +import com.bakdata.conquery.models.datasets.concepts.tree.ConceptTreeChild; +import com.bakdata.conquery.models.datasets.concepts.tree.TreeConcept; +import com.bakdata.conquery.models.events.MajorTypeId; +import com.bakdata.conquery.models.identifiable.ids.specific.ConceptElementId; +import com.bakdata.conquery.models.identifiable.ids.specific.ConceptId; +import com.bakdata.conquery.sql.conversion.cqelement.concept.CTConditionContext; +import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; +import com.bakdata.conquery.util.TablePrimaryColumnUtil; +import com.google.common.base.Stopwatch; +import com.google.common.collect.Sets; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.jooq.CommonTableExpression; +import org.jooq.Condition; +import org.jooq.CreateTableElementListStep; +import org.jooq.Cursor; +import org.jooq.DSLContext; +import org.jooq.Field; +import org.jooq.InsertValuesStepN; +import org.jooq.Name; +import org.jooq.Param; +import org.jooq.Record; +import org.jooq.Record4; +import org.jooq.RowN; +import org.jooq.Select; +import org.jooq.SelectConditionStep; +import org.jooq.SelectJoinStep; +import org.jooq.exception.DataAccessException; + +@Slf4j +@Data +public class SqlMatchingStats { + + private final Field PID_FIELD = field(name("pid"), String.class); + private final Field LB_FIELD = field(name("lower_bound"), Date.class); + private final Field UB_FIELD = field(name("upper_bound"), Date.class); + private final Field CONCEPT_ID_FIELD = field(name("resolved_id"), Integer.class); + private final Set> NULL_PARAMS = Collections.singleton(inline(null, String.class)); + + private final DSLContext dslContext; + private final SqlFunctionProvider functionProvider; + private final String defaultPrimaryColumn; + private final int fetchBatchSize = 100; + + private static void assignStatsToPath(ConceptElement element, Map, MatchingStats.Entry> matchingStats, String entity, CDateRange span) { + ConceptElementId id = element.getId(); + + while (element != null) { + matchingStats.computeIfAbsent(id, (ignored) -> new MatchingStats.Entry()).addEvents(entity, 1, span); + element = element.getParent(); + } + } + + /** + * collect unique fields used/defined in the expressions. + */ + private static List> collectAllFields(List conceptConditions) { + List> fields = conceptConditions.stream().flatMap(e -> e.conditions().keySet().stream()).distinct().toList(); + return fields; + } + + private static Select unionSelects(List> connectorTableSelects) { + Select unioned = null; + + for (Select connectorTable : connectorTableSelects) { + if (unioned == null) { + unioned = (Select) connectorTable; + continue; + } + + unioned = unioned.unionAll(connectorTable); + } + + + return unioned; + } + + private static Param defaultValue(Field field) { + if (field.getDataType().isBoolean()) { + return inline(false); + } + + if (field.getDataType().isString()) { + return inline(null, String.class); + } + + throw new IllegalStateException("Fields of type %s are not expected".formatted(field.getDataType())); + } + + /** + * Assembles the join table and inserts it into the database. + * + * @param concept + */ + public void createConceptIdJoinTable(TreeConcept concept) { + CTConditionContext context = CTConditionContext.forJoinTables(functionProvider); + + List conceptConditions = collectAllExpressions(concept, null, context); + + List> allFields = collectAllFields(conceptConditions); + + List rows = expressionsToRows(conceptConditions, allFields); + + Name tableName = idsTableName(concept.getName()); + + // allFields are the statements to extract values from the underlying tables, we use them to generate the field names + List> fields = new ArrayList<>(); + + fields.addAll(allFields); + fields.addFirst(CONCEPT_ID_FIELD); + + // Make sure there's no table present. + deleteConceptIdJoinTable(concept.getId()); + createConceptIdsTable(tableName, fields); + + insertConceptIdMappings(tableName, fields, rows, dslContext); + } + + @NotNull + private Field[] collectValidityDateFields(Connector connector) { + List> validityDates = new ArrayList<>(); + + for (ValidityDate validityDate : connector.getValidityDates()) { + if (!validityDate.isSingleColumnDaterange()) { + validityDates.add(field(name(validityDate.getStartColumn().getColumn()), Date.class)); + validityDates.add(field(name(validityDate.getEndColumn().getColumn()), Date.class)); + continue; + } + + Column column = validityDate.getColumn().get(); + + if (column.getType() == MajorTypeId.DATE) { + validityDates.add(field(name(column.getName()), Date.class)); + } else if (column.getType() == MajorTypeId.DATE_RANGE) { + Field rangeField = field(name(column.getName())); + + validityDates.add(functionProvider.lower(rangeField)); + validityDates.add(functionProvider.upper(rangeField)); + } + } + return (Field[]) validityDates.toArray(Field[]::new); + } + + private void assignStats(Map, MatchingStats.Entry> matchingStats) { + for (Map.Entry, MatchingStats.Entry> entry : matchingStats.entrySet()) { + ConceptElementId conceptElementId = entry.getKey(); + + MatchingStats stats = new MatchingStats(); + stats.putEntry("sql", entry.getValue()); + conceptElementId.resolve().setMatchingStats(stats); + } + } + + @NotNull + private Map, MatchingStats.Entry> readStats(TreeConcept concept, SelectJoinStep selectJoinStep) { + Map, MatchingStats.Entry> matchingStats = new HashMap<>(); + + Stopwatch stopwatch = Stopwatch.createStarted(); + + log.info("BEGIN fetching matching stats for {}", concept.getId()); + log.trace("{}", selectJoinStep); + + try (Cursor cursor = selectJoinStep.fetchSize(fetchBatchSize).fetchLazy()) { + + for (Record record : cursor) { + + Integer rawId = record.get(CONCEPT_ID_FIELD); + ConceptElement resolvedId; + if (rawId == null) { + resolvedId = concept; + } else { + resolvedId = concept.getElementByLocalId(rawId); + } + + String entity = record.get(PID_FIELD); + Date min = record.get(LB_FIELD); + Date max = record.get(UB_FIELD); + + CDateRange span = CDateRange.of(min != null ? min.toLocalDate() : null, max != null ? max.toLocalDate() : null); + + assignStatsToPath(resolvedId, matchingStats, entity, span); + } + } + + log.debug("DONE fetching matching stats for {} within {}", concept.getId(), stopwatch); + + + return matchingStats; + } + + @NotNull + private Name idsTableName(@NotBlank String name) { + return name("%s_ids".formatted(name)); + } + + private void insertConceptIdMappings(Name tableName, List> fieldNames, List rows, DSLContext dsl) { + log.info("BEGIN inserting {} rows into {}", rows.size(), tableName); + + // We're using batching here because some DBMS don't allow mass inserts. + // There's a chance, we rework this to use a prepared statement with lots of bindings under the hood. But that needs to rework the entire stream of rows. + List> inserts = new ArrayList<>(rows.size()); + + for (RowN row : rows) { + inserts.add(dsl.insertInto(table(tableName)).columns(fieldNames).values(row)); + } + + dsl.batch(inserts).execute(); + + + log.trace("DONE inserting into {}", tableName); + } + + /** + * Create table and fields. Assumes, table has been dropped already. + */ + private void createConceptIdsTable(Name tableName, List> fields) { + + log.debug("Creating table {} with fields {}", tableName, fields); + + CreateTableElementListStep createTable = dslContext.createTable(tableName).columns(fields); + + log.info("{}", createTable); + + createTable.execute(); + } + + public ListenableFuture collectMatchingStatsForConcept(TreeConcept concept, ListeningExecutorService executorService) { + return executorService.submit(() -> { + dslContext.connection(cfg -> { + SelectJoinStep matchingStatsStatement = createMatchingStatsStatement(concept); + Map, MatchingStats.Entry> matchingStats = readStats(concept, matchingStatsStatement); + assignStats(matchingStats); + }); + }); + + } + + @NotNull + private SelectJoinStep createMatchingStatsStatement(TreeConcept concept) { + + List> connectorTables = new ArrayList<>(); + + Field positiveInfinity = functionProvider.getMaxDateExpression(); + Field negativeInfinity = functionProvider.getMinDateExpression(); + + for (Connector connector : concept.getConnectors()) { + + CTConditionContext context = CTConditionContext.forConnector(connector, functionProvider); + + Field[] validityDates = collectValidityDateFields(connector); + + SelectConditionStep connectorTable = + dslContext.select( + TablePrimaryColumnUtil.findPrimaryColumn(connector.getResolvedTable(), defaultPrimaryColumn).as(PID_FIELD), + // The infinities are intentionally swapped + least(positiveInfinity, validityDates).as(LB_FIELD), + greatest(negativeInfinity, validityDates).as(UB_FIELD), + CONCEPT_ID_FIELD) + .from(table(name(connector.getResolvedTable().getName()))) + .leftJoin(idsTableName(concept.getName())) + // join onto the concept-ids table to assign the most specific id. + .on(getJoinConditions(concept, context)) + .where(connector.getCondition() != null ? connector.getCondition().convertToSqlCondition(context).condition() : noCondition()); + + connectorTables.add(connectorTable); + } + + Name ct_name = name("connector_tables"); + CommonTableExpression unioned = ct_name.as(unionSelects(connectorTables)); + + SelectJoinStep> records = dslContext.with(unioned).select(unioned.field(CONCEPT_ID_FIELD), PID_FIELD, + // The infinities are intentionally swapped + nullif(unioned.field(LB_FIELD), positiveInfinity).as(LB_FIELD), nullif(unioned.field(UB_FIELD), negativeInfinity).as(UB_FIELD)).from(ct_name); + + return records; + } + + public void deleteConceptIdJoinTable(ConceptId concept) { + Name tableName = idsTableName(concept.getName()); + log.debug("Trying to delete id-table {}", tableName); + try { + dslContext.dropTable(tableName).execute(); + } catch (DataAccessException exception) { + // Likely it doesn't exist. Some DBMS just don't support drop-IfExists so this is the next best thing :^) + log.trace("Failed to drop table {}", tableName, exception); + } + } + + /** + * Using the expressions of a concept, build a Condition that descibes the left-join onto the ids table, from any connector-table. + */ + private Condition getJoinConditions(TreeConcept concept, CTConditionContext context) { + List conceptConditions = collectAllExpressions(concept, null, context); + + + if (conceptConditions.isEmpty()) { + return context.getFunctionProvider().unconditionalJoinCondition(); + } + + Set conditions = new HashSet<>(); + + for (CTCondition.ConceptConditions conceptCondition : conceptConditions) { + for (Map.Entry, CTCondition.FieldCondition> entry : conceptCondition.conditions().entrySet()) { + conditions.add(entry.getKey().eq((Field) entry.getValue().extractor())); + } + } + + Condition reduced = conditions.stream().reduce(noCondition(), Condition::and); + + if (reduced.equals(noCondition())) { + return context.getFunctionProvider().unconditionalJoinCondition(); + } + + return reduced; + } + + private List expressionsToRows(List conceptConditions, List> allFields) { + Map>, ConceptElement> byDepth = new HashMap<>(); + + for (CTCondition.ConceptConditions conceptCondition : conceptConditions) { + ConceptElement elt = conceptCondition.conceptElement(); + Map, CTCondition.FieldCondition> conditions = conceptCondition.conditions(); + + List>> rowValues = new ArrayList<>(); + for (Field field : allFields) { + if (conditions.containsKey(field)) { + rowValues.add(conditions.get(field).params()); + } else { + rowValues.add(Set.of(defaultValue(field))); + } + } + + Set>> flattened = Sets.cartesianProduct(rowValues); + + // Group by params, find deepest params. This ensures we map to the most-specific element. + for (List> params : flattened) { + byDepth.compute(params, (__, prior) -> { + if (prior == null || prior.getDepth() < elt.getDepth()) { + return elt; + } + if (prior.getDepth() == elt.getDepth() && !prior.equals(elt)) { + log.warn("Nodes {} and {} are mapped by the same params {}", prior.getId(), elt.getId(), params); + } + return prior; + }); + } + } + + List rows = new ArrayList<>(); + + for (Map.Entry>, ConceptElement> entry : byDepth.entrySet()) { + List> params = new ArrayList<>(entry.getKey().size() + 1); + + params.addFirst(val(entry.getValue().getLocalId())); + params.addAll(entry.getKey()); + + rows.add(row(params)); + } + return rows; + } + + /** + * Collect all mappings from values to conceptElement for the entire concept. This means the column-value and the auxiliary columns. + * We use them to construct a table building an injective mapping from values to concept element that can be used for performant joins instead of resolving the concept every time. + */ + private List collectAllExpressions(ConceptElement current, CTCondition.ConceptConditions parentConceptCondition, CTConditionContext context) { + + final CTCondition.ConceptConditions forCurrent = switch (current) { + case TreeConcept concept -> new CTCondition.ConceptConditions(concept, Collections.emptyMap()); + // concept elements implicitly inherit the conditions of its parents + case ConceptTreeChild child -> + child.getCondition().buildExpression(context, current).and(parentConceptCondition); + case null, default -> throw new IllegalStateException(); + }; + + final List out = new ArrayList<>(); + + out.add(forCurrent); + + for (ConceptTreeChild child : current.getChildren()) { + out.addAll(collectAllExpressions(child, forCurrent, context)); + } + + return out; + } + + /** + * recursively build just a single expression + * + * @param current + * @param context TODO use this to implement joining in queries + */ + private CTCondition.ConceptConditions collectExpressionsForSingleNode(ConceptElement current, CTConditionContext context) { + + if (current instanceof TreeConcept concept) { + return new CTCondition.ConceptConditions(concept, Collections.emptyMap()); + } + + CTCondition.ConceptConditions parentConceptCondition = collectExpressionsForSingleNode(current.getParent(), context); + CTCondition.ConceptConditions currentConceptCondition = ((ConceptTreeChild) current).getCondition().buildExpression(context, current); + + return currentConceptCondition.and(parentConceptCondition); + } + + +} diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/CQExternalConverter.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/CQExternalConverter.java index 147fae21da..995feeeef2 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/CQExternalConverter.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/CQExternalConverter.java @@ -31,146 +31,152 @@ public class CQExternalConverter implements NodeConverter { - private static final String CQ_EXTERNAL_IDS_CTE_NAME = "external_ids"; - private static final String CQ_EXTERNAL_EXTRAS_CTE_NAME = "external_extra"; - private static final String UNDERSCORE = "_"; - private static final String WHITESPACE = " "; - - private static QueryStep createExternalIdsCte(CQExternal external, SqlFunctionProvider functionProvider, ConversionContext context) { - List unions = new ArrayList<>(); - for (Map.Entry entry : external.getValuesResolved().entrySet()) { - List rowSelects = createRowSelects(entry, functionProvider); - unions.addAll(rowSelects); - } - Preconditions.checkArgument(!unions.isEmpty(), "Expecting at least 1 resolved row when converting a CQExternal"); - QueryStep allStep = QueryStep.createUnionAllStep(unions, CQ_EXTERNAL_IDS_CTE_NAME, Collections.emptyList(), context.isNegation()); - - Optional maybeValidityDate = allStep.getSelects().getValidityDate(); - - if (maybeValidityDate.isEmpty() || !context.dateRestrictionActive()) { - return allStep; - } - - return QueryStep.builder() - .predecessors(List.of(allStep)) - .conditions(List.of(functionProvider.dateRestriction(functionProvider.forCDateRange(context.getDateRestrictionRange()), maybeValidityDate.get()))) - .selects(allStep.getQualifiedSelects()) - .fromTable(table(name(allStep.getCteName()))) - .cteName(CQ_EXTERNAL_IDS_CTE_NAME + "_date_restriction") - .build(); - - } - - /** - * For each entry, we need to create a SELECT statement of static values for each pid -> date set. For dialects that support date multiranges, - * 1 row per ID is sufficient. For other dialects there can be multiple rows with the same pid -> date range from the date set. - */ - private static List createRowSelects(Map.Entry entry, SqlFunctionProvider functionProvider) { - SqlIdColumns ids = createIdSelect(entry, functionProvider); - List validityDateEntries = functionProvider.forCDateSet(entry.getValue(), SharedAliases.DATES_COLUMN); - return validityDateEntries.stream() - .map(validityDateEntry -> createIdRowSelect(ids, validityDateEntry, functionProvider)) - .toList(); - } - - private static SqlIdColumns createIdSelect(Map.Entry entry, SqlFunctionProvider functionProvider) { - Field primaryColumn = functionProvider.externalId(entry.getKey()).as(SharedAliases.PRIMARY_COLUMN.getAlias()); - return new SqlIdColumns(primaryColumn); - } - - private static FieldWrapper createExtraColumnValue(Map.Entry> extraEntry, SqlFunctionProvider functionProvider) { - Field extraValues = functionProvider.asArrayRepr(extraEntry.getValue()); - final Name alias = name(extraEntry.getKey().replace(WHITESPACE, UNDERSCORE)); - final Field withAlias = extraValues.as(alias); - return new FieldWrapper<>(withAlias); - } - - /** - * Creates a SELECT statement of static values for each pid -> date entry, like - *
{@code select 1 as "pid", '[2021-01-01,2022-01-01)'::daterange as "date_range"}
- */ - private static QueryStep createIdRowSelect( - SqlIdColumns ids, - ColumnDateRange validityDate, - SqlFunctionProvider functionProvider - ) { - Selects selects = Selects.builder() - .ids(ids) - .validityDate(Optional.ofNullable(validityDate)) - .build(); - return wrapInQueryStep(selects, functionProvider); - } - - /** - * Creates a SELECT statement of static values for each pid -> extras, like - *
{@code select 1 as "pid", '1' as "payload_1"}
- */ - private static QueryStep createExtraRowSelect( - SqlIdColumns ids, - List extraSelects, - SqlFunctionProvider functionProvider - ) { - Selects selects = Selects.builder() - .ids(ids) - .sqlSelects(extraSelects) - .build(); - return wrapInQueryStep(selects, functionProvider); - } - - private static QueryStep wrapInQueryStep(Selects selects, SqlFunctionProvider functionProvider) { - - // not all SQL dialects can create a SELECT statement without a FROM clause, - // so we ensure there is some no-op table to select the static values from - Table table = functionProvider.getNoOpTable(); - - return QueryStep.builder() - .selects(selects) - .fromTable(table) - .build(); - } - - @Override - public Class getConversionClass() { - return CQExternal.class; - } - - @Override - public ConversionContext convert(CQExternal external, ConversionContext context) { - SqlFunctionProvider functionProvider = context.getDialectBundle().getFunctionProvider(); - - QueryStep externalIdsCte = createExternalIdsCte(external, functionProvider, context); - ConversionContext withExternalIdCte = context.withQueryStep(externalIdsCte); - - if (!external.isWithExtras()) { - return withExternalIdCte; - } - - QueryStep externalExtrasCte = createExternalExtrasCte(external, functionProvider, context); - return withExternalIdCte.withExternalExtras(externalExtrasCte); - } - - private QueryStep createExternalExtrasCte(CQExternal external, SqlFunctionProvider functionProvider, ConversionContext context) { - List unions = new ArrayList<>(); - for (Map.Entry entry : external.getValuesResolved().entrySet()) { - List>> extrasForId = external.getExtrasForId(entry.getKey()); - QueryStep rowSelects = createRowSelects(entry, extrasForId, functionProvider); - unions.add(rowSelects); - } - Preconditions.checkArgument(!unions.isEmpty(), "Expecting at least 1 converted resolved row when converting a CQExternal"); - return QueryStep.createUnionAllStep(unions, CQ_EXTERNAL_EXTRAS_CTE_NAME, Collections.emptyList(), context.isNegation()); - } - - /** - * For each entry, we need to create a SELECT statement of static values for each pid -> extras. - */ - private QueryStep createRowSelects( - Map.Entry entry, - List>> extra, - SqlFunctionProvider functionProvider - ) { - SqlIdColumns ids = createIdSelect(entry, functionProvider); - List extraSelects = extra.stream().map((Map.Entry> extraEntry) -> createExtraColumnValue(extraEntry, functionProvider)).collect(Collectors.toList()); - return createExtraRowSelect(ids, extraSelects, functionProvider); - } + private static final String CQ_EXTERNAL_IDS_CTE_NAME = "external_ids"; + private static final String CQ_EXTERNAL_EXTRAS_CTE_NAME = "external_extra"; + private static final String UNDERSCORE = "_"; + private static final String WHITESPACE = " "; + + private static QueryStep createExternalIdsCte(CQExternal external, SqlFunctionProvider functionProvider, ConversionContext context) { + List unions = new ArrayList<>(); + for (Map.Entry entry : external.getValuesResolved().entrySet()) { + List rowSelects = createRowSelects(entry, functionProvider); + unions.addAll(rowSelects); + } + Preconditions.checkArgument(!unions.isEmpty(), "Expecting at least 1 resolved row when converting a CQExternal"); + QueryStep allStep = QueryStep.createUnionAllStep(unions, CQ_EXTERNAL_IDS_CTE_NAME, Collections.emptyList(), context.isNegation()); + + Optional maybeValidityDate = allStep.getSelects().getValidityDate(); + + if (maybeValidityDate.isEmpty() || !context.dateRestrictionActive()) { + return allStep; + } + + return QueryStep.builder() + .predecessors(List.of(allStep)) + .conditions(List.of(functionProvider.dateRestriction(functionProvider.forCDateRange(context.getDateRestrictionRange()), maybeValidityDate.get()))) + .selects(allStep.getQualifiedSelects()) + .fromTable(table(name(allStep.getCteName()))) + .cteName(CQ_EXTERNAL_IDS_CTE_NAME + "_date_restriction") + .build(); + + } + + /** + * For each entry, we need to create a SELECT statement of static values for each pid -> date set. For dialects that support date multiranges, + * 1 row per ID is sufficient. For other dialects there can be multiple rows with the same pid -> date range from the date set. + */ + private static List createRowSelects(Map.Entry entry, SqlFunctionProvider functionProvider) { + SqlIdColumns ids = createIdSelect(entry, functionProvider); + List validityDateEntries = functionProvider.forCDateSet(entry.getValue(), SharedAliases.DATES_COLUMN); + return validityDateEntries.stream() + .map(validityDateEntry -> createIdRowSelect(ids, validityDateEntry, functionProvider)) + .toList(); + } + + private static SqlIdColumns createIdSelect(Map.Entry entry, SqlFunctionProvider functionProvider) { + Field primaryColumn = functionProvider.externalId(entry.getKey()).as(SharedAliases.PRIMARY_COLUMN.getAlias()); + return new SqlIdColumns(primaryColumn); + } + + /** + * For each entry, we need to create a SELECT statement of static values for each pid -> extras. + */ + private QueryStep createRowSelects( + Map.Entry entry, + List>> extra, + SqlFunctionProvider functionProvider + ) { + SqlIdColumns ids = createIdSelect(entry); + List extraSelects = extra.stream().map(extraEntry -> createExtraColumnValue(extraEntry, functionProvider)).collect(Collectors.toList()); + return createExtraRowSelect(ids, extraSelects, functionProvider); + } + + private static SqlIdColumns createIdSelect(Map.Entry entry) { + Field primaryColumn = DSL.val(entry.getKey()).coerce(String.class).as(SharedAliases.PRIMARY_COLUMN.getAlias()); + return new SqlIdColumns(primaryColumn); + } + + private static FieldWrapper createExtraColumnValue(Map.Entry> extraEntry, SqlFunctionProvider functionProvider) { + Field extraValues = functionProvider.asArrayRepr(extraEntry.getValue()); + final Name alias = name(extraEntry.getKey().replace(WHITESPACE, UNDERSCORE)); + final Field withAlias = extraValues.as(alias); + return new FieldWrapper<>(withAlias); + } + + /** + * Creates a SELECT statement of static values for each pid -> date entry, like + *
{@code select 1 as "pid", '[2021-01-01,2022-01-01)'::daterange as "date_range"}
+ */ + private static QueryStep createIdRowSelect( + SqlIdColumns ids, + ColumnDateRange validityDate, + SqlFunctionProvider functionProvider + ) { + Selects selects = Selects.builder() + .ids(ids) + .validityDate(Optional.ofNullable(validityDate)) + .build(); + return wrapInQueryStep(selects, functionProvider); + } + + /** + * Creates a SELECT statement of static values for each pid -> extras, like + *
{@code select 1 as "pid", '1' as "payload_1"}
+ */ + private static QueryStep createExtraRowSelect( + SqlIdColumns ids, + List extraSelects, + SqlFunctionProvider functionProvider + ) { + Selects selects = Selects.builder() + .ids(ids) + .sqlSelects(extraSelects) + .build(); + return wrapInQueryStep(selects, functionProvider); + } + + private static QueryStep wrapInQueryStep(Selects selects, SqlFunctionProvider functionProvider) { + + // not all SQL dialects can create a SELECT statement without a FROM clause, + // so we ensure there is some no-op table to select the static values from + Table table = functionProvider.getNoOpTable(); + + return QueryStep.builder() + .selects(selects) + .fromTable(table) + .build(); + } + + @Override + public Class getConversionClass() { + return CQExternal.class; + } + + @Override + public ConversionContext convert(CQExternal external, ConversionContext context) { + SqlFunctionProvider functionProvider = context.getDialectBundle().getFunctionProvider(); + + QueryStep externalIdsCte = createExternalIdsCte(external, functionProvider, context); + ConversionContext withExternalIdCte = context.withQueryStep(externalIdsCte); + + if (!external.isWithExtras()) { + return withExternalIdCte; + } + + QueryStep externalExtrasCte = createExternalExtrasCte(external, functionProvider, context); + return withExternalIdCte.withExternalExtras(externalExtrasCte); + } + + private QueryStep createExternalExtrasCte(CQExternal external, SqlFunctionProvider functionProvider, ConversionContext context) { + List unions = new ArrayList<>(); + for (Map.Entry entry : external.getValuesResolved().entrySet()) { + List>> extrasForId = external.getExtrasForId(entry.getKey()); + QueryStep rowSelects = createRowSelects(entry, extrasForId, functionProvider); + unions.add(rowSelects); + } + Preconditions.checkArgument(!unions.isEmpty(), "Expecting at least 1 converted resolved row when converting a CQExternal"); + return QueryStep.createUnionAllStep(unions, CQ_EXTERNAL_EXTRAS_CTE_NAME, Collections.emptyList(), context.isNegation()); + } + } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java index efad103752..6888670993 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/concept/CQConceptConverter.java @@ -217,7 +217,9 @@ private static Stream collectConditions(CQTable cqTable, Concept if (!(conceptElement instanceof ConceptTreeChild child)) { return Stream.empty(); } - WhereCondition childCondition = child.getCondition().convertToSqlCondition(CTConditionContext.create(cqTable.getConnector().resolve(), functionProvider)); + WhereCondition childCondition = child.getCondition().convertToSqlCondition(CTConditionContext.forConnector( + cqTable.getConnector().resolve(), functionProvider + )); return Stream.concat( collectConditions(cqTable, child.getParent(), functionProvider), Stream.of(childCondition) @@ -228,7 +230,7 @@ private static Optional convertConnectorCondition(CQTable cqTabl final Connector connector = cqTable.getConnector().resolve(); return Optional.ofNullable(connector.getCondition()) - .map(condition -> condition.convertToSqlCondition(CTConditionContext.create(connector, functionProvider))); + .map(condition -> condition.convertToSqlCondition(CTConditionContext.forConnector(connector, functionProvider))); } private static SqlFilters dateRestrictionFilter(ConversionContext context, ColumnDateRange validityDate) { 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 4c53669a2a..4f2badcce4 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,23 +1,29 @@ package com.bakdata.conquery.sql.conversion.cqelement.concept; -import com.bakdata.conquery.models.datasets.Column; -import com.bakdata.conquery.models.datasets.Table; +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; @Value public class CTConditionContext { - Table connectorTable; - Column connectorColumn; + public static final String COLUMN_VALUE_FIELD = "col_val"; + Name connectorColumn; SqlFunctionProvider functionProvider; + boolean forConnector; + + public static CTConditionContext forJoinTables(SqlFunctionProvider functionProvider) { + return new CTConditionContext(name(COLUMN_VALUE_FIELD), functionProvider, false); + } - public static CTConditionContext create(Connector connector, SqlFunctionProvider functionProvider) { + public static CTConditionContext forConnector(Connector connector, SqlFunctionProvider functionProvider) { return new CTConditionContext( - connector.getResolvedTable(), - connector.getColumn() != null ? connector.getColumn().resolve() : null, - functionProvider + connector.getColumn() != null ? name(connector.resolveTableId().getTable(), connector.getColumn().getColumn()) : null, + functionProvider, + true ); } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/intervalpacking/interval-packing.md b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/intervalpacking/interval-packing.md index 82362e8802..a667b3c6ec 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/intervalpacking/interval-packing.md +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/cqelement/intervalpacking/interval-packing.md @@ -36,7 +36,7 @@ by creating a new range from `2012-01-01` to `2013-01-01`. But how do we achieve Taking the short example from above, we want to explain how we do this using the [AnsiSqlIntervalPacker](./AnsiSqlIntervalPacker.java). To outline, we need to -create 3 consecutive common table expressions (CTE): +create 3 consecutive common table conceptConditions (CTE): - `previous_end`: Adds the previous end date to the table - `range_index`: Creates and adds a counter for each new range diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/SqlFunctionProvider.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/SqlFunctionProvider.java index b9ead71cfe..35725e8438 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/SqlFunctionProvider.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/SqlFunctionProvider.java @@ -39,6 +39,9 @@ public interface SqlFunctionProvider { String DEFAULT_DATE_FORMAT = "yyyy-mm-dd"; String SQL_UNIT_SEPARATOR = " || '%s' || ".formatted(ResultSetProcessor.UNIT_SEPARATOR); + /** + * Create database specific representation of the input list, such that it can be read by the respective {@link ResultSetProcessor}. + */ default Field asArrayRepr(List value) { return field(value.stream() .map(DSL::inline) @@ -51,8 +54,18 @@ Collection> orderByValidityDates( Function, ? extends SortField> ordering, List> validityDateFields); + /** + * Return date-Field for the lowest representable date. This is specific per Database engine. + * + * @implSpec We assume, that this value is unreachable and therefore treat it as infinity. + */ Field getMinDateExpression(); + /** + * Return date-Field for the highest representable date. This is specific per Database engine. + * + * @implSpec We assume, that this value is unreachable and therefore treat it as infinity. + */ Field getMaxDateExpression(); Field cast(Field field, DataType type); @@ -66,12 +79,14 @@ Collection> orderByValidityDates( */ String getAnyCharRegex(); - /** - * @return A dummy table that enables selection of static values. - */ - Table getNoOpTable(); + /** + * @return A dummy table that enables selection of static values. + */ + default Table getNoOpTable() { + return noTable(); + } - /** + /** * A date restriction condition is true if holds: dateRestrictionStart < daterangeEnd and dateRestrictionEnd > daterangeStart. The ends of both ranges are * exclusive. */ @@ -104,6 +119,10 @@ default List forCDateSet(CDateSet dateset, SharedAliases alias) ColumnDateRange forValidityDate(ValidityDate validityDate); + /** + * Create condition for if the validityDate is empty. + * Empty means not having both start and end, having just one is acceptable. + */ default Condition isNotEmptyValidityDate(ValidityDate validityDate) { ColumnId singleColumn = validityDate.getColumn(); if (singleColumn != null) { @@ -132,6 +151,9 @@ default Condition isNotEmptyValidityDate(ValidityDate validityDate) { ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter); + /** + * Aggregate columnDateRange into dateSpans of the grouping. + */ ColumnDateRange aggregated(ColumnDateRange columnDateRange); /** @@ -142,6 +164,9 @@ default Condition isNotEmptyValidityDate(ValidityDate validityDate) { */ ColumnDateRange toDualColumn(ColumnDateRange columnDateRange); + /** + * Return {@link ColumnDateRange} containing intersection / shared time of input columns. + */ ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right); @@ -179,18 +204,11 @@ default Condition isNotEmptyValidityDate(ValidityDate validityDate) { */ Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate); - /** - * Extract the lower inclusive bound of a daterange field. Not supported for dialects without range type support. - */ - Field lower(Field daterange); + Field addDays(Field dateColumn, Field amountOfDays); /** - * Extract the upper exclusive bound of a daterange field. Not supported for dialects without range type support. + * Return a random aggregated value from the input column. */ - Field upper(Field daterange); - - Field addDays(Field dateColumn, Field amountOfDays); - Field random(Field column); Condition likeRegex(Field field, String pattern); @@ -221,7 +239,6 @@ default Field arrayOut(List> fields) { fields.stream() // if a field is null, the whole concatenation would be null - but we just want to skip this field in this case, // thus concat an empty string - .map(field -> field) .map(Field::toString) .collect(Collectors.joining(SQL_UNIT_SEPARATOR)); return field(concatenated, String.class); @@ -272,6 +289,9 @@ default Field toDateField(String dateExpression) { ColumnDateRange emptyColumnDateRange(); + /** + * Or-Aggregation of the input field. + */ default Condition orAgg(Field field) { return condition(max(field.cast(Integer.class)).gt(0)); } @@ -282,4 +302,20 @@ default Condition orAgg(Field field) { default Field externalId(String id) { return inline(id, SQLDataType.VARCHAR); } + + Field lower(Field daterange); + + Field upper(Field daterange); + + /** + * Any condition that is acceptable for the specific database on a join. + * (e.g. Hana does not like `true`) + */ + default Condition unconditionalJoinCondition(){ + return noCondition(); + } + + default Field isNull(Field field){ + return field.isNull(); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/clickhouse/ClickhouseFunctionProvider.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/clickhouse/ClickhouseFunctionProvider.java index b945b654d6..873bd95bf2 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/clickhouse/ClickhouseFunctionProvider.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/clickhouse/ClickhouseFunctionProvider.java @@ -31,339 +31,334 @@ public class ClickhouseFunctionProvider implements SqlFunctionProvider { - public static final Integer MIN_DATE_VALUE = -25567; - public static final Integer MAX_DATE_VALUE = 24855; - private static final String ANY_CHAR_REGEX = ".*"; - - @Override - public String getAnyCharRegex() { - return ANY_CHAR_REGEX; - } - - @Override - public Field asArrayRepr(List value) { - return array(value.toArray()); - } - - @Override - public Table getNoOpTable() { - return noTable(); - } - - - @Override - public Field externalId(String id) { - // This is only used in CQExternal to define external Ids. - // Without explicitly tagging this value as Nullable, the Clickhouse QueryPlanner assumes that this it can never be null. - // But in the case of an anti-join (our Negation), this field will be sometimes null, while not testing as `is null` = true - return field("{0}::Nullable(String)", String.class, inline(id, String.class)); - } - - @Override - public Condition dateRestriction(ColumnDateRange dateRestriction, ColumnDateRange daterange) { - - if (dateRestriction.isSingleColumnRange() || daterange.isSingleColumnRange()) { - throw new UnsupportedOperationException("Clickhouse does not support single column ranges."); - } - - Condition dateRestrictionStartsBeforeDate = dateRestriction.getStart().lessThan(daterange.getEnd()); - Condition dateRestrictionEndsAfterDate = dateRestriction.getEnd().greaterThan(daterange.getStart()); - - return condition(dateRestrictionStartsBeforeDate.and(dateRestrictionEndsAfterDate)); - } - - - @Override - public ColumnDateRange forCDateRange(CDateRange daterange) { - - Field startDateExpression = getMinDateExpression(); - Field endDateExpression = getMaxDateExpression(); - - if (daterange.hasLowerBound()) { - startDateExpression = inline(Date.valueOf(daterange.getMin())); - } - if (daterange.hasUpperBound()) { - endDateExpression = inline(Date.valueOf(daterange.getMax().plusDays(1))); - } - - return ColumnDateRange.of(startDateExpression, endDateExpression); - } - - @Override - public Field toDateField(String dateExpression) { - return function( - "toDate", - Date.class, - inline(dateExpression), - inline(DEFAULT_DATE_FORMAT) - ); - } - - @Override - public Condition isNotEmptyDateRange(ColumnDateRange columnDateRange) { - Condition startNotMin = columnDateRange.getStart().notEqual(getMinDateExpression()); - Condition endNotMax = columnDateRange.getEnd().notEqual(getMaxDateExpression()); - return condition(startNotMin.and(endNotMax).neg()); - } - - @Override - public ColumnDateRange emptyColumnDateRange() { - return ColumnDateRange.of(inline(null, Date.class), inline(null, Date.class)); - } - - @Override - public ColumnDateRange forValidityDate(ValidityDate validityDate) { - return toColumnDateRange(validityDate); - } - - - @Override - public ColumnDateRange allRange() { - return ColumnDateRange.of(getMinDateExpression().as("all_range_start"), getMaxDateExpression().as("all_range_end")); - } - - private ColumnDateRange toColumnDateRange(ValidityDate validityDate) { - - String tableName = validityDate.getConnector().resolveTableId().getTable(); - - Column startColumn; - Column endColumn; - - // if no end column is present, the only existing column is both start and end of the date range - if (validityDate.getColumn() != null) { - Column column = validityDate.getColumn().resolve(); - startColumn = column; - endColumn = column; - } - else { - startColumn = validityDate.getStartColumn().resolve(); - endColumn = validityDate.getEndColumn().resolve(); - } - - return ofStartAndEnd(tableName, startColumn, endColumn); - } - - - @Override - public Field arrayOut(List> fields) { - return field("arrayFilter(x -> x <> '', {0})", Object.class, array(fields)); - } - - private ColumnDateRange ofStartAndEnd(String tableName, Column startColumn, Column endColumn) { - - // Since coalesce makes Clickhouse certain, that the field is not nullable, it will do silly stuff with it down the line: - // missing values (for example in outer-joins) will be coerced to 0 = 01-01-1970, which is clearly not correct - // Therefore we tag the values as Nullable again to make Clickhouse show some respect - - Field rangeStart = field("{0}::Nullable(Date32)", Date.class, coalesce( - field(name(tableName, startColumn.getName()), Date.class), - getMinDateExpression() - ) - ); - // when aggregating date ranges, we want to treat the last day of the range as excluded, - // so when using the date value of the end column, we add +1 day as end of the date range - Field rangeEnd = field("{0}::Nullable(Date32)", Date.class, coalesce( - addDays(field(name(tableName, endColumn.getName()), Date.class), inline(1)), - getMaxDateExpression() - ) - ); - - return ColumnDateRange.of(rangeStart, rangeEnd); - } - - @Override - public Field addDays(Field dateColumn, Field amountOfDays) { - return function( - "addDays", - Date.class, - dateColumn, - amountOfDays - ); - } - - @Override - public ColumnDateRange forValidityDate(ValidityDate validityDate, CDateRange dateRestriction) { - - ColumnDateRange validityDateRange = toColumnDateRange(validityDate); - ColumnDateRange restriction = toColumnDateRange(dateRestriction); - - Field lowerBound = when(validityDateRange.getStart().lessThan(restriction.getStart()), restriction.getStart()) - .otherwise(validityDateRange.getStart()); - - Field maxDate = getMinDateExpression(); - // we want to add +1 day to the end date - except when it's the max date already - Field restrictionUpperBound = when(restriction.getEnd().eq(maxDate), maxDate).otherwise(addDays(restriction.getEnd(), inline(1))); - Field upperBound = when(validityDateRange.getEnd().greaterThan(restriction.getEnd()), restrictionUpperBound) - .otherwise(validityDateRange.getEnd()); - - return ColumnDateRange.of(lowerBound, upperBound); - } - - private ColumnDateRange toColumnDateRange(CDateRange dateRestriction) { - - Field startDateExpression = getMinDateExpression(); - Field endDateExpression = getMaxDateExpression(); - - if (dateRestriction.hasLowerBound()) { - startDateExpression = inline(Date.valueOf(dateRestriction.getMin())); - } - if (dateRestriction.hasUpperBound()) { - endDateExpression = inline(Date.valueOf(dateRestriction.getMax())); - } - - return ColumnDateRange.of(startDateExpression, endDateExpression); - } - - @NotNull - @Override - public Collection> orderByValidityDates( - Function, ? extends SortField> ordering, - List> validityDateFields) { - - return List.of( - ordering.apply(nullif(validityDateFields.getFirst(), getMinDateExpression())).nullsLast(), - ordering.apply(nullif(validityDateFields.getLast(), getMaxDateExpression())).nullsLast() - ); - } - - @Override - public Field getMinDateExpression() { - return field("toDate32({0})", Date.class, MIN_DATE_VALUE); - } - - @Override - public Field getMaxDateExpression() { - return field("toDate32({0})", Date.class, MAX_DATE_VALUE); - } - - @Override - public ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter) { - String tableName = daterangeSelectOrFilter.getTable().getName(); - if (daterangeSelectOrFilter.getEndColumn() != null) { - return ofStartAndEnd(tableName, daterangeSelectOrFilter.getStartColumn().resolve(), daterangeSelectOrFilter.getEndColumn().resolve()); - } - Column column = daterangeSelectOrFilter.getColumn().resolve(); - return ofStartAndEnd(tableName, column, column); - } - - @Override - public ColumnDateRange aggregated(ColumnDateRange columnDateRange) { - return ColumnDateRange.of( - min(columnDateRange.getStart()), - max(columnDateRange.getEnd()) - ) - .as(columnDateRange.getAlias()); - } - - @Override - public ColumnDateRange toDualColumn(ColumnDateRange columnDateRange) { - return ColumnDateRange.of(columnDateRange.getStart(), columnDateRange.getEnd()); - } - - @Override - public ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right) { - Field greatest = DSL.greatest(left.getStart(), right.getStart()); - Field least = DSL.least(left.getEnd(), right.getEnd()); - return ColumnDateRange.of(greatest, least); - } - - @Override - public QueryStep unnestDaterange(ColumnDateRange nested, QueryStep predecessor, String cteName) { - return predecessor; - } - - @Override - public Field dateRangeAggregation(ColumnDateRange columnDateRange) { - return field("groupArray({0})", Object[].class, dateRangeToField(columnDateRange)); - } - - @Override - public Field dateRangeToField(ColumnDateRange columnDateRange) { - - if (columnDateRange.isSingleColumnRange()) { - throw new UnsupportedOperationException("Clickhouse does not support single-column date ranges."); - } - - Field startDateExpression = field("{0}::Nullable(Integer)", Object.class, columnDateRange.getStart()); - Field endDateExpression = field("{0}::Nullable(Integer)", Object.class, columnDateRange.getEnd()); - - return function("tuple", Object.class, startDateExpression, endDateExpression); - } - - @Override - public Field cast(Field field, DataType type) { - if (type == SQLDataType.VARCHAR) { - return function("toString", type.getType(), field); - } - return function( - name("CAST"), - type.getType(), - field("{0} AS {1}", field, keyword(type.getName())) - ); - } - - @Override - public Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate) { - - String unit = switch (datePart) { - case DAYS -> "days"; - case MONTHS -> "months"; - case YEARS, DECADES, CENTURIES -> "years"; - default -> throw new UnsupportedOperationException("Given ChronoUnit %s is not supported."); - }; - - Field dateDistance = function("age", Integer.class, inline(unit), startDate, endDate); - - // HANA does not support decades or centuries directly - dateDistance = switch (datePart) { - case DECADES -> dateDistance.divide(10); - case CENTURIES -> dateDistance.divide(100); - default -> dateDistance; - }; - - // otherwise HANA would return floating point numbers for date distances - return dateDistance.cast(Integer.class); - } - - @Override - public Field lower(Field daterange) { - // Only relevant for PG - throw new NotImplementedException(); - } - - @Override - public Field upper(Field daterange) { - // Only relevant for PG - throw new NotImplementedException(); - } - - @Override - public Field random(Field column) { - return field( - "groupArraySample(1)({0})[1]", - column.getType(), - column - ); - } - - @Override - public Condition likeRegex(Field field, String pattern) { - return condition(function("match", Boolean.class, field, inline(pattern))); - } - - - @Override - public Field yearQuarter(Field dateField) { - return field("formatDateTime({0}, '%Y-Q%Q')", String.class, dateField); - } - - @Override - public ColumnDateRange allRangeIf(Condition condition) { - return ColumnDateRange.of( - when(condition.isTrue(), - allRange() - ) - ); - } + public static final Integer MIN_DATE_VALUE = -25567; + public static final Integer MAX_DATE_VALUE = 24855; + private static final String ANY_CHAR_REGEX = ".*"; + + @Override + public String getAnyCharRegex() { + return ANY_CHAR_REGEX; + } + + @Override + public Field asArrayRepr(List value) { + return array(value.toArray()); + } + + + @Override + public Field externalId(String id) { + // This is only used in CQExternal to define external Ids. + // Without explicitly tagging this value as Nullable, the Clickhouse QueryPlanner assumes that this it can never be null. + // But in the case of an anti-join (our Negation), this field will be sometimes null, while not testing as `is null` = true + return field("{0}::Nullable(String)", String.class, inline(id, String.class)); + } + + @Override + public Condition dateRestriction(ColumnDateRange dateRestriction, ColumnDateRange daterange) { + + if (dateRestriction.isSingleColumnRange() || daterange.isSingleColumnRange()) { + throw new UnsupportedOperationException("Clickhouse does not support single column ranges."); + } + + Condition dateRestrictionStartsBeforeDate = dateRestriction.getStart().lessThan(daterange.getEnd()); + Condition dateRestrictionEndsAfterDate = dateRestriction.getEnd().greaterThan(daterange.getStart()); + + return condition(dateRestrictionStartsBeforeDate.and(dateRestrictionEndsAfterDate)); + } + + + @Override + public ColumnDateRange forCDateRange(CDateRange daterange) { + + Field startDateExpression = getMinDateExpression(); + Field endDateExpression = getMaxDateExpression(); + + if (daterange.hasLowerBound()) { + startDateExpression = inline(Date.valueOf(daterange.getMin())); + } + if (daterange.hasUpperBound()) { + endDateExpression = inline(Date.valueOf(daterange.getMax().plusDays(1))); + } + + return ColumnDateRange.of(startDateExpression, endDateExpression); + } + + @Override + public Field toDateField(String dateExpression) { + return function( + "toDate", + Date.class, + inline(dateExpression), + inline(DEFAULT_DATE_FORMAT) + ); + } + + @Override + public Condition isNotEmptyDateRange(ColumnDateRange columnDateRange) { + Condition startNotMin = columnDateRange.getStart().notEqual(getMinDateExpression()); + Condition endNotMax = columnDateRange.getEnd().notEqual(getMaxDateExpression()); + return condition(startNotMin.and(endNotMax).neg()); + } + + @Override + public ColumnDateRange emptyColumnDateRange() { + return ColumnDateRange.of(inline(null, Date.class), inline(null, Date.class)); + } + + @Override + public ColumnDateRange forValidityDate(ValidityDate validityDate) { + return toColumnDateRange(validityDate); + } + + + @Override + public ColumnDateRange allRange() { + return ColumnDateRange.of(getMinDateExpression().as("all_range_start"), getMaxDateExpression().as("all_range_end")); + } + + private ColumnDateRange toColumnDateRange(ValidityDate validityDate) { + + String tableName = validityDate.getConnector().resolveTableId().getTable(); + + Column startColumn; + Column endColumn; + + // if no end column is present, the only existing column is both start and end of the date range + if (validityDate.getColumn() != null) { + Column column = validityDate.getColumn().resolve(); + startColumn = column; + endColumn = column; + } else { + startColumn = validityDate.getStartColumn().resolve(); + endColumn = validityDate.getEndColumn().resolve(); + } + + return ofStartAndEnd(tableName, startColumn, endColumn); + } + + + @Override + public Field arrayOut(List> fields) { + return field("arrayFilter(x -> x <> '', {0})", Object.class, array(fields)); + } + + private ColumnDateRange ofStartAndEnd(String tableName, Column startColumn, Column endColumn) { + + // Since coalesce makes Clickhouse certain, that the field is not nullable, it will do silly stuff with it down the line: + // missing values (for example in outer-joins) will be coerced to 0 = 01-01-1970, which is clearly not correct + // Therefore we tag the values as Nullable again to make Clickhouse show some respect + + Field rangeStart = field("{0}::Nullable(Date32)", Date.class, coalesce( + field(name(tableName, startColumn.getName()), Date.class), + getMinDateExpression() + ) + ); + // when aggregating date ranges, we want to treat the last day of the range as excluded, + // so when using the date value of the end column, we add +1 day as end of the date range + Field rangeEnd = field("{0}::Nullable(Date32)", Date.class, coalesce( + addDays(field(name(tableName, endColumn.getName()), Date.class), inline(1)), + getMaxDateExpression() + ) + ); + + return ColumnDateRange.of(rangeStart, rangeEnd); + } + + @Override + public Field addDays(Field dateColumn, Field amountOfDays) { + return function( + "addDays", + Date.class, + dateColumn, + amountOfDays + ); + } + + @Override + public ColumnDateRange forValidityDate(ValidityDate validityDate, CDateRange dateRestriction) { + + ColumnDateRange validityDateRange = toColumnDateRange(validityDate); + ColumnDateRange restriction = toColumnDateRange(dateRestriction); + + Field lowerBound = when(validityDateRange.getStart().lessThan(restriction.getStart()), restriction.getStart()) + .otherwise(validityDateRange.getStart()); + + Field maxDate = getMinDateExpression(); + // we want to add +1 day to the end date - except when it's the max date already + Field restrictionUpperBound = when(restriction.getEnd().eq(maxDate), maxDate).otherwise(addDays(restriction.getEnd(), inline(1))); + Field upperBound = when(validityDateRange.getEnd().greaterThan(restriction.getEnd()), restrictionUpperBound) + .otherwise(validityDateRange.getEnd()); + + return ColumnDateRange.of(lowerBound, upperBound); + } + + private ColumnDateRange toColumnDateRange(CDateRange dateRestriction) { + + Field startDateExpression = getMinDateExpression(); + Field endDateExpression = getMaxDateExpression(); + + if (dateRestriction.hasLowerBound()) { + startDateExpression = inline(Date.valueOf(dateRestriction.getMin())); + } + if (dateRestriction.hasUpperBound()) { + endDateExpression = inline(Date.valueOf(dateRestriction.getMax())); + } + + return ColumnDateRange.of(startDateExpression, endDateExpression); + } + + @NotNull + @Override + public Collection> orderByValidityDates( + Function, ? extends SortField> ordering, + List> validityDateFields) { + + return List.of( + ordering.apply(nullif(validityDateFields.getFirst(), getMinDateExpression())).nullsLast(), + ordering.apply(nullif(validityDateFields.getLast(), getMaxDateExpression())).nullsLast() + ); + } + + @Override + public Field getMinDateExpression() { + return field("toDate32({0})", Date.class, MIN_DATE_VALUE); + } + + @Override + public Field getMaxDateExpression() { + return field("toDate32({0})", Date.class, MAX_DATE_VALUE); + } + + @Override + public ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter) { + String tableName = daterangeSelectOrFilter.getTable().getName(); + if (daterangeSelectOrFilter.getEndColumn() != null) { + return ofStartAndEnd(tableName, daterangeSelectOrFilter.getStartColumn().resolve(), daterangeSelectOrFilter.getEndColumn().resolve()); + } + Column column = daterangeSelectOrFilter.getColumn().resolve(); + return ofStartAndEnd(tableName, column, column); + } + + @Override + public ColumnDateRange aggregated(ColumnDateRange columnDateRange) { + return ColumnDateRange.of( + min(columnDateRange.getStart()), + max(columnDateRange.getEnd()) + ) + .as(columnDateRange.getAlias()); + } + + @Override + public ColumnDateRange toDualColumn(ColumnDateRange columnDateRange) { + return ColumnDateRange.of(columnDateRange.getStart(), columnDateRange.getEnd()); + } + + @Override + public ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right) { + Field greatest = DSL.greatest(left.getStart(), right.getStart()); + Field least = DSL.least(left.getEnd(), right.getEnd()); + return ColumnDateRange.of(greatest, least); + } + + @Override + public QueryStep unnestDaterange(ColumnDateRange nested, QueryStep predecessor, String cteName) { + return predecessor; + } + + @Override + public Field dateRangeAggregation(ColumnDateRange columnDateRange) { + return field("groupArray({0})", Object[].class, dateRangeToField(columnDateRange)); + } + + @Override + public Field dateRangeToField(ColumnDateRange columnDateRange) { + + if (columnDateRange.isSingleColumnRange()) { + throw new UnsupportedOperationException("Clickhouse does not support single-column date ranges."); + } + + Field startDateExpression = field("{0}::Nullable(Integer)", Object.class, columnDateRange.getStart()); + Field endDateExpression = field("{0}::Nullable(Integer)", Object.class, columnDateRange.getEnd()); + + return function("tuple", Object.class, startDateExpression, endDateExpression); + } + + @Override + public Field cast(Field field, DataType type) { + if (type == SQLDataType.VARCHAR) { + return function("toString", type.getType(), field); + } + return function( + name("CAST"), + type.getType(), + field("{0} AS {1}", field, keyword(type.getName())) + ); + } + + @Override + public Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate) { + + String unit = switch (datePart) { + case DAYS -> "days"; + case MONTHS -> "months"; + case YEARS, DECADES, CENTURIES -> "years"; + default -> throw new UnsupportedOperationException("Given ChronoUnit %s is not supported."); + }; + + Field dateDistance = function("age", Integer.class, inline(unit), startDate, endDate); + + // HANA does not support decades or centuries directly + dateDistance = switch (datePart) { + case DECADES -> dateDistance.divide(10); + case CENTURIES -> dateDistance.divide(100); + default -> dateDistance; + }; + + // otherwise HANA would return floating point numbers for date distances + return dateDistance.cast(Integer.class); + } + + @Override + public Field lower(Field daterange) { + // Only relevant for PG + throw new NotImplementedException(); + } + + @Override + public Field upper(Field daterange) { + // Only relevant for PG + throw new NotImplementedException(); + } + + + @Override + public Field random(Field column) { + return field( + "groupArraySample(1)({0})[1]", + column.getType(), + column + ); + } + + @Override + public Condition likeRegex(Field field, String pattern) { + return condition(function("match", Boolean.class, field, inline(pattern))); + } + + + @Override + public Field yearQuarter(Field dateField) { + return field("formatDateTime({0}, '%Y-Q%Q')", String.class, dateField); + } + + @Override + public ColumnDateRange allRangeIf(Condition condition) { + return ColumnDateRange.of( + when(condition.isTrue(), + allRange() + ) + ); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/hana/HanaSqlFunctionProvider.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/hana/HanaSqlFunctionProvider.java index 1e9f39e93a..bb47ce606c 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/hana/HanaSqlFunctionProvider.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/hana/HanaSqlFunctionProvider.java @@ -18,6 +18,7 @@ import com.bakdata.conquery.sql.conversion.dialect.SqlFunctionProvider; import com.bakdata.conquery.sql.conversion.model.ColumnDateRange; import com.bakdata.conquery.sql.conversion.model.QueryStep; +import org.apache.commons.lang3.NotImplementedException; import org.jetbrains.annotations.NotNull; import org.jooq.Condition; import org.jooq.DataType; @@ -31,337 +32,350 @@ public class HanaSqlFunctionProvider implements SqlFunctionProvider { - public static final String MAX_DATE_VALUE = "9999-12-31"; - public static final String MIN_DATE_VALUE = "0001-01-01"; - public static final String DATERANGE_SEPARATOR = "/"; - - public static final char DATE_SET_SEPARATOR = UNIT_SEPARATOR; - private static final String ANY_CHAR_REGEX = ".*"; - private static final String NOP_TABLE = "DUMMY"; - - @Override - public String getAnyCharRegex() { - return ANY_CHAR_REGEX; - } - - @Override - public Table getNoOpTable() { - // see https://help.sap.com/docs/SAP_DATA_HUB/e8d3e271a4554a35a5a6136d3d6af3f8/4d4b939b37b84bea8b2aa2ada640c392.html - return table(name(NOP_TABLE)); - } - - @Override - public Condition dateRestriction(ColumnDateRange dateRestriction, ColumnDateRange daterange) { - - if (dateRestriction.isSingleColumnRange() || daterange.isSingleColumnRange()) { - throw new UnsupportedOperationException("HANA does not support single column ranges."); - } - - Condition dateRestrictionStartsBeforeDate = dateRestriction.getStart().lessThan(daterange.getEnd()); - Condition dateRestrictionEndsAfterDate = dateRestriction.getEnd().greaterThan(daterange.getStart()); - - return condition(dateRestrictionStartsBeforeDate.and(dateRestrictionEndsAfterDate)); - } - - - @Override - public ColumnDateRange forCDateRange(CDateRange daterange) { - - String startDateExpression = MIN_DATE_VALUE; - String endDateExpression = MAX_DATE_VALUE; - - if (daterange.hasLowerBound()) { - startDateExpression = daterange.getMin().toString(); - } - if (daterange.hasUpperBound()) { - // end date is expected to be handled as exclusive, but if it's already the maximum date, we can't add +1 day - if (Objects.equals(daterange.getMax(), LocalDate.ofEpochDay(CDateRange.POSITIVE_INFINITY))) { - throw new UnsupportedOperationException( - "Given daterange has an upper bound of CDateRange.POSITIVE_INFINITY, which is not supported by ConQuery's HANA dialect."); - } - LocalDate exclusiveMaxDate = daterange.getMax().plusDays(1); - endDateExpression = exclusiveMaxDate.toString(); - } - - return ColumnDateRange.of(toDateField(startDateExpression), toDateField(endDateExpression)); - } - - @Override - public Field toDateField(String dateExpression) { - return function( - "TO_DATE", - Date.class, - inline(dateExpression), - inline(DEFAULT_DATE_FORMAT) - ); - } - - @Override - public Condition isNotEmptyDateRange(ColumnDateRange columnDateRange) { - return columnDateRange.getStart().notEqual(getMinDateExpression()).or(columnDateRange.getEnd().notEqual(getMaxDateExpression())); - - } - - @Override - public ColumnDateRange emptyColumnDateRange() { - return ColumnDateRange.of(inline(null, Date.class), inline(null, Date.class)); - } - - - @Override - public ColumnDateRange forValidityDate(ValidityDate validityDate) { - return toColumnDateRange(validityDate); - } - - @Override - public ColumnDateRange allRange() { - return ColumnDateRange.of(getMinDateExpression().as("all_range_start"), getMaxDateExpression().as("all_range_end")); - } - - private ColumnDateRange toColumnDateRange(ValidityDate validityDate) { - - String tableName = validityDate.getConnector().resolveTableId().getTable(); - - Column startColumn; - Column endColumn; - - // if no end column is present, the only existing column is both start and end of the date range - if (validityDate.getColumn() != null) { - Column column = validityDate.getColumn().resolve(); - startColumn = column; - endColumn = column; - } - else { - startColumn = validityDate.getStartColumn().resolve(); - endColumn = validityDate.getEndColumn().resolve(); - } - - return ofStartAndEnd(tableName, startColumn, endColumn); - } - - private ColumnDateRange ofStartAndEnd(String tableName, Column startColumn, Column endColumn) { - - Field rangeStart = coalesce( - field(name(tableName, startColumn.getName()), Date.class), - getMinDateExpression() - ); - // when aggregating date ranges, we want to treat the last day of the range as excluded, - // so when using the date value of the end column, we add +1 day as end of the date range - Field rangeEnd = coalesce( - addDays(field(name(tableName, endColumn.getName()), Date.class), inline(1)), - getMaxDateExpression() - ); - - return ColumnDateRange.of(rangeStart, rangeEnd); - } - - @Override - public Field addDays(Field dateColumn, Field amountOfDays) { - return function( - "ADD_DAYS", - Date.class, - dateColumn, - amountOfDays - ); - } - - @Override - public ColumnDateRange allRangeIf(Condition condition) { - return ColumnDateRange.of( - when(condition.isTrue(), - allRange() - ) - ); - } - - - @Override - public ColumnDateRange forValidityDate(ValidityDate validityDate, CDateRange dateRestriction) { - - ColumnDateRange validityDateRange = toColumnDateRange(validityDate); - ColumnDateRange restriction = toColumnDateRange(dateRestriction); - - Field lowerBound = when(validityDateRange.getStart().lessThan(restriction.getStart()), restriction.getStart()) - .otherwise(validityDateRange.getStart()); - - Field maxDate = toDateField(MAX_DATE_VALUE); // we want to add +1 day to the end date - except when it's the max date already - Field restrictionUpperBound = when(restriction.getEnd().eq(maxDate), maxDate).otherwise(addDays(restriction.getEnd(), inline(1))); - Field upperBound = when(validityDateRange.getEnd().greaterThan(restriction.getEnd()), restrictionUpperBound) - .otherwise(validityDateRange.getEnd()); - - return ColumnDateRange.of(lowerBound, upperBound); - } - - private ColumnDateRange toColumnDateRange(CDateRange dateRestriction) { - - String startDateExpression = MIN_DATE_VALUE; - String endDateExpression = MAX_DATE_VALUE; - - if (dateRestriction.hasLowerBound()) { - startDateExpression = dateRestriction.getMin().toString(); - } - if (dateRestriction.hasUpperBound()) { - endDateExpression = dateRestriction.getMax().toString(); - } - - return ColumnDateRange.of(toDateField(startDateExpression), toDateField(endDateExpression)); - } - - - @NotNull - @Override - public Collection> orderByValidityDates( - Function, ? extends SortField> ordering, - List> validityDateFields) { - - return List.of( - ordering.apply(nullif(validityDateFields.getFirst(), getMinDateExpression())).nullsLast(), - ordering.apply(nullif(validityDateFields.getLast(), getMaxDateExpression())).nullsLast() - ); - } - - @Override - public Field getMinDateExpression() { - return toDateField(MIN_DATE_VALUE); - } - - @Override - public Field getMaxDateExpression() { - return toDateField(MAX_DATE_VALUE); - } - - @Override - public ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter) { - String tableName = daterangeSelectOrFilter.getTable().getName(); - if (daterangeSelectOrFilter.getEndColumn() != null) { - return ofStartAndEnd(tableName, daterangeSelectOrFilter.getStartColumn().resolve(), daterangeSelectOrFilter.getEndColumn().resolve()); - } - Column column = daterangeSelectOrFilter.getColumn().resolve(); - return ofStartAndEnd(tableName, column, column); - } - - @Override - public ColumnDateRange aggregated(ColumnDateRange columnDateRange) { - return ColumnDateRange.of( - min(columnDateRange.getStart()), - max(columnDateRange.getEnd()) - ) - .as(columnDateRange.getAlias()); - } - - @Override - public ColumnDateRange toDualColumn(ColumnDateRange columnDateRange) { - // HANA does not support single column ranges - return ColumnDateRange.of(columnDateRange.getStart(), columnDateRange.getEnd()); - } - - @Override - public ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right) { - Field greatest = DSL.greatest(left.getStart(), right.getStart()); - Field least = DSL.least(left.getEnd(), right.getEnd()); - return ColumnDateRange.of(greatest, least); - } - - @Override - public QueryStep unnestDaterange(ColumnDateRange nested, QueryStep predecessor, String cteName) { - // HANA does not support single column datemultiranges - return predecessor; - } - - @Override - public Field dateRangeAggregation(ColumnDateRange columnDateRange) { - - Field stringAggregation = stringAggregation( - dateRangeToField(columnDateRange), - toChar(DATE_SET_SEPARATOR), - List.of(columnDateRange.getStart()) - ); - - // encapsulate all ranges (including empty ranges) within curly braces - return stringAggregation; - } - - @Override - public Field dateRangeToField(ColumnDateRange columnDateRange) { - - if (columnDateRange.isSingleColumnRange()) { - throw new UnsupportedOperationException("HANA does not support single-column date ranges."); - } - - // translation is handled in printer - return field("'[' || {0} || {2} || {1} || ')'", String.class, - cast(columnDateRange.getStart(), SQLDataType.VARCHAR), - cast(columnDateRange.getEnd(), SQLDataType.VARCHAR), - DATERANGE_SEPARATOR - ); - } - - @Override - public Field cast(Field field, DataType type) { - // HANA would require an explicit length param when using CAST with varchar type, TO_VARCHAR does not require this - if (type == SQLDataType.VARCHAR) { - return function("TO_VARCHAR", type.getType(), field); - } - return function( - "CAST", - type.getType(), - field("{0} AS {1}", field, keyword(type.getName())) - ); - } - - @Override - public Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate) { - - String betweenFunction = switch (datePart) { - case DAYS -> "DAYS_BETWEEN"; - case MONTHS -> "MONTHS_BETWEEN"; - case YEARS, DECADES, CENTURIES -> "YEARS_BETWEEN"; - default -> throw new UnsupportedOperationException("Given ChronoUnit %s is not supported."); - }; - - Field dateDistance = function(betweenFunction, Integer.class, startDate, endDate); - - // HANA does not support decades or centuries directly - dateDistance = switch (datePart) { - case DECADES -> dateDistance.divide(10); - case CENTURIES -> dateDistance.divide(100); - default -> dateDistance; - }; - - // otherwise HANA would return floating point numbers for date distances - return dateDistance.cast(Integer.class); - } - - @Override - public Field lower(Field daterange) { - throw new UnsupportedOperationException("HANA does not support single-column date ranges."); - } - - @Override - public Field upper(Field daterange) { - throw new UnsupportedOperationException("HANA does not support single-column date ranges."); - } - - @Override - public Field random(Field column) { - return field( - "{0}({1} {2})", - column.getType(), - keyword("FIRST_VALUE"), - column, - orderBy(function("RAND", Object.class)) - ); - } - - @Override - public Condition likeRegex(Field field, String pattern) { - return condition("{0} {1} {2}", field, keyword("LIKE_REGEXPR"), pattern); - } - - - @Override - public Field yearQuarter(Field dateField) { - return function("QUARTER", String.class, dateField); - } + public static final String MAX_DATE_VALUE = "9999-12-31"; + public static final String MIN_DATE_VALUE = "0001-01-01"; + public static final String DATERANGE_SEPARATOR = "/"; + + public static final char DATE_SET_SEPARATOR = UNIT_SEPARATOR; + private static final String ANY_CHAR_REGEX = ".*"; + private static final String NOP_TABLE = "DUMMY"; + @Override + public String getAnyCharRegex() { + return ANY_CHAR_REGEX; + } + + + @Override + public Table getNoOpTable() { + // see https://help.sap.com/docs/SAP_DATA_HUB/e8d3e271a4554a35a5a6136d3d6af3f8/4d4b939b37b84bea8b2aa2ada640c392.html + return table(name(NOP_TABLE)); + } + + @Override + public Condition unconditionalJoinCondition() { + // Hana requires a specific syntax structure, this is the minimal solution. + return inline(true).eq(inline(true)); + } + + @Override + public Condition dateRestriction(ColumnDateRange dateRestriction, ColumnDateRange daterange) { + + if (dateRestriction.isSingleColumnRange() || daterange.isSingleColumnRange()) { + throw new UnsupportedOperationException("HANA does not support single column ranges."); + } + + Condition dateRestrictionStartsBeforeDate = dateRestriction.getStart().lessThan(daterange.getEnd()); + Condition dateRestrictionEndsAfterDate = dateRestriction.getEnd().greaterThan(daterange.getStart()); + + return condition(dateRestrictionStartsBeforeDate.and(dateRestrictionEndsAfterDate)); + } + + + @Override + public ColumnDateRange forCDateRange(CDateRange daterange) { + + String startDateExpression = MIN_DATE_VALUE; + String endDateExpression = MAX_DATE_VALUE; + + if (daterange.hasLowerBound()) { + startDateExpression = daterange.getMin().toString(); + } + if (daterange.hasUpperBound()) { + // end date is expected to be handled as exclusive, but if it's already the maximum date, we can't add +1 day + if (Objects.equals(daterange.getMax(), LocalDate.ofEpochDay(CDateRange.POSITIVE_INFINITY))) { + throw new UnsupportedOperationException( + "Given daterange has an upper bound of CDateRange.POSITIVE_INFINITY, which is not supported by ConQuery's HANA dialect."); + } + LocalDate exclusiveMaxDate = daterange.getMax().plusDays(1); + endDateExpression = exclusiveMaxDate.toString(); + } + + return ColumnDateRange.of(toDateField(startDateExpression), toDateField(endDateExpression)); + } + + @Override + public Field toDateField(String dateExpression) { + return function( + "TO_DATE", + Date.class, + inline(dateExpression), + inline(DEFAULT_DATE_FORMAT) + ); + } + + @Override + public Condition isNotEmptyDateRange(ColumnDateRange columnDateRange) { + return columnDateRange.getStart().notEqual(getMinDateExpression()).or(columnDateRange.getEnd().notEqual(getMaxDateExpression())); + + } + + @Override + public ColumnDateRange emptyColumnDateRange() { + return ColumnDateRange.of(inline(null, Date.class), inline(null, Date.class)); + } + + @Override + public Field lower(Field daterange) { + throw new NotImplementedException("Only relevant for PG."); + } + + @Override + public Field upper(Field daterange) { + throw new NotImplementedException("Only relevant for PG."); + } + + + @Override + public ColumnDateRange forValidityDate(ValidityDate validityDate) { + return toColumnDateRange(validityDate); + } + + @Override + public ColumnDateRange allRange() { + return ColumnDateRange.of(getMinDateExpression().as("all_range_start"), getMaxDateExpression().as("all_range_end")); + } + + private ColumnDateRange toColumnDateRange(ValidityDate validityDate) { + + String tableName = validityDate.getConnector().resolveTableId().getTable(); + + Column startColumn; + Column endColumn; + + // if no end column is present, the only existing column is both start and end of the date range + if (validityDate.getColumn() != null) { + Column column = validityDate.getColumn().resolve(); + startColumn = column; + endColumn = column; + } else { + startColumn = validityDate.getStartColumn().resolve(); + endColumn = validityDate.getEndColumn().resolve(); + } + + return ofStartAndEnd(tableName, startColumn, endColumn); + } + + private ColumnDateRange ofStartAndEnd(String tableName, Column startColumn, Column endColumn) { + + Field rangeStart = coalesce( + field(name(tableName, startColumn.getName()), Date.class), + getMinDateExpression() + ); + // when aggregating date ranges, we want to treat the last day of the range as excluded, + // so when using the date value of the end column, we add +1 day as end of the date range + Field rangeEnd = coalesce( + addDays(field(name(tableName, endColumn.getName()), Date.class), inline(1)), + getMaxDateExpression() + ); + + return ColumnDateRange.of(rangeStart, rangeEnd); + } + + @Override + public Field addDays(Field dateColumn, Field amountOfDays) { + return function( + "ADD_DAYS", + Date.class, + dateColumn, + amountOfDays + ); + } + + @Override + public ColumnDateRange allRangeIf(Condition condition) { + return ColumnDateRange.of( + when(condition.isTrue(), + allRange() + ) + ); + } + + + @Override + public ColumnDateRange forValidityDate(ValidityDate validityDate, CDateRange dateRestriction) { + + ColumnDateRange validityDateRange = toColumnDateRange(validityDate); + ColumnDateRange restriction = toColumnDateRange(dateRestriction); + + Field lowerBound = when(validityDateRange.getStart().lessThan(restriction.getStart()), restriction.getStart()) + .otherwise(validityDateRange.getStart()); + + Field maxDate = toDateField(MAX_DATE_VALUE); // we want to add +1 day to the end date - except when it's the max date already + Field restrictionUpperBound = when(restriction.getEnd().eq(maxDate), maxDate).otherwise(addDays(restriction.getEnd(), inline(1))); + Field upperBound = when(validityDateRange.getEnd().greaterThan(restriction.getEnd()), restrictionUpperBound) + .otherwise(validityDateRange.getEnd()); + + return ColumnDateRange.of(lowerBound, upperBound); + } + + private ColumnDateRange toColumnDateRange(CDateRange dateRestriction) { + + String startDateExpression = MIN_DATE_VALUE; + String endDateExpression = MAX_DATE_VALUE; + + if (dateRestriction.hasLowerBound()) { + startDateExpression = dateRestriction.getMin().toString(); + } + if (dateRestriction.hasUpperBound()) { + endDateExpression = dateRestriction.getMax().toString(); + } + + return ColumnDateRange.of(toDateField(startDateExpression), toDateField(endDateExpression)); + } + + + @NotNull + @Override + public Collection> orderByValidityDates( + Function, ? extends SortField> ordering, + List> validityDateFields) { + + return List.of( + ordering.apply(nullif(validityDateFields.getFirst(), getMinDateExpression())).nullsLast(), + ordering.apply(nullif(validityDateFields.getLast(), getMaxDateExpression())).nullsLast() + ); + } + + @Override + public Field getMinDateExpression() { + return toDateField(MIN_DATE_VALUE); + } + + @Override + public Field getMaxDateExpression() { + return toDateField(MAX_DATE_VALUE); + } + + @Override + public ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter) { + String tableName = daterangeSelectOrFilter.getTable().getName(); + if (daterangeSelectOrFilter.getEndColumn() != null) { + return ofStartAndEnd(tableName, daterangeSelectOrFilter.getStartColumn().resolve(), daterangeSelectOrFilter.getEndColumn().resolve()); + } + Column column = daterangeSelectOrFilter.getColumn().resolve(); + return ofStartAndEnd(tableName, column, column); + } + + @Override + public ColumnDateRange aggregated(ColumnDateRange columnDateRange) { + return ColumnDateRange.of( + min(columnDateRange.getStart()), + max(columnDateRange.getEnd()) + ) + .as(columnDateRange.getAlias()); + } + + @Override + public ColumnDateRange toDualColumn(ColumnDateRange columnDateRange) { + // HANA does not support single column ranges + return ColumnDateRange.of(columnDateRange.getStart(), columnDateRange.getEnd()); + } + + @Override + public ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right) { + Field greatest = DSL.greatest(left.getStart(), right.getStart()); + Field least = DSL.least(left.getEnd(), right.getEnd()); + return ColumnDateRange.of(greatest, least); + } + + @Override + public QueryStep unnestDaterange(ColumnDateRange nested, QueryStep predecessor, String cteName) { + // HANA does not support single column datemultiranges + return predecessor; + } + + @Override + public Field dateRangeAggregation(ColumnDateRange columnDateRange) { + + Field stringAggregation = stringAggregation( + dateRangeToField(columnDateRange), + toChar(DATE_SET_SEPARATOR), + List.of(columnDateRange.getStart()) + ); + + // encapsulate all ranges (including empty ranges) within curly braces + return stringAggregation; + } + + @Override + public Field dateRangeToField(ColumnDateRange columnDateRange) { + + if (columnDateRange.isSingleColumnRange()) { + throw new UnsupportedOperationException("HANA does not support single-column date ranges."); + } + + // translation is handled in printer + return field("'[' || {0} || {2} || {1} || ')'", String.class, + cast(columnDateRange.getStart(), SQLDataType.VARCHAR), + cast(columnDateRange.getEnd(), SQLDataType.VARCHAR), + DATERANGE_SEPARATOR + ); + } + + @Override + public Field cast(Field field, DataType type) { + // HANA would require an explicit length param when using CAST with varchar type, TO_VARCHAR does not require this + if (type == SQLDataType.VARCHAR) { + return function("TO_VARCHAR", type.getType(), field); + } + return function( + // Needs to be explicitly unquoted, otherwise Hana is angry when Jooq quotes it on occasion. + unquotedName("CAST"), + type.getType(), + field("{0} AS {1}", field, keyword(type.getName())) + ); + } + + @Override + public Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate) { + + String betweenFunction = switch (datePart) { + case DAYS -> "DAYS_BETWEEN"; + case MONTHS -> "MONTHS_BETWEEN"; + case YEARS, DECADES, CENTURIES -> "YEARS_BETWEEN"; + default -> throw new UnsupportedOperationException("Given ChronoUnit %s is not supported."); + }; + + Field dateDistance = function(betweenFunction, Integer.class, startDate, endDate); + + // HANA does not support decades or centuries directly + dateDistance = switch (datePart) { + case DECADES -> dateDistance.divide(10); + case CENTURIES -> dateDistance.divide(100); + default -> dateDistance; + }; + + // otherwise HANA would return floating point numbers for date distances + return dateDistance.cast(Integer.class); + } + + + @Override + public Field random(Field column) { + return field( + "{0}({1} {2})", + column.getType(), + keyword("FIRST_VALUE"), + column, + orderBy(function("RAND", Object.class)) + ); + } + + @Override + public Condition likeRegex(Field field, String pattern) { + return condition("{0} {1} {2}", field, keyword("LIKE_REGEXPR"), pattern); + } + + + @Override + public Field yearQuarter(Field dateField) { + return function("QUARTER", String.class, dateField); + } + + @Override + public Field isNull(Field field) { + // DSl.isNull does not work in some cases for Hana. This accomplishes the same thing with extra steps (: + return DSL.function("IFNULL", Boolean.class, field, inline(true)); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreDialectBundle.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreDialectBundle.java index 54361d4dea..457a910709 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreDialectBundle.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreDialectBundle.java @@ -1,5 +1,7 @@ package com.bakdata.conquery.sql.conversion.dialect.pg; +import static org.jooq.impl.SQLDataType.NVARCHAR; + import java.util.List; import java.util.Map; @@ -22,11 +24,14 @@ import com.bakdata.conquery.sql.execution.PgSqlCDateSetParser; import com.bakdata.conquery.sql.execution.ResultSetProcessor; import com.bakdata.conquery.sql.execution.SqlCDateSetParser; -import lombok.Getter; +import lombok.extern.slf4j.Slf4j; import org.jooq.DSLContext; import org.jooq.Field; import org.jooq.SQLDialect; +import org.jooq.impl.BuiltInDataType; +import org.jooq.postgres.extensions.types.DateRange; +@Slf4j public class PostgreDialectBundle implements DialectBundle { private final SqlFunctionProvider functionProvider; @@ -91,15 +96,16 @@ public StratificationFunctions getStratificationFunctions() { @Override public boolean isTypeCompatible(Field field, MajorTypeId type) { + log.trace("Field {} type: getTypeName={}, getQualifiedName={}", field.getName(), field.getDataType().getTypeName(), field.getDataType().getQualifiedName()); return switch (type) { case STRING -> field.getDataType().isString(); case INTEGER -> field.getDataType().isInteger(); case BOOLEAN -> field.getDataType().isBoolean(); case REAL -> field.getDataType().isNumeric(); case DECIMAL -> field.getDataType().isDecimal(); - case MONEY -> field.getDataType().isDecimal(); + case MONEY -> field.getDataType().isNumeric(); // Not possible to introspect for case DATE -> field.getDataType().isDate(); - case DATE_RANGE -> field.getDataType().getTypeName().equals("daterange"); + case DATE_RANGE -> field.getDataType().getSQLDataType().equals(new BuiltInDataType<>(DateRange.class, "daterange")); // Not possible to introspect for }; } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreSqlFunctionProvider.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreSqlFunctionProvider.java index 5fcbf0c3c7..b5f31ffe28 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreSqlFunctionProvider.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/dialect/pg/PostgreSqlFunctionProvider.java @@ -39,382 +39,323 @@ */ public class PostgreSqlFunctionProvider implements SqlFunctionProvider { - public static final Field EMPTY_RANGE = field("{0}::daterange", inline("empty"), Object.class); - public static final String INFINITY_DATE_VALUE = "infinity"; - public static final String NEGATIVE_INFINITY_DATE_VALUE = "-infinity"; - public static final String OPEN_RANGE = "[)"; - public static final String CLOSED_RANGE = "[]"; - private static final String ANY_CHAR_REGEX = "%"; - - private static Field unnest(Field multirange) { - return function("unnest", Object.class, multirange); - } - - @Override - public Field getMaxDateExpression() { - return field("{0}::date", Date.class, INFINITY_DATE_VALUE); - } - - @Override - public String getAnyCharRegex() { - return ANY_CHAR_REGEX; - } - - @Override - public Table getNoOpTable() { - return noTable(); - } - - @NotNull - @Override - public Collection> orderByValidityDates( - Function, ? extends SortField> ordering, - List> validityDateFields) { - - return validityDateFields.stream() - .map(field -> nullif(field, emptyDateRange())) - .map(ordering) - .map(SortField::nullsLast) - .toList(); - } - - public Field emptyDateRange() { - return field("{0}::daterange", inline("empty")); - } - - @Override - public Field getMinDateExpression() { - return field("{0}::date", Date.class, NEGATIVE_INFINITY_DATE_VALUE); - } - - @Override - public Condition dateRestriction(ColumnDateRange dateRestriction, ColumnDateRange daterange) { - // the && operator checks if two ranges overlap (see https://www.postgresql.org/docs/15/functions-range.html) - return condition( - "{0} && {1}", - ensureIsSingleColumnRange(dateRestriction).getRange(), - ensureIsSingleColumnRange(daterange).getRange() - ); - } - - public Field daterange(Field startColumn, Field endColumn, String bounds) { - return function( - "daterange", - Object.class, - startColumn, - endColumn, - inline(bounds) - ); - } - - @Override - public List forCDateSet(CDateSet dateset, SharedAliases alias) { - // Postgres can return a date set as a single multidaterange - Field[] daterangeFields = dateset.asRanges().stream() - .map(this::forCDateRange) - .map(ColumnDateRange::getRange) - .toArray(Field[]::new); - Field multirange = datemultirange(daterangeFields); - return List.of(ColumnDateRange.of(multirange).as(alias.getAlias())); - } - - @Override - public ColumnDateRange forCDateRange(CDateRange daterange) { - - String startDateExpression = NEGATIVE_INFINITY_DATE_VALUE; - String endDateExpression = INFINITY_DATE_VALUE; - - if (daterange.hasLowerBound()) { - startDateExpression = daterange.getMin().toString(); - } - if (daterange.hasUpperBound()) { - endDateExpression = daterange.getMax().toString(); - } - - Field daterangeField = daterange(inline(startDateExpression), inline(endDateExpression), CLOSED_RANGE); - - return ColumnDateRange.of(daterangeField); - } - - private Field datemultirange(Field... fields) { - return function("datemultirange", Object.class, fields); - } - - @Override - public ColumnDateRange forValidityDate(ValidityDate validityDate) { - // if there is no validity date, each entity has the max range {-inf/inf} as validity date - return validityDate == null ? allRange() : toColumnDateRange(validityDate); - } - - - @Override - public ColumnDateRange allRange() { - return ColumnDateRange.of(daterange(toDateField(NEGATIVE_INFINITY_DATE_VALUE), toDateField(INFINITY_DATE_VALUE), CLOSED_RANGE)); - } - - private ColumnDateRange toColumnDateRange(ValidityDate validityDate) { - String tableName = validityDate.getConnector().resolveTableId().getTable(); - - if (validityDate.getColumn() != null) { - return ofSingleColumn(tableName, validityDate.getColumn().resolve()); - } - - return ofStartAndEnd(tableName, validityDate.getStartColumn().resolve(), validityDate.getEndColumn().resolve()); - } - - private ColumnDateRange ofSingleColumn(String tableName, Column column) { - - Field dateRange; - - dateRange = switch (column.getType()) { - // if validityDateColumn is a DATE_RANGE we can make use of Postgres' integrated daterange type, but the upper bound is exclusive by default - case DATE_RANGE -> { - Field daterange = field(name(column.getName())); - Field withOpenLowerEnd = coalesce(lower(daterange), toDateField(NEGATIVE_INFINITY_DATE_VALUE)); - Field withOpenUpperEnd = coalesce(upper(daterange), toDateField(INFINITY_DATE_VALUE)); - yield when(daterange.isNull(), emptyDateRange()) - .otherwise(daterange(withOpenLowerEnd, withOpenUpperEnd, OPEN_RANGE)); - } - // if the validity date column is not of daterange type, we construct it manually - case DATE -> { - Field singleDate = field(name(tableName, column.getName()), Date.class); - Field withOpenLowerEnd = coalesce(singleDate, toDateField(NEGATIVE_INFINITY_DATE_VALUE)); - Field withOpenUpperEnd = coalesce(singleDate, toDateField(INFINITY_DATE_VALUE)); - yield when(singleDate.isNull(), emptyDateRange()) - .otherwise(daterange(withOpenLowerEnd, withOpenUpperEnd, CLOSED_RANGE)); - } - default -> throw new IllegalArgumentException( - "Given column type '%s' can't be converted to a proper date restriction.".formatted(column.getType()) - ); - }; - - return ColumnDateRange.of(dateRange); - } - - private ColumnDateRange ofStartAndEnd(String tableName, Column startColumn, Column endColumn) { - - Field startField = field(name(tableName, startColumn.getName())); - Field withOpenLowerEnd = coalesce(startField, toDateField(NEGATIVE_INFINITY_DATE_VALUE)); - Field endField = field(name(tableName, endColumn.getName())); - Field withOpenUpperEnd = coalesce(endField, toDateField(INFINITY_DATE_VALUE)); - - return ColumnDateRange.of( - when(startField.isNull().and(endField.isNull()), emptyDateRange()) - .otherwise(this.daterange(withOpenLowerEnd, withOpenUpperEnd, CLOSED_RANGE)) - ); - } - - @Override - public ColumnDateRange allRangeIf(Condition condition) { - return ColumnDateRange.of( - when(condition.isTrue(), - datemultirange(daterange(toDateField(NEGATIVE_INFINITY_DATE_VALUE), toDateField(INFINITY_DATE_VALUE), CLOSED_RANGE)) - ) - ); - } - - @Override - public ColumnDateRange forValidityDate(ValidityDate validityDate, CDateRange dateRestriction) { - // if there is no validity date, each entity has the max range {-inf/inf} as validity date - ColumnDateRange validityDateRange = validityDate == null ? allRange() : toColumnDateRange(validityDate); - ColumnDateRange restriction = toColumnDateRange(dateRestriction); - return intersection(validityDateRange, restriction); - } - - @Override - public ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right) { - return ColumnDateRange.of(field( - "{0} * {1}", - ensureIsSingleColumnRange(right).getRange(), - ensureIsSingleColumnRange(left).getRange() - )); - } - - private ColumnDateRange toColumnDateRange(CDateRange dateRestriction) { - String startDateExpression = NEGATIVE_INFINITY_DATE_VALUE; - String endDateExpression = INFINITY_DATE_VALUE; - - if (dateRestriction.hasLowerBound()) { - startDateExpression = dateRestriction.getMin().toString(); - } - if (dateRestriction.hasUpperBound()) { - endDateExpression = dateRestriction.getMax().toString(); - } - - Field dateRestrictionRange = daterange(toDateField(startDateExpression), toDateField(endDateExpression), CLOSED_RANGE); - return ColumnDateRange.of(dateRestrictionRange); - } - - @Override - public ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter) { - String tableName = daterangeSelectOrFilter.getTable().getName(); - - if (daterangeSelectOrFilter.getColumn() != null) { - return ofSingleColumn(tableName, daterangeSelectOrFilter.getColumn().resolve()); - } - - return ofStartAndEnd(tableName, daterangeSelectOrFilter.getStartColumn().resolve(), daterangeSelectOrFilter.getEndColumn().resolve()); - } - - @Override - public ColumnDateRange aggregated(ColumnDateRange columnDateRange) { - return ColumnDateRange.of(rangeAgg(columnDateRange)).as(columnDateRange.getAlias()); - } - - private Field rangeAgg(ColumnDateRange columnDateRange) { - return function("range_agg", Object.class, columnDateRange.getRange()); - } - - @Override - public ColumnDateRange toDualColumn(ColumnDateRange columnDateRange) { - Field daterange = columnDateRange.getRange(); - Field start = lower(daterange); - Field end = upper(daterange); - return ColumnDateRange.of(start, end); - } - - @Override - public QueryStep unnestDaterange(ColumnDateRange nested, QueryStep predecessor, String cteName) { - - ColumnDateRange qualifiedRange = nested.qualify(predecessor.getCteName()); - - ColumnDateRange unnested = ColumnDateRange.of(unnest(qualifiedRange.getRange()).as(qualifiedRange.getAlias()), qualifiedRange.getAlias()); - - Selects selects = Selects.builder() - .ids(predecessor.getQualifiedSelects().getIds()) - .validityDate(Optional.of(unnested)) - .build(); - - return QueryStep.builder() - .cteName(cteName) - .selects(selects) - .fromTable(QueryStep.toTableLike(predecessor.getCteName())) - .build(); - } - - @Override - public Field dateRangeAggregation(ColumnDateRange columnDateRange) { - return rangeAgg(columnDateRange); - } - - @Override - public Field dateRangeToField(ColumnDateRange columnDateRange) { - if (!columnDateRange.isSingleColumnRange()) { - throw new UnsupportedOperationException("All column date ranges should have been converted to single column ranges."); - } - return columnDateRange.getRange(); - } - - @Override - public Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate) { - - if (datePart == ChronoUnit.DAYS) { - return field("{0}", Integer.class, endDate.minus(startDate)); - } - - Field age = function("age", Integer.class, endDate, startDate); - return switch (datePart) { - case MONTHS -> extract(DatePart.YEAR, age).multiply(12).plus(extract(DatePart.MONTH, age)); - case YEARS -> extract(DatePart.YEAR, age); - case DECADES -> extract(DatePart.DECADE, age); - case CENTURIES -> extract(DatePart.CENTURY, age); - default -> throw new UnsupportedOperationException("Given ChronoUnit %s is not supported."); - }; - } - - @Override - public Field cast(Field field, DataType type) { - return DSL.cast(field, type); - } - - public Field extract(DatePart datePart, Field timeInterval) { - return field( - "{0}({1} {2} {3})", - Integer.class, - keyword("extract"), - keyword(datePart.toSQL()), - keyword("from"), - timeInterval - ); - } - - @Override - public Field addDays(Field dateColumn, Field amountOfDays) { - return dateColumn.plus(amountOfDays); - } - - @Override - public Field random(Field column) { - ArrayAggOrderByStep arrayAgg = arrayAgg(field( - "{0} {1} {2}", - column, - keyword("ORDER BY"), - function("random", Object.class) - )); - return field("({0})[1]", column.getType(), arrayAgg); - } - - @Override - public Condition likeRegex(Field field, String pattern) { - return field.similarTo(pattern); - } - - @Override - public Field yearQuarter(Field dateField) { - return field( - "{0}::varchar || '-Q' || {1}::varchar", - String.class, - DSL.extract(dateField, DatePart.YEAR), - DSL.extract(dateField, DatePart.QUARTER) - ); - } - - @Override - public Field toDateField(String dateValue) { - return field("{0}::{1}", Date.class, inline(dateValue), keyword("date")); - } - - @Override - public Condition isNotEmptyDateRange(ColumnDateRange columnDateRange) { - return condition(function("isempty", Boolean.class, columnDateRange.getRange())).not(); - } - - @Override - public ColumnDateRange emptyColumnDateRange() { - return ColumnDateRange.of(EMPTY_RANGE); - } - - @Override - public Condition orAgg(Field field) { - return condition(boolOr(field)); - } - - @Override - public Field upper(Field daterange) { - return function("upper", Date.class, daterange); - } - - @Override - public Field lower(Field daterange) { - return function("lower", Date.class, daterange); - } - - - private ColumnDateRange ensureIsSingleColumnRange(ColumnDateRange daterange) { - return daterange.isSingleColumnRange() - ? daterange - : ColumnDateRange.of(daterange(daterange.getStart(), daterange.getEnd(), OPEN_RANGE)); // end is already exclusive - } - - @Override - public Field asArrayRepr(List value) { - return array(value.toArray()); - } - - - @Override - public Field arrayOut(List> fields) { - return array(fields); - } + public static final Field EMPTY_RANGE = field("{0}::daterange", inline("empty"), Object.class); + public static final String INFINITY_DATE_VALUE = "infinity"; + public static final String NEGATIVE_INFINITY_DATE_VALUE = "-infinity"; + public static final String OPEN_RANGE = "[)"; + public static final String CLOSED_RANGE = "[]"; + private static final String ANY_CHAR_REGEX = "%"; + + private static Field unnest(Field multirange) { + return function("unnest", Object.class, multirange); + } + + @Override + public Field getMaxDateExpression() { + return field("{0}::date", Date.class, INFINITY_DATE_VALUE); + } + + @Override + public String getAnyCharRegex() { + return ANY_CHAR_REGEX; + } + + @NotNull + @Override + public Collection> orderByValidityDates(Function, ? extends SortField> ordering, List> validityDateFields) { + + return validityDateFields.stream().map(field -> nullif(field, emptyDateRange())).map(ordering).map(SortField::nullsLast).toList(); + } + + public Field emptyDateRange() { + return field("{0}::daterange", inline("empty")); + } + + @Override + public Field getMinDateExpression() { + return field("{0}::date", Date.class, NEGATIVE_INFINITY_DATE_VALUE); + } + + @Override + public Condition dateRestriction(ColumnDateRange dateRestriction, ColumnDateRange daterange) { + // the && operator checks if two ranges overlap (see https://www.postgresql.org/docs/15/functions-range.html) + return condition("{0} && {1}", ensureIsSingleColumnRange(dateRestriction).getRange(), ensureIsSingleColumnRange(daterange).getRange()); + } + + public Field daterange(Field startColumn, Field endColumn, String bounds) { + return function("daterange", Object.class, startColumn, endColumn, inline(bounds)); + } + + @Override + public List forCDateSet(CDateSet dateset, SharedAliases alias) { + // Postgres can return a date set as a single multidaterange + Field[] daterangeFields = dateset.asRanges().stream().map(this::forCDateRange).map(ColumnDateRange::getRange).toArray(Field[]::new); + Field multirange = datemultirange(daterangeFields); + return List.of(ColumnDateRange.of(multirange).as(alias.getAlias())); + } + + @Override + public ColumnDateRange forCDateRange(CDateRange daterange) { + + String startDateExpression = NEGATIVE_INFINITY_DATE_VALUE; + String endDateExpression = INFINITY_DATE_VALUE; + + if (daterange.hasLowerBound()) { + startDateExpression = daterange.getMin().toString(); + } + if (daterange.hasUpperBound()) { + endDateExpression = daterange.getMax().toString(); + } + + Field daterangeField = daterange(inline(startDateExpression), inline(endDateExpression), CLOSED_RANGE); + + return ColumnDateRange.of(daterangeField); + } + + private Field datemultirange(Field... fields) { + return function("datemultirange", Object.class, fields); + } + + @Override + public ColumnDateRange forValidityDate(ValidityDate validityDate) { + // if there is no validity date, each entity has the max range {-inf/inf} as validity date + return validityDate == null ? allRange() : toColumnDateRange(validityDate); + } + + + @Override + public ColumnDateRange allRange() { + return ColumnDateRange.of(daterange(toDateField(NEGATIVE_INFINITY_DATE_VALUE), toDateField(INFINITY_DATE_VALUE), CLOSED_RANGE)); + } + + private ColumnDateRange toColumnDateRange(ValidityDate validityDate) { + String tableName = validityDate.getConnector().resolveTableId().getTable(); + + if (validityDate.getColumn() != null) { + return ofSingleColumn(tableName, validityDate.getColumn().resolve()); + } + + return ofStartAndEnd(tableName, validityDate.getStartColumn().resolve(), validityDate.getEndColumn().resolve()); + } + + @Override + public Field toDateField(String dateValue) { + return field("{0}::{1}", Date.class, val(dateValue), keyword("date")); + } + + private ColumnDateRange ofSingleColumn(String tableName, Column column) { + + Field dateRange; + + dateRange = switch (column.getType()) { + // if validityDateColumn is a DATE_RANGE we can make use of Postgres' integrated daterange type, but the upper bound is exclusive by default + case DATE_RANGE -> { + Field daterange = field(name(column.getName())); + Field withOpenLowerEnd = coalesce(lower(daterange), toDateField(NEGATIVE_INFINITY_DATE_VALUE)); + Field withOpenUpperEnd = coalesce(upper(daterange), toDateField(INFINITY_DATE_VALUE)); + yield when(daterange.isNull(), emptyDateRange()).otherwise(daterange(withOpenLowerEnd, withOpenUpperEnd, OPEN_RANGE)); + } + // if the validity date column is not of daterange type, we construct it manually + case DATE -> { + Field singleDate = field(name(tableName, column.getName()), Date.class); + Field withOpenLowerEnd = coalesce(singleDate, toDateField(NEGATIVE_INFINITY_DATE_VALUE)); + Field withOpenUpperEnd = coalesce(singleDate, toDateField(INFINITY_DATE_VALUE)); + yield when(singleDate.isNull(), emptyDateRange()).otherwise(daterange(withOpenLowerEnd, withOpenUpperEnd, CLOSED_RANGE)); + } + default -> + throw new IllegalArgumentException("Given column type '%s' can't be converted to a proper date restriction.".formatted(column.getType())); + }; + + return ColumnDateRange.of(dateRange); + } + + private ColumnDateRange ofStartAndEnd(String tableName, Column startColumn, Column endColumn) { + + Field startField = field(name(tableName, startColumn.getName())); + Field withOpenLowerEnd = coalesce(startField, toDateField(NEGATIVE_INFINITY_DATE_VALUE)); + Field endField = field(name(tableName, endColumn.getName())); + Field withOpenUpperEnd = coalesce(endField, toDateField(INFINITY_DATE_VALUE)); + + return ColumnDateRange.of(when(startField.isNull().and(endField.isNull()), emptyDateRange()).otherwise(this.daterange(withOpenLowerEnd, withOpenUpperEnd, CLOSED_RANGE))); + } + + + + @Override + public ColumnDateRange allRangeIf(Condition condition) { + return ColumnDateRange.of(when(condition.isTrue(), datemultirange(daterange(toDateField(NEGATIVE_INFINITY_DATE_VALUE), toDateField(INFINITY_DATE_VALUE), CLOSED_RANGE)))); + } + + @Override + public ColumnDateRange forValidityDate(ValidityDate validityDate, CDateRange dateRestriction) { + // if there is no validity date, each entity has the max range {-inf/inf} as validity date + ColumnDateRange validityDateRange = validityDate == null ? allRange() : toColumnDateRange(validityDate); + ColumnDateRange restriction = toColumnDateRange(dateRestriction); + return intersection(validityDateRange, restriction); + } + + @Override + public ColumnDateRange intersection(ColumnDateRange left, ColumnDateRange right) { + return ColumnDateRange.of(field("{0} * {1}", ensureIsSingleColumnRange(right).getRange(), ensureIsSingleColumnRange(left).getRange())); + } + + private ColumnDateRange toColumnDateRange(CDateRange dateRestriction) { + String startDateExpression = NEGATIVE_INFINITY_DATE_VALUE; + String endDateExpression = INFINITY_DATE_VALUE; + + if (dateRestriction.hasLowerBound()) { + startDateExpression = dateRestriction.getMin().toString(); + } + if (dateRestriction.hasUpperBound()) { + endDateExpression = dateRestriction.getMax().toString(); + } + + Field dateRestrictionRange = daterange(toDateField(startDateExpression), toDateField(endDateExpression), CLOSED_RANGE); + return ColumnDateRange.of(dateRestrictionRange); + } + + + @Override + public ColumnDateRange forArbitraryDateRange(DaterangeSelectOrFilter daterangeSelectOrFilter) { + String tableName = daterangeSelectOrFilter.getTable().getName(); + + if (daterangeSelectOrFilter.getColumn() != null) { + return ofSingleColumn(tableName, daterangeSelectOrFilter.getColumn().resolve()); + } + + return ofStartAndEnd(tableName, daterangeSelectOrFilter.getStartColumn().resolve(), daterangeSelectOrFilter.getEndColumn().resolve()); + } + + @Override + public ColumnDateRange aggregated(ColumnDateRange columnDateRange) { + return ColumnDateRange.of(rangeAgg(columnDateRange)).as(columnDateRange.getAlias()); + } + + private Field rangeAgg(ColumnDateRange columnDateRange) { + return function("range_agg", Object.class, columnDateRange.getRange()); + } + + @Override + public ColumnDateRange toDualColumn(ColumnDateRange columnDateRange) { + Field daterange = columnDateRange.getRange(); + Field start = lower(daterange); + Field end = upper(daterange); + return ColumnDateRange.of(start, end); + } + + + + @Override + public QueryStep unnestDaterange(ColumnDateRange nested, QueryStep predecessor, String cteName) { + + ColumnDateRange qualifiedRange = nested.qualify(predecessor.getCteName()); + + ColumnDateRange unnested = ColumnDateRange.of(unnest(qualifiedRange.getRange()).as(qualifiedRange.getAlias()), qualifiedRange.getAlias()); + + Selects selects = Selects.builder().ids(predecessor.getQualifiedSelects().getIds()).validityDate(Optional.of(unnested)).build(); + + return QueryStep.builder().cteName(cteName).selects(selects).fromTable(QueryStep.toTableLike(predecessor.getCteName())).build(); + } + + @Override + public Field dateRangeAggregation(ColumnDateRange columnDateRange) { + return rangeAgg(columnDateRange); + } + + @Override + public Field dateRangeToField(ColumnDateRange columnDateRange) { + if (!columnDateRange.isSingleColumnRange()) { + throw new UnsupportedOperationException("All column date ranges should have been converted to single column ranges."); + } + return columnDateRange.getRange(); + } + + @Override + public Field dateDistance(ChronoUnit datePart, Field startDate, Field endDate) { + + if (datePart == ChronoUnit.DAYS) { + return field("{0}", Integer.class, endDate.minus(startDate)); + } + + Field age = function("age", Integer.class, endDate, startDate); + return switch (datePart) { + case MONTHS -> extract(DatePart.YEAR, age).multiply(12).plus(extract(DatePart.MONTH, age)); + case YEARS -> extract(DatePart.YEAR, age); + case DECADES -> extract(DatePart.DECADE, age); + case CENTURIES -> extract(DatePart.CENTURY, age); + default -> throw new UnsupportedOperationException("Given ChronoUnit %s is not supported."); + }; + } + + @Override + public Field cast(Field field, DataType type) { + return DSL.cast(field, type); + } + + public Field extract(DatePart datePart, Field timeInterval) { + return field("{0}({1} {2} {3})", Integer.class, keyword("extract"), keyword(datePart.toSQL()), keyword("from"), timeInterval); + } + + @Override + public Field addDays(Field dateColumn, Field amountOfDays) { + return dateColumn.plus(amountOfDays); + } + + @Override + public Field random(Field column) { + ArrayAggOrderByStep arrayAgg = arrayAgg(field("{0} {1} {2}", column, keyword("ORDER BY"), function("random", Object.class))); + return field("({0})[1]", column.getType(), arrayAgg); + } + + @Override + public Condition likeRegex(Field field, String pattern) { + return field.similarTo(pattern); + } + + @Override + public Field yearQuarter(Field dateField) { + return field("{0}::varchar || '-Q' || {1}::varchar", String.class, DSL.extract(dateField, DatePart.YEAR), DSL.extract(dateField, DatePart.QUARTER)); + } + + + @Override + public Condition isNotEmptyDateRange(ColumnDateRange columnDateRange) { + return condition(function("isempty", Boolean.class, columnDateRange.getRange())).not(); + } + + @Override + public ColumnDateRange emptyColumnDateRange() { + return ColumnDateRange.of(EMPTY_RANGE); + } + + @Override + public Condition orAgg(Field field) { + return condition(boolOr(field)); + } + + @Override + public Field lower(Field daterange) { + return function("lower", Date.class, daterange); + } + + @Override + public Field upper(Field daterange) { + return function("upper", Date.class, daterange); + } + + private ColumnDateRange ensureIsSingleColumnRange(ColumnDateRange daterange) { + return daterange.isSingleColumnRange() ? daterange : ColumnDateRange.of(daterange(daterange.getStart(), daterange.getEnd(), OPEN_RANGE)); // end is already exclusive + } + + @Override + public Field asArrayRepr(List value) { + return array(value.toArray()); + } + + + @Override + public Field arrayOut(List> fields) { + return array(fields); + } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/ColumnDateRange.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/ColumnDateRange.java index c191d34971..ff12ef137a 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/ColumnDateRange.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/ColumnDateRange.java @@ -31,16 +31,16 @@ public class ColumnDateRange implements SqlSelect { private final String alias; protected ColumnDateRange(Field startColumn, Field endColumn, String alias) { - this.range = null; - this.start = startColumn; - this.end = endColumn; + range = null; + start = startColumn; + end = endColumn; this.alias = alias; } protected ColumnDateRange(Field range, String alias) { this.range = (Field) range; - this.start = null; - this.end = null; + start = null; + end = null; this.alias = alias; } @@ -60,8 +60,13 @@ public static ColumnDateRange of(Field startColumn, Field endColumn, return new ColumnDateRange(startColumn, endColumn, alias); } + public static ColumnDateRange empty() { + final Field emptyRange = DSL.field(DSL.val("{}")); + return ColumnDateRange.of(emptyRange); + } + public ColumnDateRange asValidityDateRange(String alias) { - return this.as(alias + VALIDITY_DATE_COLUMN_NAME_SUFFIX); + return as(alias + VALIDITY_DATE_COLUMN_NAME_SUFFIX); } /** @@ -69,15 +74,15 @@ public ColumnDateRange asValidityDateRange(String alias) { * False if it consists of a start and end field. */ public boolean isSingleColumnRange() { - return this.range != null; + return range != null; } @Override public List> toFields() { if (isSingleColumnRange()) { - return List.of(this.range); + return List.of(range); } - return Stream.of(this.start, this.end) + return Stream.of(start, end) .collect(Collectors.toList()); } @@ -100,37 +105,44 @@ public List requiredColumns() { public ColumnDateRange as(String alias) { if (isSingleColumnRange()) { - return new ColumnDateRange(this.range.as(alias), alias); + return new ColumnDateRange(range.as(alias), alias); } return new ColumnDateRange( - this.start.as(alias + START_SUFFIX), - this.end.as(alias + END_SUFFIX), + start.as(alias + START_SUFFIX), + end.as(alias + END_SUFFIX), alias ); } public ColumnDateRange coalesce(ColumnDateRange right) { - if (this.isSingleColumnRange() != right.isSingleColumnRange()) { + if (isSingleColumnRange() != right.isSingleColumnRange()) { throw new UnsupportedOperationException("Can only join ColumnDateRanges of same type"); } if (isSingleColumnRange()) { - return ColumnDateRange.of(DSL.coalesce(this.range, right.getRange())).as(this.alias); + return ColumnDateRange.of(DSL.coalesce(range, right.getRange())).as(alias); } return ColumnDateRange.of( - DSL.coalesce(this.start, right.getStart()), - DSL.coalesce(this.end, right.getEnd()) - ).as(this.alias); + DSL.coalesce(start, right.getStart()), + DSL.coalesce(end, right.getEnd()) + ).as(alias); } public Condition join(ColumnDateRange right) { - if (this.isSingleColumnRange() != right.isSingleColumnRange()) { + if (isSingleColumnRange() != right.isSingleColumnRange()) { throw new UnsupportedOperationException("Can only join ColumnDateRanges of same type"); } - if (this.isSingleColumnRange()) { - return this.range.coerce(Object.class).eq(right.getRange()); + if (isSingleColumnRange()) { + return range.coerce(Object.class).eq(right.getRange()); + } + return start.eq(right.getStart()).and(end.eq(right.getEnd())); + } + + public Condition isNotNull() { + if (isSingleColumnRange()) { + return range.isNotNull(); } - return this.start.eq(right.getStart()).and(end.eq(right.getEnd())); + return start.isNotNull().and(end.isNotNull()); } public static Condition isNotEmpty(ColumnDateRange columnDateRange) { diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/SqlIdColumns.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/SqlIdColumns.java index 93c4a69046..99af726ccb 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/SqlIdColumns.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/SqlIdColumns.java @@ -106,7 +106,11 @@ public boolean isWithStratification() { } public List> toFields() { - return Stream.concat(Stream.of(this.primaryColumn), Optional.ofNullable(this.secondaryId).stream()).collect(Collectors.toList()); + if (getSecondaryId().isEmpty()){ + return List.of(getPrimaryColumn()); + } + + return List.of(getPrimaryColumn(), getSecondaryId().get()); } public List join(SqlIdColumns rightIds) { @@ -137,20 +141,23 @@ public SqlIdColumns coalesce(List selectsIds) { ids.getSecondaryId().ifPresent(secondaryIds::add); }); - Field coalescedPrimaryColumn = coalesceFields(primaryColumns).coerce(String.class).as(SharedAliases.PRIMARY_COLUMN.getAlias()); + Field coalescedPrimaryColumn = coalesceFields(primaryColumns, String.class).coerce(String.class).as(SharedAliases.PRIMARY_COLUMN.getAlias()); if (secondaryIds.isEmpty()) { return new SqlIdColumns(coalescedPrimaryColumn); } - Field coalescedSecondaryIds = coalesceFields(secondaryIds).coerce(String.class).as(SharedAliases.SECONDARY_ID.getAlias()); + Field coalescedSecondaryIds = coalesceFields(secondaryIds, String.class).coerce(String.class).as(SharedAliases.SECONDARY_ID.getAlias()); return new SqlIdColumns(coalescedPrimaryColumn, coalescedSecondaryIds); } - protected static Field coalesceFields(List> fields) { - if (fields.size() == 1) { - return fields.get(0); + protected static Field coalesceFields(List> fields, Class type) { + Field out = fields.getFirst().coerce(type); + + for (int index = 1; index < fields.size(); index++) { + out = DSL.coalesce(out, fields.get(index).coerce(type)); } - return DSL.coalesce(fields.get(0), fields.subList(1, fields.size()).toArray()); + + return out; } } diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/StratificationSqlIdColumns.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/StratificationSqlIdColumns.java index 05e5f72a05..678afefab5 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/StratificationSqlIdColumns.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/StratificationSqlIdColumns.java @@ -124,9 +124,9 @@ public SqlIdColumns coalesce(List selectsIds) { "Can only coalesce SqlIdColumns if all are with stratification" ); - List> primaryColumns = new ArrayList<>(); - List> resolutions = new ArrayList<>(); - List> indices = new ArrayList<>(); + List> primaryColumns = new ArrayList<>(); + List> resolutions = new ArrayList<>(); + List> indices = new ArrayList<>(); List> eventDates = new ArrayList<>(); // add this ids @@ -147,12 +147,12 @@ public SqlIdColumns coalesce(List selectsIds) { } } - Field coalescedPrimaryColumn = coalesceFields(primaryColumns).coerce(String.class).as(SharedAliases.PRIMARY_COLUMN.getAlias()); - Field coalescedResolutions = coalesceFields(resolutions).coerce(String.class).as(SharedAliases.RESOLUTION.getAlias()); - Field coalescedIndices = coalesceFields(indices).coerce(Integer.class).as(SharedAliases.INDEX.getAlias()); + Field coalescedPrimaryColumn = coalesceFields(primaryColumns, String.class).coerce(String.class).as(SharedAliases.PRIMARY_COLUMN.getAlias()); + Field coalescedResolutions = coalesceFields(resolutions, String.class).as(SharedAliases.RESOLUTION.getAlias()); + Field coalescedIndices = coalesceFields(indices, Integer.class).as(SharedAliases.INDEX.getAlias()); Field eventDate = null; if (!eventDates.isEmpty()) { - eventDate = coalesceFields(eventDates).coerce(Date.class).as(SharedAliases.INDEX_SELECTOR.getAlias()); + eventDate = coalesceFields(eventDates, Date.class).as(SharedAliases.INDEX_SELECTOR.getAlias()); } return StratificationSqlIdColumns.builder() diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java index dab4fa7714..2cb8fe04f0 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/ConditionUtil.java @@ -7,17 +7,24 @@ import lombok.experimental.UtilityClass; import org.jooq.Condition; import org.jooq.Field; +import org.jooq.impl.DSL; @UtilityClass public class ConditionUtil { - public Condition rangeCondition(final Field column, final IRange range) { - Field col = (Field) column; - Optional greaterOrEqualCondition = Optional.ofNullable(range.getMin()).map(col::greaterOrEqual); - Optional lessOrEqualCondition = Optional.ofNullable(range.getMax()).map(col::lessOrEqual); - return Stream.concat(greaterOrEqualCondition.stream(), lessOrEqualCondition.stream()) - .reduce(Condition::and) - .orElseThrow(() -> new IllegalArgumentException("Missing min or max value for real range filter.")); + public > Condition rangeCondition(final Field column, final IRange range) { + Condition condition = DSL.noCondition(); + + if (range.hasLowerBound()){ + condition = condition.and(column.greaterOrEqual(DSL.inline(range.getMin()))); + } + + if (range.hasUpperBound()){ + condition = condition.and(column.lessOrEqual(DSL.inline(range.getMax()))); + } + + + return condition; } /** diff --git a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/RangeCondition.java b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/RangeCondition.java index f6ea56bf6c..bd537efb93 100644 --- a/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/RangeCondition.java +++ b/backend/src/main/java/com/bakdata/conquery/sql/conversion/model/filter/RangeCondition.java @@ -6,10 +6,10 @@ import org.jooq.Field; @RequiredArgsConstructor -abstract class RangeCondition implements WhereCondition { +abstract class RangeCondition> implements WhereCondition { - private final Field column; - private final IRange range; + private final Field column; + private final IRange range; @Override public Condition condition() { diff --git a/backend/src/main/java/com/bakdata/conquery/util/TablePrimaryColumnUtil.java b/backend/src/main/java/com/bakdata/conquery/util/TablePrimaryColumnUtil.java index 373c4271c7..952bb2a373 100644 --- a/backend/src/main/java/com/bakdata/conquery/util/TablePrimaryColumnUtil.java +++ b/backend/src/main/java/com/bakdata/conquery/util/TablePrimaryColumnUtil.java @@ -1,16 +1,21 @@ package com.bakdata.conquery.util; +import static org.jooq.impl.DSL.field; +import static org.jooq.impl.DSL.name; + import com.bakdata.conquery.models.datasets.Table; import org.jooq.Field; -import org.jooq.impl.DSL; public class TablePrimaryColumnUtil { public static Field findPrimaryColumn(Table table, String defaultPrimaryColumn) { - String primaryColumnName = table.getPrimaryColumn() == null - ? defaultPrimaryColumn - : table.getPrimaryColumn().getName(); - return DSL.field(DSL.name(table.getName(), primaryColumnName), String.class); + String primaryColumnName = defaultPrimaryColumn; + + if (table.getPrimaryColumn() != null) { + primaryColumnName = table.getPrimaryColumn().getName(); + } + + return field(name(table.getName(), primaryColumnName), String.class); } } diff --git a/backend/src/test/java/com/bakdata/conquery/integration/common/LoadingUtil.java b/backend/src/test/java/com/bakdata/conquery/integration/common/LoadingUtil.java index fb915fb365..b58a4a790f 100644 --- a/backend/src/test/java/com/bakdata/conquery/integration/common/LoadingUtil.java +++ b/backend/src/test/java/com/bakdata/conquery/integration/common/LoadingUtil.java @@ -227,8 +227,6 @@ public static void importCqppFiles(StandaloneSupport support, List cqppFil } support.waitUntilWorkDone(); - - } public static void uploadCqpp(StandaloneSupport support, File cqpp, boolean update, Response.Status.Family expectedResponseFamily) { diff --git a/backend/src/test/java/com/bakdata/conquery/integration/json/SqlTestDataImporter.java b/backend/src/test/java/com/bakdata/conquery/integration/json/SqlTestDataImporter.java index e35413b497..3c49f28bf8 100644 --- a/backend/src/test/java/com/bakdata/conquery/integration/json/SqlTestDataImporter.java +++ b/backend/src/test/java/com/bakdata/conquery/integration/json/SqlTestDataImporter.java @@ -3,9 +3,11 @@ import java.util.Collection; import java.util.List; +import com.bakdata.conquery.integration.json.filter.FilterTest; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.core.UriBuilder; +import com.bakdata.conquery.integration.common.LoadingUtil; import com.bakdata.conquery.integration.common.LoadingUtil; import com.bakdata.conquery.integration.common.RequiredData; import com.bakdata.conquery.integration.common.RequiredTable; @@ -17,13 +19,14 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import static com.bakdata.conquery.ConqueryConstants.ALL_IDS_TABLE; + @Slf4j @Data public class SqlTestDataImporter extends WorkerTestDataImporter { private final CsvTableImporter csvTableImporter; - @Override public void importTables(StandaloneSupport support, List tables, boolean autoConcept) throws JSONException { for (RequiredTable table : tables) { @@ -41,11 +44,6 @@ public void importTableContents(StandaloneSupport support, Collection table, List> columns, if (content.isEmpty()) { return; } - log.debug("Inserting into table: {}", content); + log.trace("Inserting into table: {}", content); testSqlDialect.getTestFunctionProvider().insertValuesIntoTable(table, columns, content, statement, dslContext); } diff --git a/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/tree/MatchingStatsTests.java b/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/tree/MatchingStatsTests.java index 8938a83e1c..73918bb68c 100644 --- a/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/tree/MatchingStatsTests.java +++ b/backend/src/test/java/com/bakdata/conquery/models/datasets/concepts/tree/MatchingStatsTests.java @@ -2,8 +2,6 @@ import static org.assertj.core.api.Assertions.assertThat; -import com.bakdata.conquery.models.datasets.Column; -import com.bakdata.conquery.models.datasets.Table; import com.bakdata.conquery.models.datasets.concepts.MatchingStats; import com.bakdata.conquery.models.identifiable.ids.specific.DatasetId; import com.bakdata.conquery.models.identifiable.ids.specific.WorkerId; @@ -11,80 +9,74 @@ public class MatchingStatsTests { - private final WorkerId workerId1 = new WorkerId(new DatasetId("sampleDataset"), "sampleWorker"); - private final WorkerId workerId2 = new WorkerId(new DatasetId("sampleDataset2"), "sampleWorker2"); + private final WorkerId workerId1 = new WorkerId(new DatasetId("sampleDataset"), "sampleWorker"); + private final WorkerId workerId2 = new WorkerId(new DatasetId("sampleDataset2"), "sampleWorker2"); - @Test - public void entitiesCountTest() { + @Test + public void entitiesCountTest() { - MatchingStats stats = new MatchingStats(); + MatchingStats stats = new MatchingStats(); - assertThat(stats.countEntities()).isEqualTo(0); + assertThat(stats.countEntities()).isEqualTo(0); - stats.putEntry(workerId1, new MatchingStats.Entry(5, 5, 10, 20)); - assertThat(stats.countEntities()).isEqualTo(5); + stats.putEntry(workerId1.toString(), new MatchingStats.Entry(5, 5, 10, 20)); + assertThat(stats.countEntities()).isEqualTo(5); - stats.putEntry(workerId1, new MatchingStats.Entry(5, 8, 10, 20)); - assertThat(stats.countEntities()).isEqualTo(8); + stats.putEntry(workerId1.toString(), new MatchingStats.Entry(5, 8, 10, 20)); + assertThat(stats.countEntities()).isEqualTo(8); - stats.putEntry(workerId2, new MatchingStats.Entry(5, 2, 10, 20)); - assertThat(stats.countEntities()).isEqualTo(10); + stats.putEntry(workerId2.toString(), new MatchingStats.Entry(5, 2, 10, 20)); + assertThat(stats.countEntities()).isEqualTo(10); - } + } - @Test - public void addEventTest(){ - MatchingStats stats = new MatchingStats(); - Table table = new Table(); - table.setColumns(new Column[0]); + @Test + public void addEventTest() { + MatchingStats stats = new MatchingStats(); - assertThat(stats.countEvents()).isEqualTo(0); - assertThat(stats.countEntities()).isEqualTo(0); + assertThat(stats.countEvents()).isEqualTo(0); + assertThat(stats.countEntities()).isEqualTo(0); - MatchingStats.Entry entry1 = new MatchingStats.Entry(); - entry1.addEvent(table, null, 1, "1"); - entry1.addEvent(table, null, 2, "1"); - entry1.addEvent(table, null, 3, "2"); - entry1.addEvent(table, null, 4, "2"); + MatchingStats.Entry entry1 = new MatchingStats.Entry(); + entry1.addEvents("1", 1, null); + entry1.addEvents("1", 1, null); - entry1.addEvent(table, null, 5, "3"); - entry1.addEvent(table, null, 6, "3"); + entry1.addEvents("2", 1, null); + entry1.addEvents("2", 1, null); - entry1.addEvent(table, null, 7, "4"); - entry1.addEvent(table, null, 8, "4"); + entry1.addEvents("3", 1, null); + entry1.addEvents("3", 1, null); + entry1.addEvents("4", 1, null); + entry1.addEvents("4", 1, null); - stats.putEntry(workerId1, entry1); - assertThat(stats.countEvents()).isEqualTo(8); - assertThat(stats.countEntities()).isEqualTo(4); + stats.putEntry(workerId1.toString(), entry1); + assertThat(stats.countEvents()).isEqualTo(8); + assertThat(stats.countEntities()).isEqualTo(4); - MatchingStats.Entry entry2 = new MatchingStats.Entry(); + MatchingStats.Entry entry2 = new MatchingStats.Entry(); - entry2.addEvent(table, null, 1, "1"); - entry2.addEvent(table, null, 2, "2"); + entry2.addEvents("1", 1, null); + entry2.addEvents("2", 1, null); + entry2.addEvents("3", 1, null); + entry2.addEvents("4", 1, null); + entry2.addEvents("5", 1, null); + entry2.addEvents("6", 1, null); + entry2.addEvents("7", 1, null); + entry2.addEvents("8", 1, null); + entry2.addEvents("9", 1, null); + entry2.addEvents("10", 1, null); - entry2.addEvent(table, null, 3, "3"); - entry2.addEvent(table, null, 4, "4"); - entry2.addEvent(table, null, 5, "5"); - entry2.addEvent(table, null, 6, "6"); + stats.putEntry(workerId2.toString(), entry2); + assertThat(stats.countEvents()).isEqualTo(18); + assertThat(stats.countEntities()).isEqualTo(14); - entry2.addEvent(table, null, 7, "7"); - entry2.addEvent(table, null, 8, "8"); - entry2.addEvent(table, null, 9, "9"); - entry2.addEvent(table, null, 10, "10"); - - stats.putEntry(workerId2, entry2); - assertThat(stats.countEvents()).isEqualTo(18); - assertThat(stats.countEntities()).isEqualTo(14); - - - - } + } } diff --git a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/and.test.json b/backend/src/test/resources/EXCLUDED_sql/and/different_concept/and.test.json deleted file mode 100644 index 3430dbf361..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/and.test.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "label": "Simple AND query for 3 different concepts", - "expectedCsv": "tests/sql/and/different_concept/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0, - "max": 1.0 - } - } - ], - "selects": [ - "number.number_connector.first_value" - ] - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ], - "selects": [ - "geschlecht_select.geschlecht_connector.first_geschlecht" - ] - } - ] - }, - { - "ids": [ - "language_select" - ], - "type": "CONCEPT", - "label": "Language SELECT", - "tables": [ - { - "id": "language_select.language_connector", - "filters": [ - { - "filter": "language_select.language_connector.language", - "type": "BIG_MULTI_SELECT", - "value": [ - "de" - ] - } - ], - "selects": [ - "language_select.language_connector.first_language" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - }, - "selects": { - "name": "first_value", - "column": "table1.value", - "type": "FIRST" - } - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "column": "table2.datum" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - }, - "selects": { - "name": "first_geschlecht", - "column": "table2.geschlecht", - "type": "FIRST" - } - } - ] - }, - { - "label": "language_select", - "type": "TREE", - "connectors": [ - { - "label": "language_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "column": "table2.datum" - }, - "filters": { - "label": "language", - "description": "Sprache", - "column": "table2.language", - "type": "SELECT" - }, - "selects": { - "name": "first_language", - "column": "table2.language", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/and/different_concept/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/and/different_concept/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - }, - { - "name": "language", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/and/different_concept/content_1.csv deleted file mode 100644 index 2a4fce0beb..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/content_1.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -2,1.01,2014-06-30,2015-06-30 -1,1,2015-02-03,2015-06-30 -1,1,2016-02-05,2016-02-05 -3,0.5,2014-04-30,2014-06-30 -4,1,2014-06-30,2015-06-30 -5,0.5,2014-04-30,2014-06-30 -5,1,2014-06-30,2015-06-30 -6,1,2014-04-30,2014-06-30 -7,1,2014-02-05,2014-02-20 -8,1,2014-04-30,2014-06-30 -7,-1,2014-06-30,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/and/different_concept/content_2.csv deleted file mode 100644 index dc012de238..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/content_2.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum,geschlecht,language -1,2012-01-01,"f","de" -2,2010-07-15,"m","fr" -3,2013-11-10,"f","en" -4,2012-11-11,"m","" -5,2007-11-11,"","" -6,2012-11-11,"","de" -7,2012-11-11,"mf","de" -8,2012-11-11,"fm","fr" diff --git a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/expected.csv b/backend/src/test/resources/EXCLUDED_sql/and/different_concept/expected.csv deleted file mode 100644 index ed1176cb19..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/different_concept/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates,vs first_value,Geschlecht SELECT first_geschlecht,Language SELECT first_language -1,"{2012-01-01/2012-01-01,2014-06-30/2015-06-30,2016-02-05/2016-02-05}",1.0,f,de diff --git a/backend/src/test/resources/EXCLUDED_sql/and/same_concept/and_same_concept.test.json b/backend/src/test/resources/EXCLUDED_sql/and/same_concept/and_same_concept.test.json deleted file mode 100644 index 837bdfdad7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/same_concept/and_same_concept.test.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "label": "Simple AND query for same concept", - "expectedCsv": "tests/sql/and/same_concept/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0.5, - "max": 1 - } - } - ] - } - ] - }, - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 2 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/and/same_concept/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/and/same_concept/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/and/same_concept/content_1.csv deleted file mode 100644 index 5ceffe16ca..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/same_concept/content_1.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value -1,1 -2,1.01 -1,1 -1,0.5 -3,0.5 -4,1 -5,0.5 -5,1 -6,1 -7,1 -8,1 -7,-1 diff --git a/backend/src/test/resources/EXCLUDED_sql/and/same_concept/expected.csv b/backend/src/test/resources/EXCLUDED_sql/and/same_concept/expected.csv deleted file mode 100644 index dd7b8434ab..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/and/same_concept/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -1,{} -4,{} -5,{} -6,{} -7,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/combined/combined.test.json b/backend/src/test/resources/EXCLUDED_sql/combined/combined.test.json deleted file mode 100644 index 119b3c3f58..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/combined/combined.test.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Query that utilizes all possible select conversion steps in 1 query", - "expectedCsv": "tests/sql/combined/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": [ - "concept.connector.exists", - "concept.connector.event-date", - "concept.connector.event_duration_sum", - "concept.connector.first_value", - "concept.connector.sum_distinct", - "concept.connector.distinct_select" - ], - "filters": [ - { - "filter": "concept.connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0.0, - "max": 1.5 - } - }, - { - "filter": "concept.connector.count_value", - "type": "REAL_RANGE", - "value": { - "min": 1 - } - } - ] - }, - { - "id": "concept.test_column", - "filters": [], - "selects": [ - "concept.test_column.first_test_column" - ] - } - ], - "selects": [ - "concept.exists", - "concept.event-date", - "concept.event_duration_sum" - ] - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "label": "connector", - "table": "table", - "validityDates": [ - { - "label": "datum", - "startColumn": "table.datum_start", - "endColumn": "table.datum_end" - } - ], - "filters": [ - { - "label": "count_value", - "column": "table.value", - "type": "COUNT" - }, - { - "label": "value", - "description": "xy", - "column": "table.value", - "type": "NUMBER" - } - ], - "selects": [ - { - "type": "EXISTS", - "name": "exists" - }, - { - "type": "EVENT_DATE_UNION", - "name": "event-date" - }, - { - "type": "EVENT_DURATION_SUM", - "name": "event_duration_sum" - }, - { - "label": "first_value", - "column": "table.value", - "type": "FIRST" - }, - { - "label": "distinct_select", - "column": "table.value", - "type": "DISTINCT" - }, - { - "name": "sum_distinct", - "type": "SUM", - "column": "table.value", - "distinctByColumn": [ - "table.k1", - "table.k2" - ] - } - ] - }, - { - "label": "tree_label", - "name": "test_column", - "column": "test_table.test_column", - "validityDates": { - "label": "datum", - "column": "test_table.datum" - }, - "selects": [ - { - "type": "FIRST", - "label": "first_test_column", - "column": "test_table.test_column" - } - ] - } - ], - "children": [ - { - "label": "test_child1", - "description": " ", - "condition": { - "type": "EQUAL", - "values": [ - "A1" - ] - }, - "children": [] - }, - { - "label": "test_child2", - "description": " ", - "condition": { - "type": "EQUAL", - "values": [ - "B2" - ] - }, - "children": [] - } - ], - "selects": [ - { - "type": "EVENT_DATE_UNION", - "name": "event-date" - }, - { - "type": "EVENT_DURATION_SUM", - "name": "event_duration_sum" - }, - { - "type": "EXISTS", - "name": "exists" - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/combined/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "k1", - "type": "STRING" - }, - { - "name": "k2", - "type": "STRING" - } - ] - }, - { - "csv": "tests/sql/combined/content2.csv", - "name": "test_table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/combined/content.csv b/backend/src/test/resources/EXCLUDED_sql/combined/content.csv deleted file mode 100644 index b1445f5c4f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/combined/content.csv +++ /dev/null @@ -1,10 +0,0 @@ -pid,datum_start,datum_end,value,k1,k2 -1,2012-01-01,2012-01-01,1,a,b -1,2013-01-01,2013-12-31,1,a,a -2,2012-01-01,2012-01-01,1.01,a,a -2,2012-01-02,2012-01-02,1,a,a -2,2012-01-05,2012-01-10,1,a,b -3,2012-01-01,2012-01-03,0.5,a,b -4,2012-01-01,2012-01-04,0.5,a,b -5,2012-01-01,2012-01-03,1,a,b -5,2012-01-04,2012-01-05,0.5,a,a diff --git a/backend/src/test/resources/EXCLUDED_sql/combined/content2.csv b/backend/src/test/resources/EXCLUDED_sql/combined/content2.csv deleted file mode 100644 index 63f169c8f0..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/combined/content2.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,datum,test_column -1,2015-01-01,"A1" -2,2010-07-15,"B2" -3,2013-11-10,"A1" -4,2012-11-11,"B2" diff --git a/backend/src/test/resources/EXCLUDED_sql/combined/expected.csv b/backend/src/test/resources/EXCLUDED_sql/combined/expected.csv deleted file mode 100644 index f1c7b15856..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/combined/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates,concept exists,concept event-date,concept event_duration_sum,concept connector exists,concept connector event-date,concept connector event_duration_sum,concept connector first_value,concept connector sum_distinct,concept connector distinct_select,concept tree_label first_test_column -1,"{2012-01-01/2012-01-01,2013-01-01/2013-12-31,2015-01-01/2015-01-01}",1,"{2012-01-01/2012-01-01,2013-01-01/2013-12-31,2015-01-01/2015-01-01}",367,1,"{2012-01-01/2012-01-01,2013-01-01/2013-12-31}",366,1.0,2.0,{1.0},A1 -2,"{2010-07-15/2010-07-15,2012-01-01/2012-01-02,2012-01-05/2012-01-10}",1,"{2010-07-15/2010-07-15,2012-01-01/2012-01-02,2012-01-05/2012-01-10}",9,1,"{2012-01-01/2012-01-02,2012-01-05/2012-01-10}",8,1.01,2.01,"{1.0,1.01}",B2 -3,"{2012-01-01/2012-01-03,2013-11-10/2013-11-10}",1,"{2012-01-01/2012-01-03,2013-11-10/2013-11-10}",4,1,{2012-01-01/2012-01-03},3,0.5,0.5,{0.5},A1 -4,"{2012-01-01/2012-01-04,2012-11-11/2012-11-11}",1,"{2012-01-01/2012-01-04,2012-11-11/2012-11-11}",5,1,{2012-01-01/2012-01-04},4,0.5,0.5,{0.5},B2 -5,{2012-01-01/2012-01-05},1,{2012-01-01/2012-01-05},5,1,{2012-01-01/2012-01-05},5,1.0,1.5,"{0.5,1.0}", diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/content.csv deleted file mode 100644 index 130eee1588..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum_start,datum_end,datum_alt -1,2012-06-30,2015-06-30,2012-01-01 -2,2012-06-30,2015-06-30,2010-07-15 -3,2012-02-03,2012-06-30,2012-11-10 -4,2010-06-30,2015-06-30,2012-11-11 -5,2011-04-30,2014-06-30,2007-11-11 -6,2015-06-30,2016-06-30,2012-11-11 -7,2014-04-30,2015-06-30,2012-11-11 -8,2012-04-30,2014-06-30,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/date_restriction_date_column.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/date_restriction_date_column.test.json deleted file mode 100644 index 6314927ffa..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/date_restriction_date_column.test.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "label": "Date restriction with multiple validity dates and dateColumn", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/date_restriction/date_restriction_date_column/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "dateColumn" : { - "value" : "geschlecht_select.geschlecht_connector.datum_alt" - } - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": [ - { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - { - "label": "datum_alt", - "column": "table1.datum_alt" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/date_restriction_date_column/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "datum_alt", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/expected.csv deleted file mode 100644 index cab6ab7409..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_date_column/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -1,{2012-01-01/2012-01-01} -3,{2012-11-10/2012-11-10} -4,{2012-11-11/2012-11-11} -6,{2012-11-11/2012-11-11} -7,{2012-11-11/2012-11-11} -8,{2012-11-11/2012-11-11} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/content.csv deleted file mode 100644 index 27f0f13ef9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2012-11-10 -4,2012-11-11 -5,2007-11-11 -6,2012-11-11 -7,2012-11-11 -8,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/date_restriction_no_validity_date.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/date_restriction_no_validity_date.test.json deleted file mode 100644 index 36f6351d7a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/date_restriction_no_validity_date.test.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "label": "Date restriction query without validity date", - "description": "If a date restriction is active, but there is no validity date defined to apply the date restriction on, the date restriction filter should not be applied.", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/date_restriction/date_restriction_no_validity_date/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2022-01-01", - "max": "2022-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1" - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/date_restriction_no_validity_date/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/expected.csv deleted file mode 100644 index 6b53cd37ad..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/date_restriction_no_validity_date/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates -1,{} -2,{} -3,{} -4,{} -5,{} -6,{} -7,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/content.csv deleted file mode 100644 index 978380e1e8..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum_start,datum_end -1,2012-06-30,2015-06-30 -2,2012-06-30,2015-06-30 -3,2012-02-03,2012-06-30 -4,2010-06-30,2015-06-30 -5,2011-04-30,2014-06-30 -6,2015-06-30,2016-06-30 -7,2014-04-30,2015-06-30 -8,2012-04-30,2014-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/daterange_column.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/daterange_column.test.json deleted file mode 100644 index 4cdf8a4176..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/daterange_column.test.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Date restriction with a validity date with start and end column", - "expectedCsv": "tests/sql/date_restriction/daterange/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/daterange/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/expected.csv deleted file mode 100644 index 8561aaa17a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/daterange/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -1,{2012-06-30/2012-12-31} -2,{2012-06-30/2012-12-31} -3,{2012-02-03/2012-06-30} -4,{2012-01-01/2012-12-31} -5,{2012-01-01/2012-12-31} -8,{2012-04-30/2012-12-31} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/content.csv deleted file mode 100644 index 7370260880..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2013-11-10 -4,2012-11-11 -5,2007-11-11 -6,2012-11-11 -7,2013-11-11 -8,2015-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/expected.csv deleted file mode 100644 index 6965cf243c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates -2,{2010-07-15/2010-07-15} -4,{2012-11-11/2012-11-11} -6,{2012-11-11/2012-11-11} -5,{2007-11-11/2007-11-11} -1,{2012-01-01/2012-01-01} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/only_max.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/only_max.test.json deleted file mode 100644 index bcb014510a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_max/only_max.test.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "label": "Date restriction query with simple date validity date and only max date restriction set", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/date_restriction/only_max/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "max": "2012-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/only_max/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/content.csv deleted file mode 100644 index 27f0f13ef9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2012-11-10 -4,2012-11-11 -5,2007-11-11 -6,2012-11-11 -7,2012-11-11 -8,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/expected.csv deleted file mode 100644 index cab6ab7409..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -1,{2012-01-01/2012-01-01} -3,{2012-11-10/2012-11-10} -4,{2012-11-11/2012-11-11} -6,{2012-11-11/2012-11-11} -7,{2012-11-11/2012-11-11} -8,{2012-11-11/2012-11-11} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/only_min.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/only_min.test.json deleted file mode 100644 index 78fb514ca9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/only_min/only_min.test.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "label": "Date restriction query with simple date validity date and only min date restriction set", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/date_restriction/only_min/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/simple_date/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/content.csv deleted file mode 100644 index 5ac7b2e2d1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,"2012-06-30/2015-06-30" -2,"2012-06-30/2015-06-30" -3,"2012-02-03/2012-06-30" -4,"2010-06-30/2015-06-30" -5,"2011-04-30/2014-06-30" -6,"2015-06-30/2016-06-30" -7,"2014-04-30/2015-06-30" -8,"2012-04-30/2014-06-30" diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/daterange_column.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/daterange_column.test.json deleted file mode 100644 index 2ab0296b1c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/daterange_column.test.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true, - "supportedDialects": [ - "POSTGRESQL" - ] - }, - "label": "Date restriction with a daterange column validity date (PostgreSQL only)", - "expectedCsv": "tests/sql/date_restriction/postgres_daterange/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/postgres_daterange/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE_RANGE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/expected.csv deleted file mode 100644 index 8561aaa17a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/postgres_daterange/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -1,{2012-06-30/2012-12-31} -2,{2012-06-30/2012-12-31} -3,{2012-02-03/2012-06-30} -4,{2012-01-01/2012-12-31} -5,{2012-01-01/2012-12-31} -8,{2012-04-30/2012-12-31} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/content.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/content.csv deleted file mode 100644 index 27f0f13ef9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2012-11-10 -4,2012-11-11 -5,2007-11-11 -6,2012-11-11 -7,2012-11-11 -8,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/date_restriction_simple_date.test.json b/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/date_restriction_simple_date.test.json deleted file mode 100644 index d01bd8c240..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/date_restriction_simple_date.test.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "label": "Date restriction query with simple date validity date", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/date_restriction/simple_date/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/date_restriction/simple_date/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/expected.csv deleted file mode 100644 index 38f153bbff..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/date_restriction/simple_date/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -4,{2012-11-11/2012-11-11} -7,{2012-11-11/2012-11-11} -3,{2012-11-10/2012-11-10} -6,{2012-11-11/2012-11-11} -1,{2012-01-01/2012-01-01} -8,{2012-11-11/2012-11-11} diff --git a/backend/src/test/resources/EXCLUDED_sql/external/SIMPLE_CQEXTERNAL_QUERY.test.json b/backend/src/test/resources/EXCLUDED_sql/external/SIMPLE_CQEXTERNAL_QUERY.test.json deleted file mode 100644 index dc78994627..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/external/SIMPLE_CQEXTERNAL_QUERY.test.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "CQExternal Extra Data Test", - "expectedCsv": "tests/sql/external/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "EXTERNAL", - "format": [ - "ID", - "EVENT_DATE", - "EXTRA", - "EXTRA", - "EXTRA", - "EXTRA", - "EXTRA", - "EXTRA", - "EXTRA", - "EXTRA" - ], - "values": [ - [ - "result", - "dates", - "payload 1", - "payload 2", - "payload 3", - "payload 4", - "payload 5", - "payload 6", - "payload 7", - "payload 8" - ], - [ - 3, - "2013-11-10", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8" - ], - [ - 6, - "2013-11-10", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8" - ], - [ - 1, - "2012-01-01", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8" - ], - [ - 3, - "2013-11-10", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8" - ] - ] - } - }, - "concepts": [ - { - "label": "test_tree", - "type": "TREE", - "connectors": { - "label": "tree_label", - "name": "test_concept", - "table": "test_table", - "validityDates": { - "label": "datum", - "column": "test_table.datum" - } - } - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/external/content.csv", - "name": "test_table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/external/content.csv b/backend/src/test/resources/EXCLUDED_sql/external/content.csv deleted file mode 100644 index 5499484b3d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/external/content.csv +++ /dev/null @@ -1,7 +0,0 @@ -pid,datum -4,2013-11-10 -5,2013-11-10 -6,2013-11-10 -1,2012-01-01 -2,2013-11-10 -3,2013-11-10 diff --git a/backend/src/test/resources/EXCLUDED_sql/external/expected.csv b/backend/src/test/resources/EXCLUDED_sql/external/expected.csv deleted file mode 100644 index 487ac38146..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/external/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates,payload 1,payload 2,payload 3,payload 4,payload 5,payload 6,payload 7,payload 8 -1,{2012-01-01/2012-01-01},{1},{2},{3},{4},{5},{6},{7},{8} -3,{2013-11-10/2013-11-10},"{1,1}","{2,2}","{3,3}","{4,4}","{5,5}","{6,6}","{7,7}","{8,8}" -6,{2013-11-10/2013-11-10},{1},{2},{3},{4},{5},{6},{7},{8} \ No newline at end of file diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/big_multi_select.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/big_multi_select.test.json deleted file mode 100644 index 1f8ad5ab9b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/big_multi_select.test.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "label": "BIG_MULTI_SELECT filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/big_multi_select/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f", - "", - null - ] - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "BIG_MULTI_SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/big_multi_select/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/content.csv deleted file mode 100644 index 7d719b498c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,geschlecht -1,"f" -2,"m" -3,"f" -4,"m" -5,"" -6,"" -7,"mf" -8,"fm" diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/expected.csv deleted file mode 100644 index ca9d0470d3..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/big_multi_select/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates -1,{} -3,{} -5,{} -6,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count/content.csv deleted file mode 100644 index 3c3c196695..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,value -1,0.9 -1,0.8 -1,0.7 -2,0.1 -2,0.1 -3,1.0 -3,0.5 -4,19.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count/count.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/count/count.test.json deleted file mode 100644 index 832b1ae0f2..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count/count.test.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "label": "COUNT filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/count/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 2 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "COUNT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/count/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count/expected.csv deleted file mode 100644 index 4e1698b63d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates -1,{} -2,{} -3,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/content.csv deleted file mode 100644 index 3c3c196695..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,value -1,0.9 -1,0.8 -1,0.7 -2,0.1 -2,0.1 -3,1.0 -3,0.5 -4,19.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/count_distinct.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/count_distinct.test.json deleted file mode 100644 index f1850ae927..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/count_distinct.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "label": "COUNT DISTINCT filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/count_distinct/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 2 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "COUNT", - "distinct": "true" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/count_distinct/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/expected.csv deleted file mode 100644 index f4a54b0956..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_distinct/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -1,{} -3,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/content.csv deleted file mode 100644 index b18754ec50..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/content.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,datum_start,datum_end -1,2015-01-01,2015-12-31 -2,2015-01-01,2015-01-31 -3,2015-01-01,2015-06-30 -4,2015-06-01,2015-06-30 -4,2015-01-01,2015-01-31 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/count_quarters.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/count_quarters.test.json deleted file mode 100644 index 43d3417c62..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/count_quarters.test.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "label": "COUNT_QUARTERS on date range", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/count_quarters/date_range/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "filters": { - "filter": "count.count_connector.count_quarters_filter", - "type": "INTEGER_RANGE", - "value": { - "min": 2, - "max": 3 - } - } - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "filters": { - "name": "count_quarters_filter", - "type": "COUNT_QUARTERS", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/count_quarters/date_range/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/expected.csv deleted file mode 100644 index 23859bb09d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/date_range/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -3,{} -4,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/content.csv deleted file mode 100644 index 8bb87b9b84..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/content.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,datum -1,"2015-01-01/2016-01-01" -2,"2015-01-01/2015-02-01" -3,"2015-01-01/2015-07-01" -4,"2015-06-01/2015-07-01" -4,"2015-01-01/2015-02-01" diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/daterange_column.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/daterange_column.test.json deleted file mode 100644 index 5f37d767e9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/daterange_column.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true, - "supportedDialects": [ - "POSTGRESQL"" - ] - }, - "label": "COUNT_QUARTERS filter on single postgres daterange column", - "expectedCsv": "tests/sql/filter/count_quarters/postgres/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "filters": { - "filter": "count.count_connector.count_quarters_filter", - "type": "INTEGER_RANGE", - "value": { - "min": 2, - "max": 3 - } - } - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "filters": { - "name": "count_quarters_filter", - "type": "COUNT_QUARTERS", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/count_quarters/postgres/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE_RANGE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/expected.csv deleted file mode 100644 index 23859bb09d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/postgres/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -3,{} -4,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/content.csv deleted file mode 100644 index 526d330434..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/content.csv +++ /dev/null @@ -1,39 +0,0 @@ -pid,behandlungsdatum -1,2015-03-16 -1,2015-03-17 -2,2015-03-31 -2,2015-04-01 -3,2015-02-01 -3,2015-04-01 -3,2015-07-01 -3,2015-11-01 -4,2015-03-31 -4,2015-04-01 -4,2015-07-01 -5,2015-11-12 -6,2015-03-31 -6,2015-04-01 -6,2015-04-02 -7,2015-01-01 -7,2015-02-01 -7,2015-03-01 -7,2015-04-01 -8,2015-11-11 -8,2015-11-12 -8,2015-11-13 -8,2015-11-14 -9,2015-04-14 -9,2015-11-12 -9,2015-09-14 -9,2016-04-14 -9,2016-11-12 -9,2016-09-14 -10,2015-09-14 -10,2016-09-14 -11,2015-09-14 -11,2016-09-14 -11,2016-11-12 -12,2015-09-14 -12,2015-11-12 -12,2016-09-14 -12,2016-11-12 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/count_quarters.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/count_quarters.test.json deleted file mode 100644 index 52249e6352..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/count_quarters.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "label": "COUNT_QUARTERS on single date column", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/count_quarters/single_date/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "filters": { - "filter": "count.count_connector.count_quarters_filter", - "type": "INTEGER_RANGE", - "value": { - "min": 2, - "max": 3 - } - } - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "filters": { - "name": "count_quarters_filter", - "type": "COUNT_QUARTERS", - "column": "table1.behandlungsdatum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/count_quarters/single_date/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "behandlungsdatum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/expected.csv deleted file mode 100644 index 847a744272..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/count_quarters/single_date/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -2,{} -4,{} -6,{} -7,{} -10,{} -11,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/centuries.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/centuries.test.json deleted file mode 100644 index 1636cb130a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/centuries.test.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "label": "DATE_DISTANCE filter query with timeUnit CENTURIES", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/date_distance/centuries/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.date_distance_centuries", - "type": "INTEGER_RANGE", - "value": { - "max": 1 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": [ - { - "column": "table1.datum", - "label": "date_distance_centuries", - "name": "date_distance_centuries", - "timeUnit": "CENTURIES", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/date_distance/centuries/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/content.csv deleted file mode 100644 index cb125007de..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,1920-01-01 -2,2010-07-15 -3,2010-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/expected.csv deleted file mode 100644 index a0450528e7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/centuries/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates -2,{} -4,{} -7,{} -3,{} -6,{} -5,{} -1,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/content.csv deleted file mode 100644 index 2bbb467931..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2012-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/days_with_date_restriction.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/days_with_date_restriction.test.json deleted file mode 100644 index 4d6e824de6..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/days_with_date_restriction.test.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE filter query with timeUnit DAYS and date restriction set", - "expectedCsv": "tests/sql/filter/date_distance/days_with_date_restriction/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-31" - }, - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.date_distance_days", - "type": "INTEGER_RANGE", - "value": { - "min": 100 - } - } - ] - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - }, - "filters": [ - { - "column": "table1.datum", - "label": "date_distance_days", - "name": "date_distance_days", - "timeUnit": "DAYS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/date_distance/days_with_date_restriction/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/expected.csv deleted file mode 100644 index 57ecb1e80c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_with_date_restriction/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates -1,{2012-01-01/2012-01-01} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/content.csv deleted file mode 100644 index 096aed0aaa..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2013-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/days_without_date_restriction.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/days_without_date_restriction.test.json deleted file mode 100644 index 4cd696025d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/days_without_date_restriction.test.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE filter query with timeUnit DAYS and without date restriction set", - "expectedCsv": "tests/sql/filter/date_distance/days_without_date_restriction/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.date_distance_days", - "type": "INTEGER_RANGE", - "value": { - "min": 4000 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": [ - { - "column": "table1.datum", - "label": "date_distance_days", - "name": "date_distance_days", - "timeUnit": "DAYS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/date_distance/days_without_date_restriction/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/expected.csv deleted file mode 100644 index 23fa9ca44a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/days_without_date_restriction/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates -2,{} -5,{} -1,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/content.csv deleted file mode 100644 index 5feec5fd01..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2020-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/decades.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/decades.test.json deleted file mode 100644 index 6298a36b55..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/decades.test.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE filter query with timeUnit DECADES", - "expectedCsv": "tests/sql/filter/date_distance/decades/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.date_distance_decades", - "type": "INTEGER_RANGE", - "value": { - "min": 1 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": [ - { - "column": "table1.datum", - "label": "date_distance_decades", - "name": "date_distance_decades", - "timeUnit": "DECADES", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/date_distance/decades/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/expected.csv deleted file mode 100644 index 23fa9ca44a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/decades/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates -2,{} -5,{} -1,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/content.csv deleted file mode 100644 index 43ba1a9aa1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-29 -2,2010-07-15 -3,2010-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/expected.csv deleted file mode 100644 index bc1d8b2ee3..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -6,{} -7,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/months.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/months.test.json deleted file mode 100644 index fcfa8852a5..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/months/months.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE filter query with timeUnit MONTHS", - "expectedCsv": "tests/sql/filter/date_distance/months/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": { - "filter": "geschlecht_select.geschlecht_connector.date_distance_months", - "type": "INTEGER_RANGE", - "value": { - "max": 100 - } - } - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": [ - { - "column": "table1.datum", - "label": "date_distance_months", - "name": "date_distance_months", - "timeUnit": "MONTHS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/date_distance/months/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/content.csv deleted file mode 100644 index 8c2f303145..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2010-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/expected.csv deleted file mode 100644 index 0f5d2fe7f2..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates -2,{} -3,{} -5,{} -1,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/years.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/years.test.json deleted file mode 100644 index e68ab6140f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/date_distance/years/years.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE filter query with timeUnit YEARS", - "expectedCsv": "tests/sql/filter/date_distance/years/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": { - "filter": "geschlecht_select.geschlecht_connector.date_distance_years", - "type": "INTEGER_RANGE", - "value": { - "min": 10 - } - } - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": [ - { - "column": "table1.datum", - "label": "date_distance_years", - "name": "date_distance_years", - "timeUnit": "YEARS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/date_distance/years/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/flag/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/flag/content.csv deleted file mode 100644 index c66e0b3cb9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/flag/content.csv +++ /dev/null @@ -1,10 +0,0 @@ -pid,a,b,c -1,false,false,false -1,true,false,false -2,false,true,false -2,false,true,true -3,false,false,true -4,true,true,false -5,false,false,true -6,,, -7,,,true diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/flag/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/flag/expected.csv deleted file mode 100644 index 1452989b9d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/flag/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates -2,{} -3,{} -4,{} -5,{} -7,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/flag/flag.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/flag/flag.test.json deleted file mode 100644 index 1715b9cfff..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/flag/flag.test.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "label": "FLAGS filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/flag/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "flags" - ], - "type": "CONCEPT", - "label": "flags", - "tables": [ - { - "id": "flags.flags_connector", - "filters": [ - { - "filter": "flags.flags_connector.flags_filter", - "type": "MULTI_SELECT", - "value": [ - "B", - "C" - ] - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "flags", - "type": "TREE", - "connectors": [ - { - "label": "flags_connector", - "table": "table1", - "filters": { - "type": "FLAGS", - "name": "flags_filter", - "flags": { - "A": "table1.a", - "B": "table1.b", - "C": "table1.c" - } - } - } - ] - } - ], - "content": { - "tables": { - "csv": "tests/sql/filter/flag/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "a", - "type": "BOOLEAN" - }, - { - "name": "b", - "type": "BOOLEAN" - }, - { - "name": "c", - "type": "BOOLEAN" - } - ] - } - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/content.csv deleted file mode 100644 index 7d719b498c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,geschlecht -1,"f" -2,"m" -3,"f" -4,"m" -5,"" -6,"" -7,"mf" -8,"fm" diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/expected.csv deleted file mode 100644 index ca9d0470d3..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates -1,{} -3,{} -5,{} -6,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/multi_select.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/multi_select.test.json deleted file mode 100644 index 817e2c270e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/multi_select/multi_select.test.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "label": "SELECT filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/multi_select/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "filters":[ - { - "filter":"geschlecht_select.geschlecht_connector.geschlecht", - "type":"BIG_MULTI_SELECT", - "value":[ - "f", - "", - null - ] - } - ] - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "filters":{ - "label":"geschlecht", - "description":"Geschlecht zur gegebenen Datumseinschränkung", - "column":"table1.geschlecht", - "type":"SELECT" - } - } - ] - } - ], - "content":{ - "tables":[ - { - "csv": "tests/sql/filter/multi_select/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"geschlecht", - "type":"STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number/content.csv deleted file mode 100644 index 5ceffe16ca..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number/content.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value -1,1 -2,1.01 -1,1 -1,0.5 -3,0.5 -4,1 -5,0.5 -5,1 -6,1 -7,1 -8,1 -7,-1 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number/expected.csv deleted file mode 100644 index 9e92f6ceba..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates -1,{} -3,{} -4,{} -5,{} -6,{} -7,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number/number.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/number/number.test.json deleted file mode 100644 index d99a9b22a6..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number/number.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "label": "Single Number-Real-Range Filter Query", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/number/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0.5, - "max": 1 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/number/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/content.csv deleted file mode 100644 index 7c12a957cb..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/content.csv +++ /dev/null @@ -1,19 +0,0 @@ -pid,money -1,50 -2,250 -3,150 -3,150 -4,50 -4,150 -5,250 -5,150 -6,50 -6,250 -7,150.01 -8,200.01 -9,99.99 -10, -11, -11,300 -12,150 -12, diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/expected.csv deleted file mode 100644 index c449d439eb..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates -3,{} -4,{} -5,{} -7,{} -12,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/number_money.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/number_money.test.json deleted file mode 100644 index 1349c3df9d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_money/integer_range/number_money.test.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "label": "Single Number-Real-Range Filter Query with MONEY RANGE on column with MONEY type", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/number_money/integer_range/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.money_number_filter", - "type": "MONEY_RANGE", - "value": { - "min": 10000, - "max": 20000 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "name": "money_number_filter", - "column": "table1.money", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/number_money/integer_range/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "money", - "type": "MONEY" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/content.csv deleted file mode 100644 index 5ceffe16ca..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/content.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value -1,1 -2,1.01 -1,1 -1,0.5 -3,0.5 -4,1 -5,0.5 -5,1 -6,1 -7,1 -8,1 -7,-1 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/expected.csv deleted file mode 100644 index e645b35258..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates -1,{} -3,{} -5,{} -7,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/number_only_max.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/number_only_max.test.json deleted file mode 100644 index 30fb26fb40..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_max/number_only_max.test.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "label": "Single Number-Real-Range Filter Query (only max val)", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/number_only_max/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "max": 0.5 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/number_only_max/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/content.csv deleted file mode 100644 index 731f077a25..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/content.csv +++ /dev/null @@ -1,12 +0,0 @@ -pid,value -1,1 -2,1.01 -1,1 -1,0.5 -3,0.5 -4,1 -5,0.2 -6,1 -7,1 -8,1 -7,-1 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/expected.csv deleted file mode 100644 index f8730cde1b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates -1,{} -2,{} -3,{} -4,{} -6,{} -7,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/number_only_min.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/number_only_min.test.json deleted file mode 100644 index dc2e91b21d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/number_only_min/number_only_min.test.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "label": "Single Number-Real-Range Filter Query (only min val)", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/number_only_min/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0.5 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/number_only_min/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/single_select/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/single_select/content.csv deleted file mode 100644 index 7d719b498c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/single_select/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,geschlecht -1,"f" -2,"m" -3,"f" -4,"m" -5,"" -6,"" -7,"mf" -8,"fm" diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/single_select/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/single_select/expected.csv deleted file mode 100644 index f4a54b0956..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/single_select/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -1,{} -3,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/single_select/single_select.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/single_select/single_select.test.json deleted file mode 100644 index 78b79d1fe9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/single_select/single_select.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "label": "SINGLE_SELECT filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/single_select/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "SELECT", - "value": "f" - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "SINGLE_SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/single_select/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/sum/content.csv deleted file mode 100644 index d199bdf995..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,value -1,0.9 -1,0.8 -2,0.1 -2,0.1 -3,1.0 -3,0.5 -4,19.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/content.csv deleted file mode 100644 index f092c3cb60..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/content.csv +++ /dev/null @@ -1,22 +0,0 @@ -pid,plus,minus -1,100,50 -2,100,0 -3,200,0 -4,250,50 -5,250,0 -6,150,51 -7,150,0 -8,100,0 -8,100,0 -8,100,0 -9,150,100 -9,150,100 -9,150,100 -10,200,200 -10,200,0 -11,50,0 -11,50,0 -11,50,0 -12,100,99 -12,100,99 -12,100,99 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/diffsum.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/diffsum.test.json deleted file mode 100644 index b20834584d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/diffsum.test.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "label": "SUM with subtract column filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/sum/diffsum/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "sum" - ], - "type": "CONCEPT", - "label": "sum", - "tables": [ - { - "id": "sum.sum_connector", - "filters": [ - { - "filter": "sum.sum_connector.diffsum_filter", - "type": "INTEGER_RANGE", - "value": { - "min": 100, - "max": 200 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "sum", - "type": "TREE", - "connectors": [ - { - "label": "sum_connector", - "table": "table1", - "filters": { - "type": "SUM", - "name": "diffsum_filter", - "subtractColumn": "table1.minus", - "column": "table1.plus" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/sum/diffsum/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "plus", - "type": "INTEGER" - }, - { - "name": "minus", - "type": "INTEGER" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/expected.csv deleted file mode 100644 index acc00916b5..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/diffsum/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates -2,{} -3,{} -4,{} -7,{} -9,{} -10,{} -11,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/content.csv b/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/content.csv deleted file mode 100644 index 12626d3707..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,k1,k2,value -1,a,b,1 -1,a,b,1 -2,a,,0 -3,a,b,1 -3,a,c,1 -4,a,b,1 -4,b,a,1 -4,c,a,1 diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/distinct-sum.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/distinct-sum.test.json deleted file mode 100644 index a5f9c9567e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/distinct-sum.test.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "label": "SUM filter with DISTINCT BY columns", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/sum/distinct/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "sum" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "sum.sum_connector", - "filters": [ - { - "filter": "sum.sum_connector.sum_distinct_filter", - "type": "INTEGER_RANGE", - "value": { - "min": 1, - "max": 2 - } - } - ] - } - ] - } - }, - "concepts": [ - { - "name": "sum", - "type": "TREE", - "connectors": [ - { - "name": "sum_connector", - "table": "table", - "filters": { - "name": "sum_distinct_filter", - "type": "SUM", - "column": "table.value", - "distinctByColumn": [ - "table.k1", - "table.k2" - ] - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/sum/distinct/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "k1", - "type": "STRING" - }, - { - "name": "k2", - "type": "STRING" - }, - { - "name": "value", - "type": "INTEGER" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/expected.csv deleted file mode 100644 index f4a54b0956..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/distinct/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -1,{} -3,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/expected.csv b/backend/src/test/resources/EXCLUDED_sql/filter/sum/expected.csv deleted file mode 100644 index db68aa4d06..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates -1,{} -3,{} -4,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/filter/sum/sum.test.json b/backend/src/test/resources/EXCLUDED_sql/filter/sum/sum.test.json deleted file mode 100644 index 46b973960b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/filter/sum/sum.test.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "label": "SUM filter", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/filter/sum/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 1.5 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "SUM" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/filter/sum/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/QUARTER YEAR.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/QUARTER YEAR.test.json deleted file mode 100644 index 12e4037993..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/QUARTER YEAR.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "YEAR Alignment, QUARTER Resolution", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/ALIGNMENT/quarter_year.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "alignmentHint": "YEAR", - "dateRange": { - "min": "2012-06-16", - "max": "2013-12-31" - } - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/QUARTER_DAY.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/QUARTER_DAY.test.json deleted file mode 100644 index d8a0f2dfa7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/QUARTER_DAY.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "DAY Alignment, DAY Resolution", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/ALIGNMENT/quarter_day.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "DAYS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "alignmentHint": "DAY", - "dateRange": { - "min": "2012-06-01", - "max": "2012-09-30" - } - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/YEAR QUARTER.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/YEAR QUARTER.test.json deleted file mode 100644 index 5a3433bdcb..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/YEAR QUARTER.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "Quarter Alignment, Year Resolution", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/ALIGNMENT/year_quarter_expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "YEARS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "alignmentHint": "QUARTER", - "dateRange": { - "min": "2012-06-16", - "max": "2015-01-01" - } - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/YEAR YEAR.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/YEAR YEAR.test.json deleted file mode 100644 index 4e845527c7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/YEAR YEAR.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "YEAR Alignment, YEAR Resolution", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/ALIGNMENT/year_year_expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "YEARS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "alignmentHint": "YEAR", - "dateRange": { - "min": "2012-06-16", - "max": "2014-12-17" - } - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/quarter_day.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/quarter_day.csv deleted file mode 100644 index f17333ceff..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/quarter_day.csv +++ /dev/null @@ -1,127 +0,0 @@ -result,resolution,index,date_range,Alter -1,complete,,2012-06-01/2012-09-30,55 -1,year,1,2012-06-01/2012-09-30,55 -1,quarter,1,2012-06-01/2012-08-29,55 -1,quarter,2,2012-08-30/2012-09-30,55 -1,day,1,2012-06-01/2012-06-01,55 -1,day,2,2012-06-02/2012-06-02,55 -1,day,3,2012-06-03/2012-06-03,55 -1,day,4,2012-06-04/2012-06-04,55 -1,day,5,2012-06-05/2012-06-05,55 -1,day,6,2012-06-06/2012-06-06,55 -1,day,7,2012-06-07/2012-06-07,55 -1,day,8,2012-06-08/2012-06-08,55 -1,day,9,2012-06-09/2012-06-09,55 -1,day,10,2012-06-10/2012-06-10,55 -1,day,11,2012-06-11/2012-06-11,55 -1,day,12,2012-06-12/2012-06-12,55 -1,day,13,2012-06-13/2012-06-13,55 -1,day,14,2012-06-14/2012-06-14,55 -1,day,15,2012-06-15/2012-06-15,55 -1,day,16,2012-06-16/2012-06-16,55 -1,day,17,2012-06-17/2012-06-17,55 -1,day,18,2012-06-18/2012-06-18,55 -1,day,19,2012-06-19/2012-06-19,55 -1,day,20,2012-06-20/2012-06-20,55 -1,day,21,2012-06-21/2012-06-21,55 -1,day,22,2012-06-22/2012-06-22,55 -1,day,23,2012-06-23/2012-06-23,55 -1,day,24,2012-06-24/2012-06-24,55 -1,day,25,2012-06-25/2012-06-25,55 -1,day,26,2012-06-26/2012-06-26,55 -1,day,27,2012-06-27/2012-06-27,55 -1,day,28,2012-06-28/2012-06-28,55 -1,day,29,2012-06-29/2012-06-29,55 -1,day,30,2012-06-30/2012-06-30,55 -1,day,31,2012-07-01/2012-07-01,55 -1,day,32,2012-07-02/2012-07-02,55 -1,day,33,2012-07-03/2012-07-03,55 -1,day,34,2012-07-04/2012-07-04,55 -1,day,35,2012-07-05/2012-07-05,55 -1,day,36,2012-07-06/2012-07-06,55 -1,day,37,2012-07-07/2012-07-07,55 -1,day,38,2012-07-08/2012-07-08,55 -1,day,39,2012-07-09/2012-07-09,55 -1,day,40,2012-07-10/2012-07-10,55 -1,day,41,2012-07-11/2012-07-11,55 -1,day,42,2012-07-12/2012-07-12,55 -1,day,43,2012-07-13/2012-07-13,55 -1,day,44,2012-07-14/2012-07-14,55 -1,day,45,2012-07-15/2012-07-15,55 -1,day,46,2012-07-16/2012-07-16,55 -1,day,47,2012-07-17/2012-07-17,55 -1,day,48,2012-07-18/2012-07-18,55 -1,day,49,2012-07-19/2012-07-19,55 -1,day,50,2012-07-20/2012-07-20,55 -1,day,51,2012-07-21/2012-07-21,55 -1,day,52,2012-07-22/2012-07-22,55 -1,day,53,2012-07-23/2012-07-23,55 -1,day,54,2012-07-24/2012-07-24,55 -1,day,55,2012-07-25/2012-07-25,55 -1,day,56,2012-07-26/2012-07-26,55 -1,day,57,2012-07-27/2012-07-27,55 -1,day,58,2012-07-28/2012-07-28,55 -1,day,59,2012-07-29/2012-07-29,55 -1,day,60,2012-07-30/2012-07-30,55 -1,day,61,2012-07-31/2012-07-31,55 -1,day,62,2012-08-01/2012-08-01,55 -1,day,63,2012-08-02/2012-08-02,55 -1,day,64,2012-08-03/2012-08-03,55 -1,day,65,2012-08-04/2012-08-04,55 -1,day,66,2012-08-05/2012-08-05,55 -1,day,67,2012-08-06/2012-08-06,55 -1,day,68,2012-08-07/2012-08-07,55 -1,day,69,2012-08-08/2012-08-08,55 -1,day,70,2012-08-09/2012-08-09,55 -1,day,71,2012-08-10/2012-08-10,55 -1,day,72,2012-08-11/2012-08-11,55 -1,day,73,2012-08-12/2012-08-12,55 -1,day,74,2012-08-13/2012-08-13,55 -1,day,75,2012-08-14/2012-08-14,55 -1,day,76,2012-08-15/2012-08-15,55 -1,day,77,2012-08-16/2012-08-16,55 -1,day,78,2012-08-17/2012-08-17,55 -1,day,79,2012-08-18/2012-08-18,55 -1,day,80,2012-08-19/2012-08-19,55 -1,day,81,2012-08-20/2012-08-20,55 -1,day,82,2012-08-21/2012-08-21,55 -1,day,83,2012-08-22/2012-08-22,55 -1,day,84,2012-08-23/2012-08-23,55 -1,day,85,2012-08-24/2012-08-24,55 -1,day,86,2012-08-25/2012-08-25,55 -1,day,87,2012-08-26/2012-08-26,55 -1,day,88,2012-08-27/2012-08-27,55 -1,day,89,2012-08-28/2012-08-28,55 -1,day,90,2012-08-29/2012-08-29,55 -1,day,91,2012-08-30/2012-08-30,55 -1,day,92,2012-08-31/2012-08-31,55 -1,day,93,2012-09-01/2012-09-01,55 -1,day,94,2012-09-02/2012-09-02,55 -1,day,95,2012-09-03/2012-09-03,55 -1,day,96,2012-09-04/2012-09-04,55 -1,day,97,2012-09-05/2012-09-05,55 -1,day,98,2012-09-06/2012-09-06,55 -1,day,99,2012-09-07/2012-09-07,55 -1,day,100,2012-09-08/2012-09-08,55 -1,day,101,2012-09-09/2012-09-09,55 -1,day,102,2012-09-10/2012-09-10,55 -1,day,103,2012-09-11/2012-09-11,55 -1,day,104,2012-09-12/2012-09-12,55 -1,day,105,2012-09-13/2012-09-13,55 -1,day,106,2012-09-14/2012-09-14,55 -1,day,107,2012-09-15/2012-09-15,55 -1,day,108,2012-09-16/2012-09-16,55 -1,day,109,2012-09-17/2012-09-17,55 -1,day,110,2012-09-18/2012-09-18,55 -1,day,111,2012-09-19/2012-09-19,55 -1,day,112,2012-09-20/2012-09-20,55 -1,day,113,2012-09-21/2012-09-21,55 -1,day,114,2012-09-22/2012-09-22,55 -1,day,115,2012-09-23/2012-09-23,55 -1,day,116,2012-09-24/2012-09-24,55 -1,day,117,2012-09-25/2012-09-25,55 -1,day,118,2012-09-26/2012-09-26,55 -1,day,119,2012-09-27/2012-09-27,55 -1,day,120,2012-09-28/2012-09-28,55 -1,day,121,2012-09-29/2012-09-29,55 -1,day,122,2012-09-30/2012-09-30,55 diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/quarter_year.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/quarter_year.csv deleted file mode 100644 index 0b9125cb54..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/quarter_year.csv +++ /dev/null @@ -1,11 +0,0 @@ -result,resolution,index,date_range,Alter -1,complete,,2012-06-16/2013-12-31,56 -1,year,1,2012-06-16/2012-12-31,55 -1,year,2,2013-01-01/2013-12-31, -1,quarter,1,2012-06-16/2012-06-30,55 -1,quarter,2,2012-07-01/2012-09-30,55 -1,quarter,3,2012-10-01/2012-12-31,55 -1,quarter,4,2013-01-01/2013-03-31, -1,quarter,5,2013-04-01/2013-06-30, -1,quarter,6,2013-07-01/2013-09-30, -1,quarter,7,2013-10-01/2013-12-31, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/year_quarter_expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/year_quarter_expected.csv deleted file mode 100644 index a974ba7d6e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/year_quarter_expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,resolution,index,date_range,Alter -1,complete,,2012-06-16/2015-01-01,58 -1,year,1,2012-06-16/2013-03-31,56 -1,year,2,2013-04-01/2014-03-31, -1,year,3,2014-04-01/2015-01-01, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/year_year_expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/year_year_expected.csv deleted file mode 100644 index 145c67b948..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/ALIGNMENT/year_year_expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,resolution,index,date_range,Alter -1,complete,,2012-06-16/2014-12-17,57 -1,year,1,2012-06-16/2012-12-31,55 -1,year,2,2013-01-01/2013-12-31, -1,year,3,2014-01-01/2014-12-17, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES.test.json deleted file mode 100644 index 62a4a9ca02..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES.test.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ABS-EXPORT-FORM ADD DEFAULT SELECT Test", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/MULTIPLE_FEATURES/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - }, - { - "ids": [ - "geschlecht" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "geschlecht.geschlecht", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "dateRange": { - "min": "2012-01-16", - "max": "2012-12-17" - } - } - }, - "concepts": [ - "/shared/alter.concept.json", - "/shared/geschlecht.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES_AND_CONNECTOR.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES_AND_CONNECTOR.test.json deleted file mode 100644 index 3d84f213ce..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES_AND_CONNECTOR.test.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ABS-EXPORT-FORM with multiple features and AND connector", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_and_connector.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "ids": "abc-concept", - "tables": { - "id": "abc-concept.connector2", - "filters": [ - { - "filter": "abc-concept.connector2.value", - "type": "MULTI_SELECT", - "value": [ - "A", - "B" - ] - } - ] - } - }, - { - "type": "CONCEPT", - "ids": "geschlecht", - "tables": { - "id": "geschlecht.geschlecht" - } - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-17" - } - } - }, - "concepts": [ - "/tests/form/shared/abc.concept.json", - "/shared/geschlecht.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "secondaryIds": [ - { - "name": "secondary" - } - ], - "previousQueries": [ - { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "abc-concept" - ], - "tables": { - "id": "abc-concept.connector" - }, - "type": "CONCEPT" - } - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES_OR_CONNECTOR.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES_OR_CONNECTOR.test.json deleted file mode 100644 index 4b04c0306e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/MULTIPLE_FEATURES_OR_CONNECTOR.test.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ABS-EXPORT-FORM with multiple features and OR connector", - "expectedCsv": { - "results": "tests/sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_or_connector.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "type": "OR", - "children": [ - { - "type": "CONCEPT", - "ids": "abc-concept", - "tables": { - "id": "abc-concept.connector2", - "filters": [ - { - "filter": "abc-concept.connector2.value", - "type": "MULTI_SELECT", - "value": [ - "A" - ] - } - ] - } - }, - { - "type": "CONCEPT", - "ids": "geschlecht", - "tables": { - "id": "geschlecht.geschlecht" - } - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-17" - } - } - }, - "concepts": [ - "/tests/form/shared/abc.concept.json", - "/shared/geschlecht.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "secondaryIds": [ - { - "name": "secondary" - } - ], - "previousQueries": [ - { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "abc-concept" - ], - "tables": { - "id": "abc-concept.connector" - }, - "type": "CONCEPT" - } - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected.csv deleted file mode 100644 index 44625d7b30..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,resolution,index,date_range,Alter,Geschlecht -1,complete,,2012-01-16/2012-12-17,55,1 -1,year,1,2012-01-16/2012-12-17,55,1 -1,quarter,1,2012-01-16/2012-03-31,55,1 -1,quarter,2,2012-04-01/2012-06-30,55,1 -1,quarter,3,2012-07-01/2012-09-30,55,1 -1,quarter,4,2012-10-01/2012-12-17,55,1 diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_and_connector.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_and_connector.csv deleted file mode 100644 index c2d700cc3c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_and_connector.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,resolution,index,date_range,abc-concept and Geschlecht exists -1,complete,,2012-01-01/2012-12-17,1 -1,year,1,2012-01-01/2012-12-17,1 -1,quarter,1,2012-01-01/2012-03-31,1 -1,quarter,2,2012-04-01/2012-06-30, -1,quarter,3,2012-07-01/2012-09-30, -1,quarter,4,2012-10-01/2012-12-17, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_or_connector.csv b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_or_connector.csv deleted file mode 100644 index 5494163d53..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/MULTIPLE_FEATURES/expected_or_connector.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,resolution,index,date_range,abc-concept or Geschlecht exists -1,complete,,2012-01-01/2012-12-17,1 -1,quarter,1,2012-01-01/2012-03-31,1 -1,quarter,2,2012-04-01/2012-06-30,1 -1,quarter,3,2012-07-01/2012-09-30,1 -1,quarter,4,2012-10-01/2012-12-17,1 -1,year,1,2012-01-01/2012-12-17,1 diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json deleted file mode 100644 index 1228386322..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SECONDARY_ID/ABS_EXPORT_FORM_SECONDARY_ID.test.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ABS-EXPORT-FORM SECONDARY_ID", - "expectedCsv": { - "results": "/tests/form/EXPORT_FORM/ABSOLUT/SECONDARY_ID/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "two_connector" - ], - "type": "CONCEPT", - "label": "explicitly set select", - "tables": [ - { - "id": "two_connector.table1", - "selects": "two_connector.table1.alter_select" - }, - { - "id": "two_connector.table2" - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "dateRange": { - "min": "2012-01-16", - "max": "2012-12-17" - } - } - }, - "concepts": [ - "/shared/two_connector.concept.json", - "/tests/form/shared/abc.concept.json" - ], - "content": { - "secondaryIds": [ - { - "name": "secondary" - }, - { - "name": "ignored" - } - ], - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "previousQueries": [ - { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "ids": [ - "abc-concept.a" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - } - ] - } - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json deleted file mode 100644 index b14651aa12..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SIMPLE/ABS_EXPORT_FORM.test.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ABS-EXPORT-FORM ADD DEFAULT SELECT Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "dateRange": { - "min": "2012-01-16", - "max": "2012-12-17" - } - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json deleted file mode 100644 index f740dbc9a5..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ABSOLUT/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ABS-EXPORT-FORM WITH SELECT SET Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/expected_with_select.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "two_connector" - ], - "type": "CONCEPT", - "label": "explicitly set select", - "tables": [ - { - "id": "two_connector.table1", - "selects": "two_connector.table1.liste_geburtsdatum" - }, - { - "id": "two_connector.table2" - } - ] - } - ], - "timeMode": { - "value": "ABSOLUTE", - "dateRange": { - "min": "2012-01-16", - "max": "2012-12-17" - } - }, - "values": "Some arbitrary data that is frontend/user provided" - }, - "concepts": [ - "/shared/two_connector.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ABSOLUT/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json deleted file mode 100644 index c38ee2c6ec..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/LOGICAL/ABS_EXPORT_FORM.test.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ADD DEFAULT SELECT Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ENTITY_DATE", - "dateAggregationMode": "LOGICAL", - "dateRange": { - "min": "2012-03-01", - "max": "2020-12-17" - } - } - }, - "concepts": [ - "/shared/alter.concept.json", - "/tests/form/shared/abc.concept.json" - ], - "content": { - "secondaryIds": [ - "/tests/form/shared/secondary.sid.json" - ], - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "previousQueries": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "ids": [ - "abc-concept.a" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - }, - { - "type": "CONCEPT", - "ids": [ - "abc-concept.b" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - } - ] - } - } - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json deleted file mode 100644 index 9394af33c0..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/ABS_EXPORT_FORM.test.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ADD DEFAULT SELECT Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/ENTITY_DATE/LOGICAL_WITH_EXCLUDE/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ENTITY_DATE", - "dateAggregationMode": "LOGICAL", - "dateRange": { - "min": "2012-03-01", - "max": "2020-12-17" - } - } - }, - "concepts": [ - "/shared/alter.concept.json", - "/tests/form/shared/abc.concept.json" - ], - "content": { - "secondaryIds": [ - "/tests/form/shared/secondary.sid.json" - ], - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "previousQueries": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "ids": [ - "abc-concept.a" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - }, - { - "type": "CONCEPT", - "excludeFromTimeAggregation": true, - "ids": [ - "abc-concept.b" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - } - ] - } - } - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json deleted file mode 100644 index 3dc269069a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SECONDARY_ID/SECONDARY_ID.test.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ENTITY-DATE-EXPORT-FORM SECONDARY_ID", - "expectedCsv": { - "results": "/tests/form/EXPORT_FORM/ENTITY_DATE/SECONDARY_ID/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "two_connector" - ], - "type": "CONCEPT", - "label": "explicitly set select", - "tables": [ - { - "id": "two_connector.table1", - "selects": "two_connector.table1.alter_select" - }, - { - "id": "two_connector.table2" - } - ] - } - ], - "timeMode": { - "value": "ENTITY_DATE" - } - }, - "concepts": [ - "/shared/two_connector.concept.json", - "/tests/form/shared/abc.concept.json" - ], - "content": { - "secondaryIds": [ - "/tests/form/shared/secondary.sid.json" - ], - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "previousQueries": [ - { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "ids": [ - "abc-concept.a" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - } - ] - } - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json deleted file mode 100644 index 5ae5e1aa0a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM.test.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "ADD DEFAULT SELECT Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter", - "filters": [] - } - ] - } - ], - "timeMode": { - "value": "ENTITY_DATE", - "dateRange": { - "min": "2012-03-01", - "max": "2020-12-17" - } - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json b/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json deleted file mode 100644 index 05ae2d8aec..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/ENTITY_DATE/SIMPLE/ABS_EXPORT_FORM_WITH_SELECT.test.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "WITH SELECT SET Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/expected_with_select.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "two_connector" - ], - "type": "CONCEPT", - "label": "explicitly set select", - "tables": [ - { - "id": "two_connector.table1", - "selects": "two_connector.table1.liste_geburtsdatum" - }, - { - "id": "two_connector.table2" - } - ] - } - ], - "timeMode": { - "value": "ENTITY_DATE", - "dateRange": { - "min": "2012-03-01", - "max": "2020-12-17" - } - } - }, - "concepts": [ - "/shared/two_connector.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/ENTITY_DATE/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/FULL_EXPORT_FORM/FULL_EXPORT_FORM_SECONDARY_ID.test.json b/backend/src/test/resources/EXCLUDED_sql/form/FULL_EXPORT_FORM/FULL_EXPORT_FORM_SECONDARY_ID.test.json deleted file mode 100644 index 0df4f0311b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/FULL_EXPORT_FORM/FULL_EXPORT_FORM_SECONDARY_ID.test.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "FULL_EXPORT_FORM", - "expectedCsv": { - "results": "/tests/sql/form/FULL_EXPORT_FORM/expected.csv" - }, - "form": { - "type": "FULL_EXPORT_FORM", - "dateRange": { - "min": "2012-01-01", - "max": "2012-03-03" - }, - "tables": [ - { - "type": "CONCEPT", - "ids": "abc-concept", - "tables": { - "id": "abc-concept.connector2", - "filters": [ - { - "filter": "abc-concept.connector2.value", - "type": "MULTI_SELECT", - "value": [ - "A" - ] - } - ] - } - }, - { - "type": "CONCEPT", - "ids": "geschlecht", - "tables": { - "id": "geschlecht.geschlecht", - "dateColumn": { - "value": "geschlecht.geschlecht.erster_tag" - }, - "filters": [ - { - "filter": "geschlecht.geschlecht.sum", - "type": "REAL_RANGE", - "value": { - "min": 10 - } - } - ] - } - } - ], - "queryGroup": "00000000-0000-0000-0000-000000000001" - }, - "concepts": [ - "/tests/form/shared/abc.concept.json", - "/shared/geschlecht.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "secondaryIds": [ - { - "name": "secondary" - } - ], - "previousQueries": [ - { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "abc-concept" - ], - "tables": { - "id": "abc-concept.connector" - }, - "type": "CONCEPT" - } - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/FULL_EXPORT_FORM/expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/FULL_EXPORT_FORM/expected.csv deleted file mode 100644 index f87a4f72a1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/FULL_EXPORT_FORM/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates,source,secondary,table column,vers_stamm date_end,vers_stamm geburtsdatum,vers_stamm geschlecht,vers_stamm value -1,{2012-03-01/2012-03-01},table,1,A,,,, -1,{2012-03-02/2012-03-02},table,1,A,,,, -1,{2012-01-01/2012-01-01},vers_stamm,,,2012-12-31,1957-01-01,1,12 diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/DAYS_NEUTRAL/DAYS.test.json b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/DAYS_NEUTRAL/DAYS.test.json deleted file mode 100644 index 7dec9628c2..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/DAYS_NEUTRAL/DAYS.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "REL-EXPORT-FORM Test", - "expectedCsv": { - "results": "tests/sql/form/RELATIVE/DAYS_NEUTRAL/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter" - } - ] - } - ], - "timeMode": { - "value": "RELATIVE", - "indexSelector": "LATEST", - "timeUnit": "DAYS", - "timeCountAfter": 91, - "timeCountBefore": 366, - "indexPlacement": "NEUTRAL" - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/shared/entities.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/RELATIVE/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/DAYS_NEUTRAL/expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/DAYS_NEUTRAL/expected.csv deleted file mode 100644 index db0604dd89..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/DAYS_NEUTRAL/expected.csv +++ /dev/null @@ -1,25 +0,0 @@ -result,resolution,index,event_date,date_range,scope,Alter -1,complete,,2016-12-01,2015-12-01/2016-11-30,feature_date_range, -1,year,-2,2016-12-01,2015-12-01/2015-12-01,feature_date_range, -1,year,-1,2016-12-01,2015-12-02/2016-11-30,feature_date_range, -1,quarter,-5,2016-12-01,2015-12-01/2015-12-06,feature_date_range, -1,quarter,-4,2016-12-01,2015-12-07/2016-03-05,feature_date_range, -1,quarter,-3,2016-12-01,2016-03-06/2016-06-03,feature_date_range, -1,quarter,-2,2016-12-01,2016-06-04/2016-09-01,feature_date_range, -1,quarter,-1,2016-12-01,2016-09-02/2016-11-30,feature_date_range, -1,complete,,2016-12-01,2016-12-02/2017-03-02,outcome_date_range, -1,year,1,2016-12-01,2016-12-02/2017-03-02,outcome_date_range, -1,quarter,1,2016-12-01,2016-12-02/2017-03-01,outcome_date_range, -1,quarter,2,2016-12-01,2017-03-02/2017-03-02,outcome_date_range, -23,complete,,2016-12-01,2015-12-01/2016-11-30,feature_date_range, -23,year,-2,2016-12-01,2015-12-01/2015-12-01,feature_date_range, -23,year,-1,2016-12-01,2015-12-02/2016-11-30,feature_date_range, -23,quarter,-5,2016-12-01,2015-12-01/2015-12-06,feature_date_range, -23,quarter,-4,2016-12-01,2015-12-07/2016-03-05,feature_date_range, -23,quarter,-3,2016-12-01,2016-03-06/2016-06-03,feature_date_range, -23,quarter,-2,2016-12-01,2016-06-04/2016-09-01,feature_date_range, -23,quarter,-1,2016-12-01,2016-09-02/2016-11-30,feature_date_range, -23,complete,,2016-12-01,2016-12-02/2017-03-02,outcome_date_range, -23,year,1,2016-12-01,2016-12-02/2017-03-02,outcome_date_range, -23,quarter,1,2016-12-01,2016-12-02/2017-03-01,outcome_date_range, -23,quarter,2,2016-12-01,2017-03-02/2017-03-02,outcome_date_range, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_AFTER/REL_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_AFTER/REL_EXPORT_FORM.test.json deleted file mode 100644 index bbecd2ee47..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_AFTER/REL_EXPORT_FORM.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "REL-EXPORT-FORM Test", - "expectedCsv": { - "results": "tests/sql/form/RELATIVE/QUARTERS_AFTER/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter" - } - ] - } - ], - "timeMode": { - "value": "RELATIVE", - "indexSelector": "EARLIEST", - "timeUnit": "QUARTERS", - "timeCountAfter": 2, - "timeCountBefore": 6, - "indexPlacement": "AFTER" - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/shared/entities.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/RELATIVE/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_AFTER/expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_AFTER/expected.csv deleted file mode 100644 index 8c5c569e1b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_AFTER/expected.csv +++ /dev/null @@ -1,27 +0,0 @@ -result,resolution,index,event_date,date_range,scope,Alter -1,complete,,2012-06-01,2010-10-01/2012-03-31,feature_date_range,55 -1,year,-2,2012-06-01,2010-10-01/2011-03-31,feature_date_range, -1,year,-1,2012-06-01,2011-04-01/2012-03-31,feature_date_range,55 -1,quarter,-6,2012-06-01,2010-10-01/2010-12-31,feature_date_range, -1,quarter,-5,2012-06-01,2011-01-01/2011-03-31,feature_date_range, -1,quarter,-4,2012-06-01,2011-04-01/2011-06-30,feature_date_range, -1,quarter,-3,2012-06-01,2011-07-01/2011-09-30,feature_date_range, -1,quarter,-2,2012-06-01,2011-10-01/2011-12-31,feature_date_range, -1,quarter,-1,2012-06-01,2012-01-01/2012-03-31,feature_date_range,55 -1,complete,,2012-06-01,2012-04-01/2012-09-30,outcome_date_range,55 -1,year,1,2012-06-01,2012-04-01/2012-09-30,outcome_date_range,55 -1,quarter,1,2012-06-01,2012-04-01/2012-06-30,outcome_date_range,55 -1,quarter,2,2012-06-01,2012-07-01/2012-09-30,outcome_date_range,55 -23,complete,,2012-06-01,2010-10-01/2012-03-31,feature_date_range, -23,year,-2,2012-06-01,2010-10-01/2011-03-31,feature_date_range, -23,year,-1,2012-06-01,2011-04-01/2012-03-31,feature_date_range, -23,quarter,-6,2012-06-01,2010-10-01/2010-12-31,feature_date_range, -23,quarter,-5,2012-06-01,2011-01-01/2011-03-31,feature_date_range, -23,quarter,-4,2012-06-01,2011-04-01/2011-06-30,feature_date_range, -23,quarter,-3,2012-06-01,2011-07-01/2011-09-30,feature_date_range, -23,quarter,-2,2012-06-01,2011-10-01/2011-12-31,feature_date_range, -23,quarter,-1,2012-06-01,2012-01-01/2012-03-31,feature_date_range, -23,complete,,2012-06-01,2012-04-01/2012-09-30,outcome_date_range, -23,year,1,2012-06-01,2012-04-01/2012-09-30,outcome_date_range, -23,quarter,1,2012-06-01,2012-04-01/2012-06-30,outcome_date_range, -23,quarter,2,2012-06-01,2012-07-01/2012-09-30,outcome_date_range, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_NEUTRAL/REL_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_NEUTRAL/REL_EXPORT_FORM.test.json deleted file mode 100644 index 23978ec5c8..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_NEUTRAL/REL_EXPORT_FORM.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "REL-EXPORT-FORM Test", - "expectedCsv": { - "results": "tests/sql/form/RELATIVE/QUARTERS_NEUTRAL/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter" - } - ] - } - ], - "timeMode": { - "value": "RELATIVE", - "indexSelector": "LATEST", - "timeUnit": "QUARTERS", - "timeCountAfter": 2, - "timeCountBefore": 6, - "indexPlacement": "NEUTRAL" - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/shared/entities.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/RELATIVE/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_NEUTRAL/expected.csv b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_NEUTRAL/expected.csv deleted file mode 100644 index 26b644f303..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/QUARTERS_NEUTRAL/expected.csv +++ /dev/null @@ -1,27 +0,0 @@ -result,resolution,index,event_date,date_range,scope,Alter -1,complete,,2016-12-01,2015-04-01/2016-09-30,feature_date_range, -1,year,-2,2016-12-01,2015-04-01/2015-09-30,feature_date_range, -1,year,-1,2016-12-01,2015-10-01/2016-09-30,feature_date_range, -1,quarter,-6,2016-12-01,2015-04-01/2015-06-30,feature_date_range, -1,quarter,-5,2016-12-01,2015-07-01/2015-09-30,feature_date_range, -1,quarter,-4,2016-12-01,2015-10-01/2015-12-31,feature_date_range, -1,quarter,-3,2016-12-01,2016-01-01/2016-03-31,feature_date_range, -1,quarter,-2,2016-12-01,2016-04-01/2016-06-30,feature_date_range, -1,quarter,-1,2016-12-01,2016-07-01/2016-09-30,feature_date_range, -1,complete,,2016-12-01,2017-01-01/2017-06-30,outcome_date_range, -1,year,1,2016-12-01,2017-01-01/2017-06-30,outcome_date_range, -1,quarter,1,2016-12-01,2017-01-01/2017-03-31,outcome_date_range, -1,quarter,2,2016-12-01,2017-04-01/2017-06-30,outcome_date_range, -23,complete,,2016-12-01,2015-04-01/2016-09-30,feature_date_range, -23,year,-2,2016-12-01,2015-04-01/2015-09-30,feature_date_range, -23,year,-1,2016-12-01,2015-10-01/2016-09-30,feature_date_range, -23,quarter,-6,2016-12-01,2015-04-01/2015-06-30,feature_date_range, -23,quarter,-5,2016-12-01,2015-07-01/2015-09-30,feature_date_range, -23,quarter,-4,2016-12-01,2015-10-01/2015-12-31,feature_date_range, -23,quarter,-3,2016-12-01,2016-01-01/2016-03-31,feature_date_range, -23,quarter,-2,2016-12-01,2016-04-01/2016-06-30,feature_date_range, -23,quarter,-1,2016-12-01,2016-07-01/2016-09-30,feature_date_range, -23,complete,,2016-12-01,2017-01-01/2017-06-30,outcome_date_range, -23,year,1,2016-12-01,2017-01-01/2017-06-30,outcome_date_range, -23,quarter,1,2016-12-01,2017-01-01/2017-03-31,outcome_date_range, -23,quarter,2,2016-12-01,2017-04-01/2017-06-30,outcome_date_range, diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json deleted file mode 100644 index 729eaf19ae..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/SECONDARY_ID/SECONDARY_ID.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "REL-EXPORT-FORM SECONDARY_ID", - "expectedCsv": { - "results": "/tests/form/EXPORT_FORM/RELATIVE/SECONDARY_ID/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "two_connector" - ], - "type": "CONCEPT", - "label": "explicitly set select", - "tables": [ - { - "id": "two_connector.table1", - "selects": "two_connector.table1.alter_select" - }, - { - "id": "two_connector.table2" - } - ] - } - ], - "timeMode": { - "value": "RELATIVE", - "indexSelector": "EARLIEST", - "timeUnit": "QUARTERS", - "indexPlacement": "BEFORE", - "timeCountBefore": 4 - } - }, - "concepts": [ - "/shared/two_connector.concept.json", - "/tests/form/shared/abc.concept.json" - ], - "content": { - "secondaryIds": [ - "/tests/form/shared/secondary.sid.json" - ], - "tables": [ - "/shared/vers_stamm.table.json", - "/tests/form/shared/abc.table.json" - ], - "previousQueries": [ - { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "ids": [ - "abc-concept.a" - ], - "tables": [ - { - "id": "abc-concept.connector" - } - ] - } - ] - } - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json b/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json deleted file mode 100644 index 10b50e2328..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/form/RELATIVE/SIMPLE/REL_EXPORT_FORM.test.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "FORM_TEST", - "label": "REL-EXPORT-FORM Test", - "expectedCsv": { - "results": "tests/form/EXPORT_FORM/RELATIVE/SIMPLE/expected.csv" - }, - "form": { - "type": "EXPORT_FORM", - "queryGroup": "00000000-0000-0000-0000-000000000001", - "resolution": "QUARTERS", - "alsoCreateCoarserSubdivisions": true, - "features": [ - { - "ids": [ - "alter" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "alter.alter" - } - ] - } - ], - "timeMode": { - "value": "RELATIVE", - "indexSelector": "EARLIEST", - "timeUnit": "QUARTERS", - "timeCountAfter": 2, - "timeCountBefore": 6, - "indexPlacement": "BEFORE" - } - }, - "concepts": [ - "/shared/alter.concept.json" - ], - "content": { - "tables": [ - "/shared/vers_stamm.table.json", - "/shared/entities.table.json" - ], - "previousQueryResults": [ - "tests/form/EXPORT_FORM/RELATIVE/SIMPLE/query_results_1.csv" - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/au-content.csv b/backend/src/test/resources/EXCLUDED_sql/multiple_tables/au-content.csv deleted file mode 100644 index d65f36013f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/au-content.csv +++ /dev/null @@ -1,45 +0,0 @@ -pid,icd_code,au_beginn -26,"F220",2012-06-01 -8,"F200",2012-06-01 -16,"F300",2012-06-01 -25,"F200",2012-06-01 -21,"F200",2012-06-01 -11,"F300",2012-06-01 -6,"F205",2017-03-31 -17,"F206",2017-06-01 -5,"F200",2012-09-01 -9,"F220",2012-06-01 -7,"F206",2017-06-01 - -23,"F200",2012-06-01 - -19,"F200",2012-06-01 -22,"F205",2012-06-01 -20,"F204",2012-06-01 - -12,"F302",2017-06-01 -10,"F21",2017-06-01 -16,"F301",2012-09-01 -21,"F200",2012-06-01 - -6,"F205",2012-09-01 -14,"F309",2012-09-01 -1,"F201",2012-06-01 -15,"F220",2017-06-01 -14,"F308",2012-06-01 -24,"F200",2012-06-01 -13,"F300",2012-06-01 -23,"F206",2012-06-01 -7,"F200",2017-09-01 -4,"F204",2017-06-01 -8,"F200",2012-09-01 -15,"F309",2017-09-01 -22,"F205",2012-06-01 -5,"F200",2017-03-31 -2,"F200",2017-06-01 -13,"F308",2012-06-01 -18,"F200",2012-06-01 -27,"F21",2012-06-01 -24,"F21",2012-06-01 -10,"F21",2017-06-01 -3,"F200",2017-03-31 diff --git a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/expected.csv b/backend/src/test/resources/EXCLUDED_sql/multiple_tables/expected.csv deleted file mode 100644 index 43fc19b922..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates -2,{2017-06-01/2017-06-01} -3,{2017-03-31/2017-03-31} -4,"{2017-03-31/2017-03-31,2017-06-01/2017-06-01}" -5,{2017-03-31/2017-03-31} -6,"{2017-03-31/2017-03-31,2017-05-31/2017-05-31}" -7,"{2017-03-31/2017-03-31,2017-05-15/2017-05-15,2017-06-01/2017-06-01,2017-09-01/2017-09-01}" -17,{2017-06-01/2017-06-01} diff --git a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/kh-content.csv b/backend/src/test/resources/EXCLUDED_sql/multiple_tables/kh-content.csv deleted file mode 100644 index 5d16a623a5..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/kh-content.csv +++ /dev/null @@ -1,38 +0,0 @@ -pid,icd_code,entlassungsdatum -1,"F201",2012-03-31 -2,"F200",2017-06-01 -3,"F200",2017-03-31 -4,"F204",2017-03-31 -5,"F200",2012-03-31 -5,"F200",2017-03-31 -6,"F205",2017-03-31 -6,"F205",2017-05-31 -7,"F200",2017-05-15 -7,"F206",2017-03-31 -8,"F200",2012-05-31 -8,"F200",2012-03-31 -9,"F220",2012-03-31 -10,"F21",2012-03-31 -11,"F300",2012-03-31 -12,"F302",2012-03-31 -13,"F308",2012-03-31 -13,"F300",2017-03-31 -14,"F308",2017-05-31 -14,"F309",2017-03-31 -15,"F220",2017-05-31 -15,"F309",2017-03-31 -16,"F300",2012-03-31 -16,"F301",2012-05-31 -17,"F201",2017-06-01 -18,"F200",2012-05-31 -19,"F200",2012-05-31 -20,"F204",2012-05-31 -21,"F200",2012-05-31 -21,"F200",2012-05-31 -22,"F205",2012-05-31 -22,"F205",2012-05-31 -23,"F206",2012-05-31 -23,"F200",2012-05-31 -25,"F200",2012-05-31 -26,"F220",2012-05-31 -27,"F21",2012-05-31 diff --git a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/multiple_tables.test.json b/backend/src/test/resources/EXCLUDED_sql/multiple_tables/multiple_tables.test.json deleted file mode 100644 index f1d660abfc..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/multiple_tables/multiple_tables.test.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "MULTIPLE_TABLES_ICD_QUERY test", - "expectedCsv": "tests/sql/multiple_tables/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2017-01-01", - "max": "2017-12-31" - }, - "child": { - "type": "CONCEPT", - "ids": [ - "icd.f00$2df99.f20$2df29.f20" - ], - "tables": [ - { - "id": "icd.kh_diagnose_icd_code", - "filters": [] - }, - { - "id": "icd.au_fall", - "filters": [] - } - ] - } - } - }, - "concepts": [ - { - "name": "icd", - "type": "TREE", - "connectors": [ - { - "name": "kh_diagnose_icd_code", - "column": "kh_diagnose.icd_code", - "validityDates": [ - { - "name": "entlassung", - "column": "kh_diagnose.entlassungsdatum" - } - ], - "filters": [] - }, - { - "name": "au_fall", - "column": "au_diagnose.icd_code", - "validityDates": [ - { - "name": "begin", - "column": "au_diagnose.au_beginn" - } - ], - "filters": [] - } - ], - "children": [ - { - "name": "f00-f99", - "condition": { - "type": "PREFIX_RANGE", - "min": "F00", - "max": "F99" - }, - "children": [ - { - "name": "f20-f29", - "condition": { - "type": "PREFIX_RANGE", - "min": "F20", - "max": "F29" - }, - "children": [ - { - "name": "f20", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F20" - ] - }, - "children": [] - } - ] - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/multiple_tables/kh-content.csv", - "name": "kh_diagnose", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "icd_code", - "type": "STRING" - }, - { - "name": "entlassungsdatum", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/multiple_tables/au-content.csv", - "name": "au_diagnose", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "icd_code", - "type": "STRING" - }, - { - "name": "au_beginn", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/nested/content1.csv b/backend/src/test/resources/EXCLUDED_sql/nested/content1.csv deleted file mode 100644 index 4e730ba3c4..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/nested/content1.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -2,1.01,2014-06-30,2015-06-30 -1,1,2015-02-03,2015-06-30 -1,0.5,2014-06-30,2015-06-30 -3,0.5,2014-04-30,2014-06-30 -4,1,2014-06-30,2015-06-30 -5,0.5,2014-04-30,2014-06-30 -5,1,2014-06-30,2015-06-30 -6,1,2014-04-30,2014-06-30 -7,0,2014-02-05,2014-02-20 -8,1,2014-04-30,2014-06-30 -7,-1,2014-06-30,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/nested/content2.csv b/backend/src/test/resources/EXCLUDED_sql/nested/content2.csv deleted file mode 100644 index dc012de238..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/nested/content2.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum,geschlecht,language -1,2012-01-01,"f","de" -2,2010-07-15,"m","fr" -3,2013-11-10,"f","en" -4,2012-11-11,"m","" -5,2007-11-11,"","" -6,2012-11-11,"","de" -7,2012-11-11,"mf","de" -8,2012-11-11,"fm","fr" diff --git a/backend/src/test/resources/EXCLUDED_sql/nested/expected.csv b/backend/src/test/resources/EXCLUDED_sql/nested/expected.csv deleted file mode 100644 index 5a2858a4c3..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/nested/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates,vs value_select,Geschlecht SELECT geschlecht,Language SELECT language -1,{2012-01-01/2012-01-01},,f,de -7,"{2014-02-05/2014-02-20,2014-06-30/2015-06-30}",0.0,, diff --git a/backend/src/test/resources/EXCLUDED_sql/nested/nested.test.json b/backend/src/test/resources/EXCLUDED_sql/nested/nested.test.json deleted file mode 100644 index 0f69ecbbb4..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/nested/nested.test.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "label": "Query with nested AND, OR", - "expectedCsv": "tests/sql/nested/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "OR", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value_filter", - "type": "REAL_RANGE", - "value": { - "min": -1, - "max": 0 - } - } - ], - "selects": "number.number_connector.value_select" - } - ] - }, - { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ], - "selects": [ - "geschlecht_select.geschlecht_connector.geschlecht" - ] - } - ] - }, - { - "ids": [ - "language_select" - ], - "type": "CONCEPT", - "label": "Language SELECT", - "tables": [ - { - "id": "language_select.language_connector", - "filters": [ - { - "filter": "language_select.language_connector.language", - "type": "BIG_MULTI_SELECT", - "value": [ - "de" - ] - } - ], - "selects": [ - "language_select.language_connector.language" - ] - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value_filter", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - }, - "selects": { - "name": "value_select", - "column": "table1.value", - "type": "FIRST" - } - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "column": "table2.datum" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - }, - "selects": { - "name": "geschlecht", - "column": "table2.geschlecht", - "type": "FIRST" - } - } - ] - }, - { - "label": "language_select", - "type": "TREE", - "connectors": [ - { - "label": "language_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "column": "table2.datum" - }, - "filters": { - "label": "language", - "description": "Sprache", - "column": "table2.language", - "type": "SELECT" - }, - "selects": { - "name": "language", - "column": "table2.language", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/nested/content1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/nested/content2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - }, - { - "name": "language", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/not/content.csv b/backend/src/test/resources/EXCLUDED_sql/not/content.csv deleted file mode 100644 index 8dab40f969..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/not/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum,geschlecht -1,2012-01-01,"f" -2,2010-07-15,"m" -3,2013-11-10,"f" -4,2012-11-11,"m" -5,2007-11-11, -6,2012-11-11, -7,2012-11-11,"mf" -8,2012-11-11,"fm" diff --git a/backend/src/test/resources/EXCLUDED_sql/not/expected.csv b/backend/src/test/resources/EXCLUDED_sql/not/expected.csv deleted file mode 100644 index 4c60b15bec..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/not/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -2,{} -4,{} -5,{} -6,{} -7,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/not/not.test.json b/backend/src/test/resources/EXCLUDED_sql/not/not.test.json deleted file mode 100644 index 6c4dd49ba1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/not/not.test.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "label": "Simple Negation Query", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/not/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "NEGATION", - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/not/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/content.csv b/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/content.csv deleted file mode 100644 index 8dab40f969..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum,geschlecht -1,2012-01-01,"f" -2,2010-07-15,"m" -3,2013-11-10,"f" -4,2012-11-11,"m" -5,2007-11-11, -6,2012-11-11, -7,2012-11-11,"mf" -8,2012-11-11,"fm" diff --git a/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/expected.csv b/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/expected.csv deleted file mode 100644 index 4c60b15bec..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/expected.csv +++ /dev/null @@ -1,7 +0,0 @@ -result,dates -2,{} -4,{} -5,{} -6,{} -7,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/not.test.json b/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/not.test.json deleted file mode 100644 index d8d0a06e7c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/not/with_sibling/not.test.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "label": "Simple negation query where NEGATION is not the first node to convert", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/not/with_sibling/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "OR", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "m" - ] - } - ] - } - ] - }, - { - "type": "NEGATION", - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/not/with_sibling/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/or/different_concept/content_1.csv deleted file mode 100644 index 1e967d5638..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/content_1.csv +++ /dev/null @@ -1,14 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -2,1.01,2014-06-30,2015-06-30 -1,1,2015-02-03,2015-06-30 -1,0.5,2014-06-30,2015-06-30 -3,0.5,2014-04-30,2014-06-30 -4,1,2014-06-30,2015-06-30 -5,0.5,2014-04-30,2014-06-30 -5,1,2014-06-30,2015-06-30 -6,1,2014-04-30,2014-06-30 -7,1,2014-02-05,2015-02-20 -7,-1,2016-02-05,2016-02-05 -8,1,2014-04-30,2014-06-30 -7,-1,2015-01-15,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/or/different_concept/content_2.csv deleted file mode 100644 index d6987f7996..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/content_2.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum,geschlecht,language -1,2012-01-01,"f","de" -2,2010-07-15,"m","fr" -3,2013-11-10,"f","en" -4,2012-11-11,"m","" -5,2007-11-11,"","" -6,2012-11-11,"","de" -7,2015-07-01,"mf","de" -8,2012-11-11,"fm","fr" diff --git a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/expected.csv b/backend/src/test/resources/EXCLUDED_sql/or/different_concept/expected.csv deleted file mode 100644 index 877c890a4d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates,vs value,Geschlecht SELECT geschlecht,Language SELECT language -7,"{2015-01-15/2015-07-01,2016-02-05/2016-02-05}",-1.0,mf, -8,{2012-11-11/2012-11-11},,,fr -2,{2010-07-15/2010-07-15},,,fr diff --git a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/or.test.json b/backend/src/test/resources/EXCLUDED_sql/or/different_concept/or.test.json deleted file mode 100644 index f0e2a3dc36..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/different_concept/or.test.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "label": "Simple OR query for 3 different concepts", - "expectedCsv": "tests/sql/or/different_concept/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "OR", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": -1, - "max": 0 - } - } - ], - "selects": [ - "number.number_connector.value" - ] - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "mf" - ] - } - ], - "selects": [ - "geschlecht_select.geschlecht_connector.geschlecht" - ] - } - ] - }, - { - "ids": [ - "language_select" - ], - "type": "CONCEPT", - "label": "Language SELECT", - "tables": [ - { - "id": "language_select.language_connector", - "filters": [ - { - "filter": "language_select.language_connector.language", - "type": "BIG_MULTI_SELECT", - "value": [ - "fr" - ] - } - ], - "selects": [ - "language_select.language_connector.language" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - }, - "selects": { - "name": "value", - "column": "table1.value", - "type": "FIRST" - } - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "column": "table2.datum" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - }, - "selects": { - "name": "geschlecht", - "column": "table2.geschlecht", - "type": "FIRST" - } - } - ] - }, - { - "label": "language_select", - "type": "TREE", - "connectors": [ - { - "label": "language_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "column": "table2.datum" - }, - "filters": { - "label": "language", - "description": "Sprache", - "column": "table2.language", - "type": "SELECT" - }, - "selects": { - "name": "language", - "column": "table2.language", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/or/different_concept/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/or/different_concept/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - }, - { - "name": "language", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/or/same_concept/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/or/same_concept/content_1.csv deleted file mode 100644 index 5ceffe16ca..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/same_concept/content_1.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value -1,1 -2,1.01 -1,1 -1,0.5 -3,0.5 -4,1 -5,0.5 -5,1 -6,1 -7,1 -8,1 -7,-1 diff --git a/backend/src/test/resources/EXCLUDED_sql/or/same_concept/expected.csv b/backend/src/test/resources/EXCLUDED_sql/or/same_concept/expected.csv deleted file mode 100644 index fb42141b5d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/same_concept/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates -7,{} -2,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/or/same_concept/or_same_concept.test.json b/backend/src/test/resources/EXCLUDED_sql/or/same_concept/or_same_concept.test.json deleted file mode 100644 index b711ca5862..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/or/same_concept/or_same_concept.test.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "label": "Simple OR query for same concept", - "expectedCsv": "tests/sql/or/same_concept/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "OR", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": -1, - "max": 0 - } - } - ] - } - ] - }, - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 1.0001, - "max": 1.5 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/or/same_concept/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/SECONDARY_IDS.test.json b/backend/src/test/resources/EXCLUDED_sql/secondary_id/SECONDARY_IDS.test.json deleted file mode 100644 index bbdc441bd2..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/SECONDARY_IDS.test.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "SECONDARY_ID Test", - "expectedCsv": "tests/sql/secondary_id/expected.csv", - "query": { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "root": { - "ids": [ - "number" - ], - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 1 - } - } - ] - }, - { - "id": "number.number_connector2", - "filters": [ - { - "filter": "number.number_connector2.value", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 1 - } - } - ] - } - ] - } - }, - "concepts": [ - { - "name": "number", - "type": "TREE", - "connectors": [ - { - "name": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - }, - { - "name": "number_connector2", - "table": "table2", - "validityDates": { - "label": "datum", - "startColumn": "table2.datum_start", - "endColumn": "table2.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table2.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "secondaryIds": [ - { - "name": "secondary" - } - ], - "tables": [ - { - "csv": "tests/sql/secondary_id/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING", - "secondaryId": "secondary" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/secondary_id/content2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING", - "secondaryId": "secondary" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/content.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/content.csv deleted file mode 100644 index 2b33b32208..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/content.csv +++ /dev/null @@ -1,7 +0,0 @@ -pid,sid,value,datum_start,datum_end -a,f_a1,1,2014-06-30,2015-06-30 -a,f_a1,1,2016-06-30,2016-06-30 -a,f_a2,1,2014-06-30,2015-06-30 -a,,1,2010-06-30,2010-06-30 -a,f_a3,1.01,2014-06-30,2015-06-30 -b,f_b1,1,2015-02-03,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/content2.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/content2.csv deleted file mode 100644 index fb989445e9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/content2.csv +++ /dev/null @@ -1,7 +0,0 @@ -pid,sid,value,datum_start,datum_end -a,f_a4,1,2024-06-30,2025-06-30 -a,f_a4,1,2026-06-30,2026-06-30 -a,f_a4,1,2024-06-30,2025-06-30 -a,,13,2020-06-30,2020-06-30 -a,f_a5,1.01,2024-06-30,2025-06-30 -b,f_b6,1,2025-02-03,2025-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/SECONDARY_IDS.test.json b/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/SECONDARY_IDS.test.json deleted file mode 100644 index 87ccc5a412..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/SECONDARY_IDS.test.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "SECONDARY_ID Test", - "expectedCsv": "tests/sql/secondary_id/date_mode_logical/expected.csv", - "query": { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "dateAggregationMode": "LOGICAL", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 1 - } - } - ] - } - ] - }, - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "label": "vs", - "tables": [ - { - "id": "number.number_connector2", - "filters": [ - { - "filter": "number.number_connector2.value", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 1 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - }, - { - "label": "number_connector2", - "table": "table12", - "validityDates": { - "label": "datum", - "startColumn": "table12.datum_start", - "endColumn": "table12.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table12.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "secondaryIds": [ - { - "name": "secondary" - }, - { - "name": "ignored" - } - ], - "tables": [ - { - "csv": "tests/sql/secondary_id/date_mode_logical/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING", - "secondaryId": "secondary" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/secondary_id/date_mode_logical/content2.csv", - "name": "table12", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING", - "secondaryId": "secondary" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/content.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/content.csv deleted file mode 100644 index 3081ae37de..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/content.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,sid,value,datum_start,datum_end -a,f_a1,1,2014-06-30,2015-06-30 -a,f_a1,1,2016-06-30,2027-06-30 -a,f_a2,1,2014-06-30,2015-06-30 -a,,1,2010-06-30,2010-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/content2.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/content2.csv deleted file mode 100644 index 670e9fc815..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/content2.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,sid,value,datum_start,datum_end -a,f_a1,1,2024-06-30,2025-06-30 -a,f_a1,1,2026-06-30,2026-06-30 -a,f_a2,1,2024-06-30,2025-06-30 -a,,13,2020-06-30,2020-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/expected.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/expected.csv deleted file mode 100644 index 2834b221b9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/date_mode_logical/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,secondary,dates -a,f_a1,"{2024-06-30/2025-06-30,2026-06-30/2026-06-30}" -a,f_a2,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/excluded/SECONDARY_IDS_EXCLUDED.test.json b/backend/src/test/resources/EXCLUDED_sql/secondary_id/excluded/SECONDARY_IDS_EXCLUDED.test.json deleted file mode 100644 index f9880afcae..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/excluded/SECONDARY_IDS_EXCLUDED.test.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "SECONDARY_ID_EXCLUDED Test", - "expectedCsv": "tests/query/SECONDARY_ID_EXCLUDED/expected.csv", - "query": { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "label": "vs", - "excludeFromSecondaryId": false, - "tables": [ - { - "id": "concept.connector1" - } - ] - }, - { - "ids": [ - "concept" - ], - "excludeFromSecondaryId": true, - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector1", - "filters": [ - { - "filter": "concept.connector1.value", - "type": "INTEGER_RANGE", - "value": { - "min": 2 - } - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "name": "connector1", - "table": "table1", - "validityDates": { - "name": "datum", - "column": "table1.datum" - }, - "filters": { - "name": "value", - "column": "table1.value", - "type": "COUNT" - } - } - ] - } - ], - "content": { - "secondaryIds": [ - { - "name": "secondary" - } - ], - "tables": [ - { - "csv": "tests/query/SECONDARY_ID_EXCLUDED/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING", - "secondaryId": "secondary" - }, - { - "name": "value", - "type": "STRING" - }, - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/expected.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/expected.csv deleted file mode 100644 index f325999afe..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,secondary,dates -a,f_a1,"{2014-06-30/2015-06-30,2016-06-30/2016-06-30}" -a,f_a2,{2014-06-30/2015-06-30} -b,f_b1,{2015-02-03/2015-06-30} -a,f_a4,"{2024-06-30/2025-06-30,2026-06-30/2026-06-30}" -b,f_b6,{2025-02-03/2025-06-30} \ No newline at end of file diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/SECONDARY_IDS_MIXED.test.json b/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/SECONDARY_IDS_MIXED.test.json deleted file mode 100644 index 28f013fb3a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/SECONDARY_IDS_MIXED.test.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "SECONDARY_ID_MIXED Test", - "expectedCsv": "tests/sql/secondary_id/mixed/expected.csv", - "query": { - "type": "SECONDARY_ID_QUERY", - "secondaryId": "secondary", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "excludeFromSecondaryId": false, - "tables": [ - { - "id": "concept.connector1", - "filters": [ - { - "filter": "concept.connector1.filter", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 1 - } - } - ] - }, - { - "id": "concept.connector2", - "filters": [ - { - "filter": "concept.connector2.filter", - "type": "REAL_RANGE", - "value": { - "min": 1, - "max": 1 - } - } - ] - } - ] - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "label": "connector1", - "table": "table", - "validityDates": { - "label": "datum", - "startColumn": "table.datum_start", - "endColumn": "table.datum_end" - }, - "filters": { - "label": "filter", - "description": "xy", - "column": "table.value", - "type": "NUMBER" - } - }, - { - "label": "connector2", - "table": "table2", - "validityDates": { - "label": "datum", - "startColumn": "table2.datum_start", - "endColumn": "table2.datum_end" - }, - "filters": { - "label": "filter", - "description": "xy", - "column": "table2.value", - "type": "NUMBER" - } - } - ] - } - ], - "content": { - "secondaryIds": [ - { - "name": "secondary" - }, - { - "name": "ignored" - } - ], - "tables": [ - { - "csv": "tests/sql/secondary_id/mixed/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING", - "secondaryId": "secondary" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "ignored", - "type": "STRING", - "secondaryId": "ignored" - } - ] - }, - { - "csv": "tests/sql/secondary_id/mixed/content2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "sid", - "type": "STRING" - }, - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/content.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/content.csv deleted file mode 100644 index 62918f9a9b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/content.csv +++ /dev/null @@ -1,7 +0,0 @@ -pid,sid,value,datum_start,datum_end,ignored -a,f_a1,1,2014-06-30,2015-06-30,"a" -a,f_a1,1,2016-06-30,2016-06-30,"a" -a,f_a2,1,2014-06-30,2015-06-30,"a" -a,,1,2010-06-30,2010-06-30,"a" -a,f_a3,1.01,2014-06-30,2015-06-30,"a" -b,f_b1,1,2015-02-03,2015-06-30,"a" diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/content2.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/content2.csv deleted file mode 100644 index fb989445e9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/content2.csv +++ /dev/null @@ -1,7 +0,0 @@ -pid,sid,value,datum_start,datum_end -a,f_a4,1,2024-06-30,2025-06-30 -a,f_a4,1,2026-06-30,2026-06-30 -a,f_a4,1,2024-06-30,2025-06-30 -a,,13,2020-06-30,2020-06-30 -a,f_a5,1.01,2024-06-30,2025-06-30 -b,f_b6,1,2025-02-03,2025-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/expected.csv b/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/expected.csv deleted file mode 100644 index c0ecc10b2c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/secondary_id/mixed/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,secondary,dates -a,f_a2,"{2014-06-30/2015-06-30,2024-06-30/2025-06-30,2026-06-30/2026-06-30}" -a,f_a1,"{2014-06-30/2015-06-30,2016-06-30/2016-06-30,2024-06-30/2025-06-30,2026-06-30/2026-06-30}" -b,f_b1,"{2015-02-03/2015-06-30,2025-02-03/2025-06-30}" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/content.csv deleted file mode 100644 index 88a503b22b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,datum,test_column -1,2012-01-01,"A1" -1,2012-01-01,"A1" -1,2012-01-02,"B2" -1,2012-01-02,"B2" -2,2010-07-15,"B2" -3,2013-11-10,"A1" -4,2012-11-11,"B2" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/content2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/content2.csv deleted file mode 100644 index 44d8d7121e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/content2.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,datum,test_column -1,2012-01-01,"B2" -1,2012-01-02,"A1" -2,2010-07-15,"B2" -3,2013-11-10,"A1" -4,2012-11-11,"B2" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/expected.csv deleted file mode 100644 index 320a84c64c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,tree select -1,{2012-01-01/2012-01-02},"{A1,B2}" -2,{2010-07-15/2010-07-15},{B2} -3,{2013-11-10/2013-11-10},{A1} -4,{2012-11-11/2012-11-11},{B2} \ No newline at end of file diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/single_connector.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/single_connector.test.json deleted file mode 100644 index dd9193c671..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/single_connector.test.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "CONCEPT_VALUES Test with a single connector", - "expectedCsv": "tests/sql/selects/concept_values/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "selects": [ - "tree.select" - ], - "ids": [ - "tree" - ], - "tables": [ - { - "id": "tree.test_column" - } - ] - } - }, - "concepts": [ - { - "label": "tree", - "type": "TREE", - "selects": [ - { - "type": "CONCEPT_VALUES", - "name": "select", - "asIds": false - } - ], - "connectors": [ - { - "name": "test_column", - "column": "table.test_column", - "validityDates": { - "label": "datum", - "column": "table.datum" - } - }, - { - "label": "tree_label2", - "name": "test_column2", - "column": "table2.test_column", - "validityDates": { - "label": "datum", - "column": "table2.datum" - } - } - ], - "children": [ - { - "label": "test_child1", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" - }, - "children": [] - }, - { - "label": "test_child2", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" - }, - "children": [] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/concept_values/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - }, - { - "csv": "tests/sql/selects/concept_values/content2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/two_connectors.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/two_connectors.test.json deleted file mode 100644 index 746ca1563f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/concept_values/two_connectors.test.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "CONCEPT_VALUES Test with 2 connectors", - "expectedCsv": "tests/sql/selects/concept_values/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "selects": [ - "tree.select" - ], - "ids": [ - "tree" - ], - "tables": [ - { - "id": "tree.test_column" - }, - { - "id": "tree.test_column2" - } - ] - } - }, - "concepts": [ - { - "label": "tree", - "type": "TREE", - "selects": [ - { - "type": "CONCEPT_VALUES", - "name": "select", - "asIds": false - } - ], - "connectors": [ - { - "name": "test_column", - "column": "table.test_column", - "validityDates": { - "label": "datum", - "column": "table.datum" - } - }, - { - "label": "tree_label2", - "name": "test_column2", - "column": "table2.test_column", - "validityDates": { - "label": "datum", - "column": "table2.datum" - } - } - ], - "children": [ - { - "label": "test_child1", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" - }, - "children": [] - }, - { - "label": "test_child2", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" - }, - "children": [] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/concept_values/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - }, - { - "csv": "tests/sql/selects/concept_values/content2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count/content.csv deleted file mode 100644 index c7f2a0b196..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,value -1,0.9 -2, -2,0.1 -2,0.3 -3,0.1 -3,1.0 -4,1.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count/count.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/count/count.test.json deleted file mode 100644 index 9ad2ed5532..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count/count.test.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "label": "COUNT select", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/count/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "selects": [ - "count.count_connector.count_select" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "selects": { - "type": "COUNT", - "name": "count_select", - "column": "table1.value" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/count/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count/expected.csv deleted file mode 100644 index 10413e0963..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,count count_select -1,{},1 -2,{},2 -3,{},2 -4,{},1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/content.csv deleted file mode 100644 index 4d8d6e602f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/content.csv +++ /dev/null @@ -1,11 +0,0 @@ -pid,value -1,0.9 -2,1.1 -2,1.1 -2,0.3 -3,1.1 -3,5.0 -3, -4,3.0 -4,3.0 -4,3.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/count_distinct.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/count_distinct.test.json deleted file mode 100644 index 9c03c95c3c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/count_distinct.test.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "label": "COUNT DISTINCT select", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/count_distinct/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "selects": [ - "count.count_connector.count_select" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "selects": { - "type": "COUNT", - "distinct": "true", - "name": "count_select", - "column": "table1.value" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/count/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/expected.csv deleted file mode 100644 index 10413e0963..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_distinct/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,count count_select -1,{},1 -2,{},2 -3,{},2 -4,{},1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/content.csv deleted file mode 100644 index b18754ec50..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/content.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,datum_start,datum_end -1,2015-01-01,2015-12-31 -2,2015-01-01,2015-01-31 -3,2015-01-01,2015-06-30 -4,2015-06-01,2015-06-30 -4,2015-01-01,2015-01-31 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/count_quarters.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/count_quarters.test.json deleted file mode 100644 index ad3bdb510b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/count_quarters.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "label": "COUNT_QUARTERS on date range with start and end column", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/count_quarters/date_range/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "selects": [ - "count.count_connector.count_quarters_select" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "selects": { - "name": "count_quarters_select", - "type": "COUNT_QUARTERS", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/count_quarters/date_range/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/expected.csv deleted file mode 100644 index 08b584fec0..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/date_range/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,count count_quarters_select -1,{},4 -2,{},1 -3,{},2 -4,{},2 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/content.csv deleted file mode 100644 index 8bb87b9b84..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/content.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,datum -1,"2015-01-01/2016-01-01" -2,"2015-01-01/2015-02-01" -3,"2015-01-01/2015-07-01" -4,"2015-06-01/2015-07-01" -4,"2015-01-01/2015-02-01" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/daterange_column.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/daterange_column.test.json deleted file mode 100644 index f2f05b1c69..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/daterange_column.test.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true, - "supportedDialects": [ - "POSTGRESQL" - ] - }, - "label": "COUNT_QUARTERS on single postgres daterange column", - "expectedCsv": "tests/sql/selects/count_quarters/postgres/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "selects": [ - "count.count_connector.count_quarters_select" - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "selects": { - "name": "count_quarters_select", - "type": "COUNT_QUARTERS", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/count_quarters/postgres/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE_RANGE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/expected.csv deleted file mode 100644 index 08b584fec0..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/postgres/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,count count_quarters_select -1,{},4 -2,{},1 -3,{},2 -4,{},2 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/content.csv deleted file mode 100644 index 526d330434..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/content.csv +++ /dev/null @@ -1,39 +0,0 @@ -pid,behandlungsdatum -1,2015-03-16 -1,2015-03-17 -2,2015-03-31 -2,2015-04-01 -3,2015-02-01 -3,2015-04-01 -3,2015-07-01 -3,2015-11-01 -4,2015-03-31 -4,2015-04-01 -4,2015-07-01 -5,2015-11-12 -6,2015-03-31 -6,2015-04-01 -6,2015-04-02 -7,2015-01-01 -7,2015-02-01 -7,2015-03-01 -7,2015-04-01 -8,2015-11-11 -8,2015-11-12 -8,2015-11-13 -8,2015-11-14 -9,2015-04-14 -9,2015-11-12 -9,2015-09-14 -9,2016-04-14 -9,2016-11-12 -9,2016-09-14 -10,2015-09-14 -10,2016-09-14 -11,2015-09-14 -11,2016-09-14 -11,2016-11-12 -12,2015-09-14 -12,2015-11-12 -12,2016-09-14 -12,2016-11-12 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/count_quarters.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/count_quarters.test.json deleted file mode 100644 index 0f1613d856..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/count_quarters.test.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "label": "COUNT_QUARTERS on single date column", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/count_quarters/single_date/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "count" - ], - "type": "CONCEPT", - "label": "count", - "tables": [ - { - "id": "count.count_connector", - "selects": [ - "count.count_connector.count_quarters_select" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "count", - "type": "TREE", - "connectors": [ - { - "label": "count_connector", - "table": "table1", - "selects": { - "name": "count_quarters_select", - "type": "COUNT_QUARTERS", - "column": "table1.behandlungsdatum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/count_quarters/single_date/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "behandlungsdatum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/expected.csv deleted file mode 100644 index fd0755c111..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/count_quarters/single_date/expected.csv +++ /dev/null @@ -1,13 +0,0 @@ -result,dates,count count_quarters_select -1,{},1 -10,{},2 -11,{},3 -12,{},4 -2,{},2 -3,{},4 -4,{},3 -5,{},1 -6,{},2 -7,{},2 -8,{},1 -9,{},6 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/centuries.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/centuries.test.json deleted file mode 100644 index c84acd8f7f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/centuries.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "label": "DATE_DISTANCE select with timeUnit CENTURIES", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/date_distance/centuries/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "selects": [ - "geschlecht_select.geschlecht_connector.date_distance_centuries" - ] - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "selects": [ - { - "column": "table1.datum", - "default": true, - "label": "date_distance_centuries", - "name": "date_distance_centuries", - "timeUnit": "CENTURIES", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content":{ - "tables":[ - { - "csv":"tests/sql/selects/date_distance/centuries/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/content.csv deleted file mode 100644 index cb125007de..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,1920-01-01 -2,2010-07-15 -3,2010-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/expected.csv deleted file mode 100644 index e76aeb25bc..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/centuries/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,Geschlecht SELECT date_distance_centuries -2,{},0 -4,{},0 -7,{},0 -3,{},0 -6,{},0 -5,{},0 -1,{},1 -8,{},0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/content.csv deleted file mode 100644 index 2bbb467931..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2012-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/days_with_date_restriction.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/days_with_date_restriction.test.json deleted file mode 100644 index fe822b59ea..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/days_with_date_restriction.test.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE select with timeUnit DAYS and date restriction set", - "expectedCsv": "tests/sql/selects/date_distance/days_with_date_restriction/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2012-01-01", - "max": "2012-12-31" - }, - "child": { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "selects": [ - "geschlecht_select.geschlecht_connector.date_distance_days" - ] - } - ] - } - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - }, - "selects": [ - { - "column": "table1.datum", - "default": true, - "label": "date_distance_days", - "name": "date_distance_days", - "timeUnit": "DAYS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content":{ - "tables":[ - { - "csv":"tests/sql/selects/date_distance/days_with_date_restriction/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/expected.csv deleted file mode 100644 index dee995d63a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_with_date_restriction/expected.csv +++ /dev/null @@ -1,3 +0,0 @@ -result,dates,Geschlecht SELECT date_distance_days -3,{2012-11-10/2012-11-10},51 -1,{2012-01-01/2012-01-01},365 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/content.csv deleted file mode 100644 index 096aed0aaa..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2013-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/days_without_date_restriction.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/days_without_date_restriction.test.json deleted file mode 100644 index 31974a82d7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/days_without_date_restriction.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE select with timeUnit DAYS and without date restriction set", - "expectedCsv": "tests/sql/selects/date_distance/days_without_date_restriction/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "selects": [ - "geschlecht_select.geschlecht_connector.date_distance_days" - ] - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "selects": [ - { - "column": "table1.datum", - "default": true, - "label": "date_distance_days", - "name": "date_distance_days", - "timeUnit": "DAYS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content":{ - "tables":[ - { - "csv":"tests/sql/selects/date_distance/days_without_date_restriction/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/expected.csv deleted file mode 100644 index c6df01dcda..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/days_without_date_restriction/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,Geschlecht SELECT date_distance_days -2,{},4639 -4,{},3424 -7,{},2694 -3,{},3425 -6,{},3059 -5,{},5616 -1,{},4104 -8,{},4155 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/content.csv deleted file mode 100644 index 5feec5fd01..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2020-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/decades.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/decades.test.json deleted file mode 100644 index f95246c58b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/decades.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE select with timeUnit DECADES", - "expectedCsv": "tests/sql/selects/date_distance/decades/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "selects": [ - "geschlecht_select.geschlecht_connector.date_distance_decades" - ] - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "selects": [ - { - "column": "table1.datum", - "default": true, - "label": "date_distance_decades", - "name": "date_distance_decades", - "timeUnit": "DECADES", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content":{ - "tables":[ - { - "csv":"tests/sql/selects/date_distance/decades/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/expected.csv deleted file mode 100644 index a67b3370d2..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/decades/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,Geschlecht SELECT date_distance_decades -2,{},1 -4,{},0 -7,{},0 -3,{},0 -6,{},0 -5,{},1 -1,{},1 -8,{},1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/content.csv deleted file mode 100644 index 43ba1a9aa1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-29 -2,2010-07-15 -3,2010-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/expected.csv deleted file mode 100644 index 7dabb86db6..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,Geschlecht SELECT date_distance_months -2,{},152 -4,{},112 -7,{},88 -3,{},148 -6,{},100 -5,{},184 -1,{},133 -8,{},136 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/months.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/months.test.json deleted file mode 100644 index 467c4577b7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/months/months.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE select with timeUnit MONTHS", - "expectedCsv": "tests/sql/selects/date_distance/months/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "selects": [ - "geschlecht_select.geschlecht_connector.date_distance_months" - ] - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "selects": [ - { - "column": "table1.datum", - "default": true, - "label": "date_distance_months", - "name": "date_distance_months", - "timeUnit": "MONTHS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content":{ - "tables":[ - { - "csv":"tests/sql/selects/date_distance/months/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/content.csv deleted file mode 100644 index 8c2f303145..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2010-11-10 -4,2013-11-11 -5,2007-11-11 -6,2014-11-11 -7,2015-11-11 -8,2011-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/expected.csv deleted file mode 100644 index dbbf8b9a59..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,Geschlecht SELECT date_distance_years -2,{},12 -4,{},9 -7,{},7 -3,{},12 -6,{},8 -5,{},15 -1,{},11 -8,{},11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/years.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/years.test.json deleted file mode 100644 index 3f22a5ad04..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_distance/years/years.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_DISTANCE select with timeUnit YEARS", - "expectedCsv": "tests/sql/selects/date_distance/years/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id":"geschlecht_select.geschlecht_connector", - "selects": [ - "geschlecht_select.geschlecht_connector.date_distance_years" - ] - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "selects": [ - { - "column": "table1.datum", - "default": true, - "label": "date_distance_years", - "name": "date_distance_years", - "timeUnit": "YEARS", - "type": "DATE_DISTANCE" - } - ] - } - ] - } - ], - "content":{ - "tables":[ - { - "csv":"tests/sql/selects/date_distance/years/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_union/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_union/content.csv deleted file mode 100644 index edb160e384..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_union/content.csv +++ /dev/null @@ -1,11 +0,0 @@ -pid,indexdatum_start,indexdatum_end,geburtsdatum -1,2010-01-01,2010-03-31,2010-01-31 -2,2010-01-01,2010-03-31,1998-01-01 -3,2010-01-01,2010-03-31,1997-12-31 -4,2010-01-01,2010-03-31, -5,2010-01-01,2010-03-31,2011-01-01 -6,2010-01-01,2010-03-31,1998-03-01 -7,2010-01-01,2010-03-31,2010-01-31 -8,2010-01-01,2010-03-31,1998-03-01 -9,2010-01-01,2010-03-31,1998-04-01 -10,2010-01-01,2010-03-31,2012-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_union/date_union.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/date_union/date_union.test.json deleted file mode 100644 index d2ffff5374..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_union/date_union.test.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "DATE_UNION select test", - "expectedCsv": "tests/sql/selects/date_union/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": "concept.connector.date-union" - } - ] - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "label": "connector", - "table": "table", - "selects": { - "type": "DATE_UNION", - "name": "date-union", - "startColumn": "table.indexdatum_start", - "endColumn": "table.indexdatum_end" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/date_union/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "indexdatum_start", - "type": "DATE" - }, - { - "name": "indexdatum_end", - "type": "DATE" - }, - { - "name": "geburtsdatum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/date_union/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/date_union/expected.csv deleted file mode 100644 index 8fd8203bcf..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/date_union/expected.csv +++ /dev/null @@ -1,11 +0,0 @@ -result,dates,concept date-union -1,{},{2010-01-01/2010-03-31} -10,{},{2010-01-01/2010-03-31} -2,{},{2010-01-01/2010-03-31} -3,{},{2010-01-01/2010-03-31} -4,{},{2010-01-01/2010-03-31} -5,{},{2010-01-01/2010-03-31} -6,{},{2010-01-01/2010-03-31} -7,{},{2010-01-01/2010-03-31} -8,{},{2010-01-01/2010-03-31} -9,{},{2010-01-01/2010-03-31} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/distinct/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/distinct/content.csv deleted file mode 100644 index 03265056db..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/distinct/content.csv +++ /dev/null @@ -1,14 +0,0 @@ -pid,datum,value -1,2012-01-01,"f" -1,2012-01-02,"f" -2,2010-07-15, -3,2012-01-01,"f" -3,2012-01-02,"m" -4,2012-01-01,"f" -4,2012-01-02,"m" -4,2012-01-03,"f" -4,2012-01-04,"m" -5,2012-01-01,"f " -5,2012-01-02,"m " -5,2012-01-03,"f" -5,2012-01-04,"m" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/distinct/distinct.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/distinct/distinct.test.json deleted file mode 100644 index 4ff17cd780..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/distinct/distinct.test.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "DISTINCT select", - "expectedCsv": "tests/sql/selects/distinct/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": [ - "concept.connector.select" - ] - } - ] - } - }, - "concepts": [ - { - "label": "concept", - "type": "TREE", - "connectors": [ - { - "label": "connector", - "table": "table", - "validityDates": { - "label": "datum", - "column": "table.datum" - }, - "selects": { - "name": "select", - "type": "DISTINCT", - "column": "table.value" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/distinct/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "value", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/distinct/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/distinct/expected.csv deleted file mode 100644 index 6b7033299b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/distinct/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates,concept select -1,{2012-01-01/2012-01-02},{f} -2,{2010-07-15/2010-07-15}, -3,{2012-01-01/2012-01-02},"{f,m}" -4,{2012-01-01/2012-01-04},"{f,m}" -5,{2012-01-01/2012-01-04},"{f,f ,m,m }" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_1.csv deleted file mode 100644 index f51e921d16..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_1.csv +++ /dev/null @@ -1,3 +0,0 @@ -pid,datum_start,datum_end,value -1,2021-12-28,2021-12-28,a - diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_2.csv deleted file mode 100644 index ad1b1c83a5..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_2.csv +++ /dev/null @@ -1 +0,0 @@ -pid,datum_start,datum_end,value diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_3.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_3.csv deleted file mode 100644 index f812819257..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/content_3.csv +++ /dev/null @@ -1,2 +0,0 @@ -pid,datum_start,datum_end,value -1,2018-04-01,2018-05-01,a diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/exists.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/exists.test.json deleted file mode 100644 index 7077f8a2d7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/exists.test.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "EXISTS select on connector", - "expectedCsv": "tests/sql/selects/exists/exists_on_connector/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector_1", - "selects": "concept.connector_1.exists" - }, - { - "id": "concept.connector_2" - }, - { - "id": "concept.connector_3" - } - ] - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "children": [ - ], - "selects": [ - { - "type": "EXISTS", - "name": "exists" - } - ], - "connectors": [ - { - "label": "connector_1", - "column": "exists_table_1.value", - "selects": { - "type": "EXISTS", - "name": "exists" - } - }, - { - "label": "connector_2", - "column": "exists_table_2.value", - "selects": { - "type": "EXISTS", - "name": "exists" - } - }, - { - "label": "connector_3", - "column": "exists_table_3.value", - "selects": { - "type": "EXISTS", - "name": "exists" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/exists/exists_on_connector/content_1.csv", - "name": "exists_table_1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "value", - "type": "STRING" - } - ] - }, - { - "csv": "tests/sql/selects/exists/exists_on_connector/content_3.csv", - "name": "exists_table_3", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "value", - "type": "STRING" - } - ] - }, - { - "csv": "tests/sql/selects/exists/exists_on_connector/content_2.csv", - "name": "exists_table_2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "value", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/expected.csv deleted file mode 100644 index ef3187aa23..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_on_connector/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates,concept connector_1 exists -1,{},1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/content.csv deleted file mode 100644 index c1f3e56378..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -2,1,2014-06-30,2015-06-30 -2,2,2014-06-30,2015-06-30 -3,3,2014-06-30,2015-06-30 -4,,2014-06-30,2015-06-30 -5,1,2014-06-30,2015-06-30 -5,,2014-06-30,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/exists_with_other_selects.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/exists_with_other_selects.test.json deleted file mode 100644 index 782447789f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/exists_with_other_selects.test.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "EXISTS select with other selects", - "description": "EXISTS as concept level select should be in before table-level selects like first in final result set", - "expectedCsv": "tests/sql/selects/exists/exists_with_other_selects/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": "concept.connector.first_value" - } - ], - "selects": "concept.exists" - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "selects": { - "type": "EXISTS", - "name": "exists" - }, - "connectors": [ - { - "label": "connector", - "table": "exists_table", - "validityDates": [ - { - "label": "datum", - "startColumn": "exists_table.datum_start", - "endColumn": "exists_table.datum_end" - } - ], - "selects": [ - { - "name": "first_value", - "column": "exists_table.value", - "type": "FIRST" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/exists/exists_with_other_selects/content.csv", - "name": "exists_table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/expected.csv deleted file mode 100644 index a942716562..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/exists_with_other_selects/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates,concept exists,concept first_value -2,{2014-06-30/2015-06-30},1,1.0 -4,{2014-06-30/2015-06-30},1, -3,{2014-06-30/2015-06-30},1,3.0 -5,{2014-06-30/2015-06-30},1,1.0 -1,{2014-06-30/2015-06-30},1,1.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/content.csv deleted file mode 100644 index f3fe352607..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,datum_start,datum_end -1,2014-06-30,2015-06-30 -2,2014-06-30,2015-06-30 -2,2014-06-30,2015-06-30 -3,2014-06-30,2015-06-30 -4,2014-06-30,2015-06-30 -5,2014-06-30,2015-06-30 -5,2014-06-30,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/exists.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/exists.test.json deleted file mode 100644 index 1e8eb0f01b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/exists.test.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Single Concept EXISTS", - "expectedCsv": "tests/sql/selects/exists/single_exists/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector" - } - ], - "selects": "concept.exists" - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "selects": { - "type": "EXISTS", - "name": "exists" - }, - "connectors": [ - { - "label": "connector", - "table": "exists_table", - "validityDates": [ - { - "label": "datum", - "startColumn": "exists_table.datum_start", - "endColumn": "exists_table.datum_end" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/exists/single_exists/content.csv", - "name": "exists_table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/expected.csv deleted file mode 100644 index dfffa9839f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/exists/single_exists/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates,concept exists -2,{2014-06-30/2015-06-30},1 -4,{2014-06-30/2015-06-30},1 -3,{2014-06-30/2015-06-30},1 -5,{2014-06-30/2015-06-30},1 -1,{2014-06-30/2015-06-30},1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/date/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/first/date/content.csv deleted file mode 100644 index fb98975f38..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/date/content.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,date -1, -2,2015-04-31 -3,2016-02-05 -4,2014-12-31 -5,2013-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/first/date/expected.csv deleted file mode 100644 index 75fb5e1d2a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/date/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates,vs first_date -1,{}, -2,{},2015-05-01 -3,{},2016-02-05 -4,{},2014-12-31 -5,{},2013-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/date/number_date.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/first/date/number_date.test.json deleted file mode 100644 index 6a32bbeddd..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/date/number_date.test.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "label": "FIRST on column of date type", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/first/date/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.first_date" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "selects": { - "name": "first_date", - "column": "table1.date", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/first/date/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "date", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/money/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/first/money/content.csv deleted file mode 100644 index ebc4f56650..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/money/content.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,money -1,50 -2,250 -3,150 -4,150 -5,150 -6,250 -7,150.01 -8,200.01 -9,99.99 -10, -11,300 -12,150 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/money/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/first/money/expected.csv deleted file mode 100644 index d0f41badd0..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/money/expected.csv +++ /dev/null @@ -1,13 +0,0 @@ -result,dates,vs first_money -1,{},50.00 -2,{},250.00 -3,{},150.00 -4,{},150.00 -5,{},150.00 -6,{},250.00 -7,{},150.01 -8,{},200.01 -9,{},99.99 -10,{}, -11,{},300.00 -12,{},150.00 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/money/number_money.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/first/money/number_money.test.json deleted file mode 100644 index b439d91c6c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/money/number_money.test.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "label": "FIRST on column of MONEY type", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/first/money/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.first_money" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "selects": { - "name": "first_money", - "column": "table1.money", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/first/money/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "money", - "type": "MONEY" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/number/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/first/number/content.csv deleted file mode 100644 index ca38692d77..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/number/content.csv +++ /dev/null @@ -1,11 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -2,1.01,2014-06-30,2015-06-30 -1,1,2015-02-03,2015-06-30 -1,0.5,2014-06-30,2015-06-30 -3,0.5,2014-04-30,2014-06-30 -4,1,2014-06-30,2015-06-30 -5,0.5,2014-04-30,2014-06-30 -5,1,2014-06-30,2015-06-30 -6,1,2014-04-30,2014-06-30 -8,1,2014-04-30,2014-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/number/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/first/number/expected.csv deleted file mode 100644 index a7ec8104a3..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/number/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates,vs first_value -2,{2014-06-30/2015-06-30},1.01 -4,{2014-06-30/2015-06-30},1.0 -3,{2014-04-30/2014-06-30},0.5 -6,{2014-04-30/2014-06-30},1.0 -5,{2014-04-30/2015-06-30},0.5 -1,{2014-06-30/2015-06-30},1.0 -8,{2014-04-30/2014-06-30},1.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/first/number/first.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/first/number/first.test.json deleted file mode 100644 index 6cd94a1f59..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/first/number/first.test.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "label": "FIRST select with validity date", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/first/number/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.first_value" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "selects": { - "label": "first_value", - "column": "table1.value", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/first/number/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/flag/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/flag/content.csv deleted file mode 100644 index bf9fb3b6b7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/flag/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,a,b,c -1,true,false,false -2,false,true,false -3,false,false,true -4,true,true,false -5,false,false,true -6,,, -7,,,true -8,true,true,true diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/flag/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/flag/expected.csv deleted file mode 100644 index d8beda0260..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/flag/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,flags flags_selects -1,{},{A} -2,{},{B} -3,{},{C} -4,{},"{A,B}" -5,{},{C} -6,{},{} -7,{},{C} -8,{},"{A,B,C}" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/flag/flag.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/flag/flag.test.json deleted file mode 100644 index d72f6b54c1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/flag/flag.test.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "label": "FLAGS select", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/flag/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "flags" - ], - "type": "CONCEPT", - "label": "flags", - "tables": [ - { - "id": "flags.flags_connector", - "selects": "flags.flags_connector.flags_selects" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "flags", - "type": "TREE", - "connectors": [ - { - "label": "flags_connector", - "table": "table1", - "selects": { - "type": "FLAGS", - "name": "flags_selects", - "flags": { - "A": "table1.a", - "B": "table1.b", - "C": "table1.c" - } - } - } - ] - } - ], - "content": { - "tables": { - "csv": "tests/sql/selects/flag/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "a", - "type": "BOOLEAN" - }, - { - "name": "b", - "type": "BOOLEAN" - }, - { - "name": "c", - "type": "BOOLEAN" - } - ] - } - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/last/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/last/content.csv deleted file mode 100644 index 4b46b64c0f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/last/content.csv +++ /dev/null @@ -1,4 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2010-01-01,2010-12-31 -1,1,2012-01-01,2012-12-31 -1,0.5,2014-01-01,2014-12-31 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/last/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/last/expected.csv deleted file mode 100644 index a38705622b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/last/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates,vs last_value -1,"{2010-01-01/2010-12-31,2012-01-01/2012-12-31,2014-01-01/2014-12-31}",0.5 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/last/last.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/last/last.test.json deleted file mode 100644 index 40f0e5d3ea..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/last/last.test.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "label": "LAST select with validity date", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/last/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.last_value" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "selects": { - "label": "last_value", - "column": "table1.value", - "type": "LAST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/last/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/random/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/random/content.csv deleted file mode 100644 index 48dc801a0c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/random/content.csv +++ /dev/null @@ -1,4 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2010-01-01,2010-12-31 -1,1,2010-01-01,2010-12-31 -1,1,2010-01-01,2010-12-31 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/random/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/random/expected.csv deleted file mode 100644 index b81602a2a1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/random/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates,vs random_value -1,{2010-01-01/2010-12-31},1.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/random/random.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/random/random.test.json deleted file mode 100644 index fa72e7f57d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/random/random.test.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "label": "RANDOM select with validity date", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/random/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.random_value" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "selects": { - "label": "random_value", - "column": "table1.value", - "type": "RANDOM" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/random/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/content.csv deleted file mode 100644 index 8d38491842..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/content.csv +++ /dev/null @@ -1,13 +0,0 @@ -pid,value,datum -1,1,2012-01-01 -2,1.01,2010-07-15 -1,1,2013-11-10 -1,0.5,2012-11-11 -3,0.5,2007-11-11 -4,1,2012-11-11 -5,0.5,2012-11-11 -5,1,2012-11-11 -6,1,2012-01-01 -7,1,2010-07-15 -8,1,2013-11-10 -7,-1,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/expected.csv deleted file mode 100644 index 788e40f449..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates,vs value,vs value_1 -2,{},1.01,1.01 -4,{},1.0,1.0 -7,{},1.0,1.0 -3,{},0.5,0.5 -6,{},1.0,1.0 -5,{},0.5,0.5 -1,{},1.0,1.0 -8,{},1.0,1.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/same_select.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/same_select.test.json deleted file mode 100644 index 6af6400c69..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/same_select_2_times/same_select.test.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "label": "Same select 2 times", - "description": "Selecting the same select 2 times should not cause a name collision", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/same_select_2_times/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "excludeFromTimeAggregation": true, - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.value" - } - ] - }, - { - "ids": [ - "number" - ], - "type": "CONCEPT", - "label": "vs", - "excludeFromTimeAggregation": true, - "tables": [ - { - "id": "number.number_connector", - "selects": "number.number_connector.value" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - }, - "selects": { - "name": "value", - "column": "table1.value", - "type": "FIRST" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/same_select_2_times/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/content.csv deleted file mode 100644 index d199bdf995..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,value -1,0.9 -1,0.8 -2,0.1 -2,0.1 -3,1.0 -3,0.5 -4,19.0 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/content.csv deleted file mode 100644 index f092c3cb60..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/content.csv +++ /dev/null @@ -1,22 +0,0 @@ -pid,plus,minus -1,100,50 -2,100,0 -3,200,0 -4,250,50 -5,250,0 -6,150,51 -7,150,0 -8,100,0 -8,100,0 -8,100,0 -9,150,100 -9,150,100 -9,150,100 -10,200,200 -10,200,0 -11,50,0 -11,50,0 -11,50,0 -12,100,99 -12,100,99 -12,100,99 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/diffsum.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/diffsum.test.json deleted file mode 100644 index 32fe16dd1e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/diffsum.test.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "label": "SUM with subtract column select", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/sum/diffsum/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "sum" - ], - "type": "CONCEPT", - "label": "sum", - "tables": [ - { - "id": "sum.sum_connector", - "selects": [ - "sum.sum_connector.diffsum_select" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "sum", - "type": "TREE", - "connectors": [ - { - "label": "sum_connector", - "table": "table1", - "selects": { - "type": "SUM", - "name": "diffsum_select", - "subtractColumn": "table1.minus", - "column": "table1.plus" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/sum/diffsum/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "plus", - "type": "INTEGER" - }, - { - "name": "minus", - "type": "INTEGER" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/expected.csv deleted file mode 100644 index 7ddc949d45..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/diffsum/expected.csv +++ /dev/null @@ -1,13 +0,0 @@ -result,dates,sum diffsum_select -2,{},100 -9,{},150 -4,{},200 -11,{},150 -12,{},3 -10,{},200 -7,{},150 -3,{},200 -6,{},99 -5,{},250 -1,{},50 -8,{},300 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/content.csv deleted file mode 100644 index 3b47786fac..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/content.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,k1,k2,value -1,a,b,1 -1,a,b,1 -2,a,,1 -3,a,b,1 -3,a,c,1 -4,a,b,1 -4,b,a,1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/distinct-sum.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/distinct-sum.test.json deleted file mode 100644 index 7e775bef16..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/distinct-sum.test.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "label": "SUM select with DISTINCT BY columns", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/sum/distinct/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": [ - "concept.connector.sum_distinct_select" - ] - } - ] - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "name": "connector", - "table": "table", - "selects": { - "name": "sum_distinct_select", - "type": "SUM", - "column": "table.value", - "distinctByColumn": [ - "table.k1", - "table.k2" - ] - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/sum/distinct/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "k1", - "type": "STRING" - }, - { - "name": "k2", - "type": "STRING" - }, - { - "name": "value", - "type": "INTEGER" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/expected.csv deleted file mode 100644 index 8bfff145b6..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/distinct/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,concept sum_distinct_select -1,{},1 -2,{},1 -3,{},2 -4,{},2 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/content.csv deleted file mode 100644 index f70ad54470..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/content.csv +++ /dev/null @@ -1,25 +0,0 @@ -pid,datum,column -1,2012-01-01,"A" -1,2012-01-01, - -2,2012-01-01,"A" -2,2012-01-01,"B" - -3,2012-01-01,"A" -3,2012-01-02,"B" - -4,2012-01-01,"A" -4,2012-01-02,"A" -4,2012-01-02,"B" - -5,2012-01-01,"A" -5,2012-01-02,"A" -5,2012-01-03,"A" -5,2012-01-04,"A" -5,2012-01-02,"B" -5,2012-01-03,"B" -5,2012-01-04,"B" -5,2012-01-05,"B" - -6,,"A" -6,,"B" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/duration_sum.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/duration_sum.test.json deleted file mode 100644 index b6862fc9e0..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/duration_sum.test.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "AND DURATION SUM Test", - "expectedCsv": "tests/sql/selects/sum/duration_sum/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "ids": [ - "tree.a" - ], - "tables": [ - { - "id": "tree.connector", - "selects": [ - "tree.connector.event_duration_sum" - ] - } - ] - }, - { - "type": "CONCEPT", - "ids": [ - "tree.b" - ], - "tables": [ - { - "id": "tree.connector" - } - ] - } - ] - } - }, - "concepts": [ - { - "name": "tree", - "type": "TREE", - "connectors": { - "name": "connector", - "column": "table.column", - "selects": { - "type": "DURATION_SUM", - "name": "event_duration_sum", - "column": "table.datum" - } - }, - "children": [ - { - "name": "a", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" - }, - "children": [] - }, - { - "name": "b", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" - }, - "children": [] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/sum/duration_sum/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "column", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/expected.csv deleted file mode 100644 index 50cc9ee49a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/duration_sum/expected.csv +++ /dev/null @@ -1,6 +0,0 @@ -result,dates,tree a event_duration_sum -2,{},1 -3,{},1 -4,{},2 -5,{},4 -6,{}, diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/content.csv deleted file mode 100644 index f70ad54470..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/content.csv +++ /dev/null @@ -1,25 +0,0 @@ -pid,datum,column -1,2012-01-01,"A" -1,2012-01-01, - -2,2012-01-01,"A" -2,2012-01-01,"B" - -3,2012-01-01,"A" -3,2012-01-02,"B" - -4,2012-01-01,"A" -4,2012-01-02,"A" -4,2012-01-02,"B" - -5,2012-01-01,"A" -5,2012-01-02,"A" -5,2012-01-03,"A" -5,2012-01-04,"A" -5,2012-01-02,"B" -5,2012-01-03,"B" -5,2012-01-04,"B" -5,2012-01-05,"B" - -6,,"A" -6,,"B" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/duration_sum.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/duration_sum.test.json deleted file mode 100644 index 8e9a14690d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/duration_sum.test.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "AND DURATION SUM on event date Test", - "expectedCsv": "tests/sql/selects/sum/event_duration_sum/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "ids": [ - "tree.a" - ], - "tables": [ - { - "id": "tree.connector", - "selects": [ - "tree.connector.event_duration_sum" - ] - } - ] - }, - { - "type": "CONCEPT", - "ids": [ - "tree.b" - ], - "tables": [ - { - "id": "tree.connector" - } - ] - } - ] - } - }, - "concepts": [ - { - "name": "tree", - "type": "TREE", - "connectors": { - "name": "connector", - "column": "table.column", - "validityDates": { - "name": "datum", - "column": "table.datum" - }, - "selects": { - "type": "EVENT_DURATION_SUM", - "name": "event_duration_sum" - } - }, - "children": [ - { - "name": "a", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" - }, - "children": [] - }, - { - "name": "b", - "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" - }, - "children": [] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/sum/event_duration_sum/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "column", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/expected.csv deleted file mode 100644 index 403d444e82..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/event_duration_sum/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,tree a event_duration_sum -2,{2012-01-01/2012-01-01},1 -3,{2012-01-01/2012-01-02},1 -4,{2012-01-01/2012-01-02},2 -5,{2012-01-01/2012-01-05},4 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/sum/expected.csv deleted file mode 100644 index 9423c5a228..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,sum sum_select -2,{},0.2 -4,{},19.0 -3,{},1.5 -1,{},1.7 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/sum/sum.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/sum/sum.test.json deleted file mode 100644 index 4ab0d65458..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/sum/sum.test.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "label": "SUM select", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "expectedCsv": "tests/sql/selects/sum/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "sum" - ], - "type": "CONCEPT", - "label": "sum", - "tables": [ - { - "id": "sum.sum_connector", - "selects": [ - "sum.sum_connector.sum_select" - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "sum", - "type": "TREE", - "connectors": [ - { - "label": "sum_connector", - "table": "table1", - "selects": { - "type": "SUM", - "name": "sum_select", - "column": "table1.value" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/sum/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/content_1.csv deleted file mode 100644 index 463e92bd1c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/content_1.csv +++ /dev/null @@ -1,7 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -1,1,2014-01-01,2014-06-30 -1,1,2013-01-01,2014-01-01 -3,0.5,2014-01-01,2014-12-31 -3,0.5,2015-06-01,2015-12-31 -4,1,2013-01-01,2013-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/content_2.csv deleted file mode 100644 index d86a976578..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/content_2.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,datum_start,datum_end,geschlecht -1,2015-01-01,2016-12-31,"f" -2,2010-07-15,2010-07-15,"m" -3,2017-01-01,2017-12-31,"f" -4,2012-12-31,2012-12-31,"f" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/expected.csv deleted file mode 100644 index edcdd8216a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result -1 -3 -4 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/none.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/none.test.json deleted file mode 100644 index d5f00804a3..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/and/none.test.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "label": "NONE date aggregation of 2 concepts", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/block/and/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "dateAggregationMode": "NONE", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "startColumn": "table2.datum_start", - "endColumn": "table2.datum_end" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/block/and/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/selects/validity_date/aggregation/block/and/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/content_1.csv deleted file mode 100644 index 8f5c77f449..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/content_1.csv +++ /dev/null @@ -1,3 +0,0 @@ -pid,datum_start,datum_end,geschlecht -1,2012-01-01,2012-12-31,"m" -1,2015-01-01,2015-12-31,"m" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/expected.csv deleted file mode 100644 index 7e7032c058..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates -1,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/negate.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/negate.test.json deleted file mode 100644 index 7c52280e6c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/block/not/negate.test.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "label": "BLOCK as default date aggregation of a NEGATION CONCEPT node", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/block/not/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "NEGATION", - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/block/not/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/content_1.csv deleted file mode 100644 index 9b59b2022a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/content_1.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -1,1,2015-01-01,2015-06-30 -1,1,2015-05-05,2016-02-05 -3,0.5,2014-06-01,2014-12-31 -4,1,2013-01-01,2013-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/content_2.csv deleted file mode 100644 index 61dc197095..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/content_2.csv +++ /dev/null @@ -1,4 +0,0 @@ -pid,datum_start,datum_end,geschlecht -1,2015-01-01,2015-12-31,"f" -3,2013-01-01,2013-06-31,"f" -4,2012-12-31,2012-12-31,"f" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/expected.csv deleted file mode 100644 index 292983c563..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates -1,{2015-01-01/2015-12-31} -3,{} -4,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/intersect.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/intersect.test.json deleted file mode 100644 index c413e3143f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/intersect/intersect.test.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "label": "INTERSECT date aggregation of 2 concepts", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/intersect/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "dateAggregationMode": "INTERSECT", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0, - "max": 1.0 - } - } - ] - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - } - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "startColumn": "table2.datum_start", - "endColumn": "table2.datum_end" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/intersect/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/selects/validity_date/aggregation/intersect/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/content_1.csv deleted file mode 100644 index d1c1c91dcb..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/content_1.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 -1,1,2014-01-01,2014-06-30 -1,1,2013-01-01,2014-01-01 -3,0.5,2014-01-01,2014-12-31 -3,0.5,2015-06-01,2015-12-31 -4,1,2013-01-01,2013-01-01 -9,1,2013-01-02,2013-01-02 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/content_2.csv deleted file mode 100644 index f9c652b028..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/content_2.csv +++ /dev/null @@ -1,6 +0,0 @@ -pid,datum_start,datum_end,geschlecht -1,2015-01-01,2016-12-31,"f" -2,2010-07-15,2010-07-15,"m" -3,2017-01-01,2017-12-31,"f" -4,2012-12-31,2012-12-31,"f" -9,2012-12-31,2012-12-31,"f" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/expected.csv deleted file mode 100644 index c3e1aba6ea..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/expected.csv +++ /dev/null @@ -1,5 +0,0 @@ -result,dates,vs first_value,Geschlecht SELECT first_geschlecht -1,{2013-01-01/2016-12-31},1.0,f -3,"{2014-01-01/2014-12-31,2015-06-01/2015-12-31,2017-01-01/2017-12-31}",0.5,f -4,{2012-12-31/2013-01-01},1.0,f -9,"{2012-12-31/2012-12-31,2013-01-02/2013-01-02}",1.0,f diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/merge.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/merge.test.json deleted file mode 100644 index 170696cec2..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/merge/merge.test.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "label": "MERGE date aggregation of 2 concepts", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/merge/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "dateAggregationMode": "MERGE", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0, - "max": 1.0 - } - } - ], - "selects": "number.number_connector.first_value" - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ], - "selects": "geschlecht_select.geschlecht_connector.first_geschlecht" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - }, - "selects": [ - { - "column": "table1.value", - "label": "first_value", - "type": "FIRST" - } - ] - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "validityDates": { - "label": "datum", - "startColumn": "table2.datum_start", - "endColumn": "table2.datum_end" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - }, - "selects": [ - { - "column": "table2.geschlecht", - "label": "first_geschlecht", - "type": "FIRST" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/merge/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/selects/validity_date/aggregation/merge/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/content_1.csv deleted file mode 100644 index 8f5c77f449..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/content_1.csv +++ /dev/null @@ -1,3 +0,0 @@ -pid,datum_start,datum_end,geschlecht -1,2012-01-01,2012-12-31,"m" -1,2015-01-01,2015-12-31,"m" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/expected.csv deleted file mode 100644 index 8488b40fe9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates -1,"{-∞/2011-12-31,2013-01-01/2014-12-31,2016-01-01/+∞}" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/negate.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/negate.test.json deleted file mode 100644 index a9eb91baf6..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/negate/negate.test.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "label": "LOGICAL date aggregation of a NEGATION CONCEPT node", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/negate/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "dateAggregationMode": "LOGICAL", - "root": { - "type": "NEGATION", - "child": { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/negate/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/content_1.csv deleted file mode 100644 index 2cc6ce5d2e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/content_1.csv +++ /dev/null @@ -1,2 +0,0 @@ -pid,value -1,1 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/content_2.csv deleted file mode 100644 index 33e0f95e29..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/content_2.csv +++ /dev/null @@ -1,2 +0,0 @@ -pid,geschlecht -1,"f" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/expected.csv deleted file mode 100644 index 03e2f86a63..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates,vs first_value,Geschlecht SELECT first_geschlecht -1,{},1.0,f diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/no_validity_date.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/no_validity_date.test.json deleted file mode 100644 index 8bfa69fdc4..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/no_validity_date/no_validity_date.test.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "label": "MERGE date aggregation of 2 concepts but no one has a validity date", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/no_validity_date/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "dateAggregationMode": "MERGE", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0, - "max": 1.0 - } - } - ], - "selects": "number.number_connector.first_value" - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ], - "selects": "geschlecht_select.geschlecht_connector.first_geschlecht" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - }, - "selects": [ - { - "column": "table1.value", - "label": "first_value", - "type": "FIRST" - } - ] - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - }, - "selects": [ - { - "column": "table2.geschlecht", - "label": "first_geschlecht", - "type": "FIRST" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/no_validity_date/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - } - ] - }, - { - "csv": "tests/sql/selects/validity_date/aggregation/no_validity_date/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/content_1.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/content_1.csv deleted file mode 100644 index a74c45c89b..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/content_1.csv +++ /dev/null @@ -1,2 +0,0 @@ -pid,value,datum_start,datum_end -1,1,2014-06-30,2015-06-30 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/content_2.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/content_2.csv deleted file mode 100644 index 33e0f95e29..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/content_2.csv +++ /dev/null @@ -1,2 +0,0 @@ -pid,geschlecht -1,"f" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/expected.csv deleted file mode 100644 index a8a821e099..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates,vs first_value,Geschlecht SELECT first_geschlecht -1,{2014-06-30/2015-06-30},1.0,f diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/only_1_date.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/only_1_date.test.json deleted file mode 100644 index 6d66047fe1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/aggregation/only_1_date/only_1_date.test.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "label": "MERGE date aggregation of 2 concepts but only 1 has a validity date", - "expectedCsv": "tests/sql/selects/validity_date/aggregation/only_1_date/expected.csv", - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "query": { - "type": "CONCEPT_QUERY", - "dateAggregationMode": "MERGE", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "label": "vs", - "ids": [ - "number" - ], - "tables": [ - { - "id": "number.number_connector", - "filters": [ - { - "filter": "number.number_connector.value", - "type": "REAL_RANGE", - "value": { - "min": 0, - "max": 1.0 - } - } - ], - "selects": "number.number_connector.first_value" - } - ] - }, - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ], - "selects": "geschlecht_select.geschlecht_connector.first_geschlecht" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "number", - "type": "TREE", - "connectors": [ - { - "label": "number_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "value", - "description": "xy", - "column": "table1.value", - "type": "NUMBER" - }, - "selects": [ - { - "column": "table1.value", - "label": "first_value", - "type": "FIRST" - } - ] - } - ] - }, - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table2", - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table2.geschlecht", - "type": "SELECT" - }, - "selects": [ - { - "column": "table2.geschlecht", - "label": "first_geschlecht", - "type": "FIRST" - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/aggregation/only_1_date/content_1.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "value", - "type": "REAL" - }, - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - } - ] - }, - { - "csv": "tests/sql/selects/validity_date/aggregation/only_1_date/content_2.csv", - "name": "table2", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/content.csv deleted file mode 100644 index 6af477b0c4..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3, -4,2012-11-11 -5,2007-11-11 -6,2012-11-11 -7,2012-11-11 -8,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/expected.csv deleted file mode 100644 index 6de96e323d..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates -2,{2010-07-15/2010-07-15} -4,{2012-11-11/2012-11-11} -7,{2012-11-11/2012-11-11} -6,{2012-11-11/2012-11-11} -5,{2007-11-11/2007-11-11} -1,{2012-01-01/2012-01-01} -8,{2012-11-11/2012-11-11} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/validity_date_default.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/validity_date_default.test.json deleted file mode 100644 index d976c28a94..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/default/validity_date_default.test.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Validity date as default select without date restriction set", - "description": "If validity dates exist and the concept is not excluded from time aggregation, validity dates should be part of the final selects - regardless if a date restriction is set.", - "expectedCsv": "tests/sql/selects/validity_date/default/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids":[ - "geschlecht_select" - ], - "type":"CONCEPT", - "label":"Geschlecht SELECT", - "tables":[ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - ] - } - }, - "concepts":[ - { - "label":"geschlecht_select", - "type":"TREE", - "connectors":[ - { - "label":"geschlecht_connector", - "table":"table1", - "validityDates":{ - "label":"datum", - "column":"table1.datum" - } - } - ] - } - ], - "content":{ - "tables":[ - { - "csv": "tests/sql/selects/validity_date/default/content.csv", - "name":"table1", - "primaryColumn":{ - "name":"pid", - "type":"STRING" - }, - "columns":[ - { - "name":"datum", - "type":"DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/EVENT_DATE_AGGREGATOR_NO_RESTRICTION.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/EVENT_DATE_AGGREGATOR_NO_RESTRICTION.test.json deleted file mode 100644 index cb0b66c1d1..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/EVENT_DATE_AGGREGATOR_NO_RESTRICTION.test.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "EVENT_DATE_AGGREGATOR_NO_RESTRICTION Test", - "expectedCsv": "tests/sql/selects/validity_date/event_date_union/expected_no_restriction.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": "concept.connector.event-date" - } - ], - "selects": "concept.event-date" - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "label": "connector", - "table": "table", - "validityDates": { - "label": "indexdatum", - "startColumn": "table.indexdatum_start", - "endColumn": "table.indexdatum_end" - }, - "selects": { - "type": "EVENT_DATE_UNION", - "name": "event-date" - } - } - ], - "selects": { - "type": "EVENT_DATE_UNION", - "name": "event-date" - } - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/event_date_union/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "indexdatum_start", - "type": "DATE" - }, - { - "name": "indexdatum_end", - "type": "DATE" - }, - { - "name": "geburtsdatum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/EVENT_DATE_AGGREGATOR_RESTRICTION.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/EVENT_DATE_AGGREGATOR_RESTRICTION.test.json deleted file mode 100644 index 8edd90a370..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/EVENT_DATE_AGGREGATOR_RESTRICTION.test.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "EVENT_DATE_AGGREGATOR_RESTRICTION Test", - "expectedCsv": "tests/sql/selects/validity_date/event_date_union/expected_restriction.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2010-02-01", - "max": "2010-02-28" - }, - "child": { - "ids": [ - "concept" - ], - "type": "CONCEPT", - "tables": [ - { - "id": "concept.connector", - "selects": "concept.connector.event-date" - } - ], - "selects": "concept.event-date" - } - } - }, - "concepts": [ - { - "name": "concept", - "type": "TREE", - "connectors": [ - { - "label": "connector", - "table": "table", - "validityDates": { - "label": "indexdatum", - "startColumn": "table.indexdatum_start", - "endColumn": "table.indexdatum_end" - }, - "selects": { - "type": "EVENT_DATE_UNION", - "name": "event-date" - } - } - ], - "selects": { - "type": "EVENT_DATE_UNION", - "name": "event-date" - } - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/event_date_union/content.csv", - "name": "table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "indexdatum_start", - "type": "DATE" - }, - { - "name": "indexdatum_end", - "type": "DATE" - }, - { - "name": "geburtsdatum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/content.csv deleted file mode 100644 index edb160e384..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/content.csv +++ /dev/null @@ -1,11 +0,0 @@ -pid,indexdatum_start,indexdatum_end,geburtsdatum -1,2010-01-01,2010-03-31,2010-01-31 -2,2010-01-01,2010-03-31,1998-01-01 -3,2010-01-01,2010-03-31,1997-12-31 -4,2010-01-01,2010-03-31, -5,2010-01-01,2010-03-31,2011-01-01 -6,2010-01-01,2010-03-31,1998-03-01 -7,2010-01-01,2010-03-31,2010-01-31 -8,2010-01-01,2010-03-31,1998-03-01 -9,2010-01-01,2010-03-31,1998-04-01 -10,2010-01-01,2010-03-31,2012-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/expected_no_restriction.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/expected_no_restriction.csv deleted file mode 100644 index 59d3efdc52..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/expected_no_restriction.csv +++ /dev/null @@ -1,11 +0,0 @@ -result,dates,concept event-date,concept event-date_1 -1,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -10,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -2,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -3,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -4,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -5,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -6,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -7,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -8,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} -9,{2010-01-01/2010-03-31},{2010-01-01/2010-03-31},{2010-01-01/2010-03-31} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/expected_restriction.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/expected_restriction.csv deleted file mode 100644 index cdd727de50..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/event_date_union/expected_restriction.csv +++ /dev/null @@ -1,11 +0,0 @@ -result,dates,concept event-date,concept event-date_1 -1,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -10,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -2,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -3,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -4,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -5,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -6,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -7,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -8,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} -9,{2010-02-01/2010-02-28},{2010-02-01/2010-02-28},{2010-02-01/2010-02-28} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/content.csv deleted file mode 100644 index 3ef844914c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/content.csv +++ /dev/null @@ -1,9 +0,0 @@ -pid,datum -1,2012-01-01 -2,2010-07-15 -3,2013-11-10 -4,2012-11-11 -5,2007-11-11 -6,2012-11-11 -7,2012-11-11 -8,2012-11-11 diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/expected.csv deleted file mode 100644 index a0450528e7..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/expected.csv +++ /dev/null @@ -1,9 +0,0 @@ -result,dates -2,{} -4,{} -7,{} -3,{} -6,{} -5,{} -1,{} -8,{} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/validity_date_excluded.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/validity_date_excluded.test.json deleted file mode 100644 index 5ffa4f96a8..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/excluded_from_time_aggregation/validity_date_excluded.test.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Validity date excluded from time aggregation", - "description": "If a concept is excluded from time aggregation, validity dates should not be part of the final select.", - "expectedCsv": "tests/sql/selects/validity_date/excluded_from_time_aggregation/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "excludeFromTimeAggregation": true, - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector" - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "column": "table1.datum" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/excluded_from_time_aggregation/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/content.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/content.csv deleted file mode 100644 index 5190a64216..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/content.csv +++ /dev/null @@ -1,14 +0,0 @@ -pid,datum_start,datum_end,geschlecht -1,2012-01-01,2012-07-01,"f" -1,2012-06-01,2012-12-31,"f" -1,2014-01-01,2014-12-31,"f" -2,2010-07-15,2010-07-15,"m" -3,2013-11-10,2013-11-10,"f" -3,2013-11-11,2013-11-11,"f" -4,2012-11-11,2012-11-11,"m" -5,2007-11-11,2007-11-11,"" -6,2012-11-11,2012-11-11,"" -7,2012-11-11,2012-11-11,"mf" -8,2012-11-11,2012-11-11,"fm" -9,,2012-12-31,"f" -9,2013-01-02,,"f" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/expected.csv b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/expected.csv deleted file mode 100644 index 156ab66c2f..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates -1,"{2012-01-01/2012-12-31,2014-01-01/2014-12-31}" -3,{2013-11-10/2013-11-11} -9,"{-∞/2012-12-31,2013-01-02/+∞}" diff --git a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/multi_range.test.json b/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/multi_range.test.json deleted file mode 100644 index f7e8f5b92e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/selects/validity_date/multirange/multi_range.test.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Validity date with multiple ranges for subjects", - "description": "If multiple ranges of a concepts' validity date exist, that they are aggregated properly.", - "expectedCsv": "tests/sql/selects/validity_date/multirange/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "ids": [ - "geschlecht_select" - ], - "type": "CONCEPT", - "label": "Geschlecht SELECT", - "tables": [ - { - "id": "geschlecht_select.geschlecht_connector", - "filters": [ - { - "filter": "geschlecht_select.geschlecht_connector.geschlecht", - "type": "BIG_MULTI_SELECT", - "value": [ - "f" - ] - } - ] - } - ] - } - ] - } - }, - "concepts": [ - { - "label": "geschlecht_select", - "type": "TREE", - "connectors": [ - { - "label": "geschlecht_connector", - "table": "table1", - "validityDates": { - "label": "datum", - "startColumn": "table1.datum_start", - "endColumn": "table1.datum_end" - }, - "filters": { - "label": "geschlecht", - "description": "Geschlecht zur gegebenen Datumseinschränkung", - "column": "table1.geschlecht", - "type": "SELECT" - } - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/selects/validity_date/multirange/content.csv", - "name": "table1", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum_start", - "type": "DATE" - }, - { - "name": "datum_end", - "type": "DATE" - }, - { - "name": "geschlecht", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/nested/content.csv b/backend/src/test/resources/EXCLUDED_sql/tree/nested/content.csv deleted file mode 100644 index 87306a670e..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/nested/content.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,datum,test_column,test_column2,test_column3,test_column4 -1,2012-01-01,"A1",,"B1","C123445" -2,2010-07-15,"A2","Bar","B2","C23456" -3,2013-11-10,"A3","Foo","B3","C34557" -4,2012-11-11,"A4","Foobar","B4","C45678" diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/nested/expected.csv b/backend/src/test/resources/EXCLUDED_sql/tree/nested/expected.csv deleted file mode 100644 index 57ecb1e80c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/nested/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates -1,{2012-01-01/2012-01-01} diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/nested/nested.test.json b/backend/src/test/resources/EXCLUDED_sql/tree/nested/nested.test.json deleted file mode 100644 index 203112d673..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/nested/nested.test.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "TREE concept with multiple nested conditions", - "expectedCsv": "tests/sql/tree/nested/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "ids": [ - "test_tree.test_child1" - ], - "tables": [ - { - "id": "test_tree.test_column", - "filters": [] - } - ] - } - }, - "concepts": [ - { - "label": "test_tree", - "type": "TREE", - "connectors": { - "label": "tree_label", - "name": "test_column", - "column": "test_table.test_column", - "condition": { - "type": "COLUMN_EQUAL", - "column": "test_column3", - "values": [ - "B1" - ] - }, - "validityDates": { - "label": "datum", - "column": "test_table.datum" - } - }, - "children": [ - { - "label": "test_child1", - "description": " ", - "condition": { - "type": "OR", - "conditions": [ - { - "type": "PREFIX_LIST", - "prefixes": [ - "C", - "C1" - ] - }, - { - "type": "AND", - "conditions": [ - { - "type": "EQUAL", - "values": [ - "A1" - ] - }, - { - "type": "NOT", - "condition": { - "type": "PRESENT", - "column": "test_column2" - } - } - ] - } - ] - }, - "children": [] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/tree/nested/content.csv", - "name": "test_table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - }, - { - "name": "test_column2", - "type": "STRING" - }, - { - "name": "test_column3", - "type": "STRING" - }, - { - "name": "test_column4", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/expected.csv b/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/expected.csv deleted file mode 100644 index bc0f7fe7bc..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/expected.csv +++ /dev/null @@ -1,4 +0,0 @@ -result,dates -1,{2012-01-01/2012-01-01} -2,{2012-01-01/2012-01-01} -3,{2012-01-01/2012-01-01} diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/kh-content.csv b/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/kh-content.csv deleted file mode 100644 index 787a0032fc..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/kh-content.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,icd_code,entlassungsdatum,aufnahmedatum -1,"F201",2012-01-01,2012-01-01 -2,"F290",2012-01-01,2012-01-01 -3,"F291",2012-01-01,2012-01-01 -4,"F30",2012-01-01,2012-01-01 diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/prefix_range.test.json b/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/prefix_range.test.json deleted file mode 100644 index da4e9e586a..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/prefix_range/prefix_range.test.json +++ /dev/null @@ -1,241 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "PREFIX_RANGE condition test", - "expectedCsv": "tests/sql/tree/prefix_range/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "ids": [ - "icd.f00$2df99.f20$2df29" - ], - "label": "F20-F29", - "tables": [ - { - "id": "icd.kh$5fdiagnose$5ficd$5fcode", - "filters": [] - } - ] - } - }, - "concepts": [ - { - "label": "ICD", - "type": "TREE", - "additionalInfos": [ - { - "key": "ICD-Codes", - "value": "Historisierung bis einschließlich des Jahres 2018" - } - ], - "connectors": [ - { - "label": "KH-Diagnose", - "name": "kh_diagnose_icd_code", - "column": "kh_diagnose.icd_code", - "validityDates": [ - { - "label": "Entlassungsdatum", - "column": "kh_diagnose.entlassungsdatum" - }, - { - "label": "Aufnahmedatum", - "column": "kh_diagnose.aufnahmedatum" - } - ], - "filters": [] - } - ], - "children": [ - { - "label": "F00-F99", - "condition": { - "type": "PREFIX_RANGE", - "min": "F00", - "max": "F99" - }, - "children": [ - { - "label": "F20-F29", - "condition": { - "type": "PREFIX_RANGE", - "min": "F20", - "max": "F29" - }, - "children": [ - { - "label": "F20", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F20" - ] - }, - "children": [ - { - "label": "F20.0", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F200" - ] - } - }, - { - "label": "F20.1", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F201" - ] - } - }, - { - "label": "F20.2", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F202" - ] - } - }, - { - "label": "F20.3", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F203" - ] - } - }, - { - "label": "F20.4", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F204" - ] - } - }, - { - "label": "F20.5", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F205" - ] - } - }, - { - "label": "F20.6", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F206" - ] - } - }, - { - "label": "F20.8", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F208" - ] - } - }, - { - "label": "F20.9", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F209" - ] - } - } - ] - }, - { - "label": "F22", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F22" - ] - }, - "children": [ - { - "label": "F22.0", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F220" - ] - } - }, - { - "label": "F22.8", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F228" - ] - } - }, - { - "label": "F22.9", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F229" - ] - } - } - ] - }, - { - "label": "F24", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F24" - ] - } - } - ] - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/tree/prefix_range/kh-content.csv", - "name": "kh_diagnose", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "icd_code", - "type": "STRING" - }, - { - "name": "entlassungsdatum", - "type": "DATE" - }, - { - "name": "aufnahmedatum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/content.csv b/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/content.csv deleted file mode 100644 index b9727b31a9..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/content.csv +++ /dev/null @@ -1,5 +0,0 @@ -pid,datum,test_column,present_column -1,2012-01-01,"A1",is_set -2,2010-07-15,"B2",is_set -3,2013-11-10,"A1", -4,2012-11-11,"B2", diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/expected.csv b/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/expected.csv deleted file mode 100644 index 57ecb1e80c..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/expected.csv +++ /dev/null @@ -1,2 +0,0 @@ -result,dates -1,{2012-01-01/2012-01-01} diff --git a/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/with_parent.test.json b/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/with_parent.test.json deleted file mode 100644 index 7610cfde25..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/tree/with_parent/with_parent.test.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "type": "QUERY_TEST", - "sqlSpec": { - "isEnabled": true - }, - "label": "Tree concept resolving a deep child and it's parents", - "expectedCsv": "tests/sql/tree/with_parent/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "ids": [ - "test_tree.test_child1.test_child2" - ], - "tables": [ - { - "id": "test_tree.test_column", - "filters": [] - } - ] - } - }, - "concepts": [ - { - "label": "test_tree", - "type": "TREE", - "connectors": { - "label": "tree_label", - "name": "test_column", - "column": "test_table.test_column", - "validityDates": { - "label": "datum", - "column": "test_table.datum" - } - }, - "children": [ - { - "label": "test_child1", - "condition": { - "type": "AND", - "conditions": [ - { - "type": "EQUAL", - "values": [ - "A1" - ] - }, - { - "type": "NOT", - "condition": { - "type": "EQUAL", - "values": [ - "B2" - ] - } - } - ] - }, - "children": [ - { - "label": "test_child2", - "condition": { - "type": "PRESENT", - "column": "present_column" - }, - "children": [] - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/sql/tree/with_parent/content.csv", - "name": "test_table", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - }, - { - "name": "present_column", - "type": "STRING" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/yes/cqyes.test.json b/backend/src/test/resources/EXCLUDED_sql/yes/cqyes.test.json deleted file mode 100644 index 213c64f0dc..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/yes/cqyes.test.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "QUERY_TEST", - "label": "CQYES Test", - "expectedCsv": "tests/sql/yes/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "YES" - } - }, - "concepts": [ - ], - "content": { - "tables": [ - { - "csv": "tests/sql/yes/entities.csv", - "name": "no-op", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - } - ] - } - ] - } -} diff --git a/backend/src/test/resources/EXCLUDED_sql/yes/entities.csv b/backend/src/test/resources/EXCLUDED_sql/yes/entities.csv deleted file mode 100644 index 0ddcb9f291..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/yes/entities.csv +++ /dev/null @@ -1,8 +0,0 @@ -pid,datum -1, -2, -23, -3, -4, -5, -6, diff --git a/backend/src/test/resources/EXCLUDED_sql/yes/expected.csv b/backend/src/test/resources/EXCLUDED_sql/yes/expected.csv deleted file mode 100644 index 0a872351ef..0000000000 --- a/backend/src/test/resources/EXCLUDED_sql/yes/expected.csv +++ /dev/null @@ -1,8 +0,0 @@ -result,dates -1,{} -2,{} -23,{} -3,{} -4,{} -5,{} -6,{} diff --git a/backend/src/test/resources/tests/form/shared/abc.concept.json b/backend/src/test/resources/tests/form/shared/abc.concept.json index c0791d21e0..e7552d9d23 100644 --- a/backend/src/test/resources/tests/form/shared/abc.concept.json +++ b/backend/src/test/resources/tests/form/shared/abc.concept.json @@ -28,16 +28,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": ["A"] }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": ["B"] }, "children": [] } diff --git a/backend/src/test/resources/tests/query/ABS_EXPORT/ABS_EXPORT_Query.test.json b/backend/src/test/resources/tests/query/ABS_EXPORT/ABS_EXPORT_Query.test.json index 4a35ead38e..6370900b27 100644 --- a/backend/src/test/resources/tests/query/ABS_EXPORT/ABS_EXPORT_Query.test.json +++ b/backend/src/test/resources/tests/query/ABS_EXPORT/ABS_EXPORT_Query.test.json @@ -88,19 +88,17 @@ "children": [ { "label": "test_child1", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, { "label": "test_child2", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/COMMON_CONCEPT_ICD_QUERY/COMMON_CONCEPT_ICD_QUERY.test.json b/backend/src/test/resources/tests/query/COMMON_CONCEPT_ICD_QUERY/COMMON_CONCEPT_ICD_QUERY.test.json index d373661e73..3b6fc0179d 100644 --- a/backend/src/test/resources/tests/query/COMMON_CONCEPT_ICD_QUERY/COMMON_CONCEPT_ICD_QUERY.test.json +++ b/backend/src/test/resources/tests/query/COMMON_CONCEPT_ICD_QUERY/COMMON_CONCEPT_ICD_QUERY.test.json @@ -1,205 +1,209 @@ { - "type": "QUERY_TEST", - "label": "COMMON_CONCEPT_ICD_QUERY Test", - "expectedCsv": "tests/query/COMMON_CONCEPT_ICD_QUERY/expected-kh.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "DATE_RESTRICTION", - "dateRange": { - "min": "2017-01-01", - "max": "2017-12-31" - }, - "child": { - "type": "CONCEPT", - "ids": [ - "icd.f00$2df99.f20$2df29.f20" - ], - "label": "F20", - "tables": [ - { - "id": "icd.kh_diagnose_icd_code", - "filters": [] - } - ] - } - } - ] - } - }, - "concepts": [ - { - "label": "ICD", - "type": "TREE", - "additionalInfos": [ - { - "key": "ICD-Codes", - "value": "Historisierung bis einschließlich des Jahres 2018" - } - ], - "connectors": [ - { - "label": "KH-Diagnose", - "name": "kh_diagnose_icd_code", - "column": "kh_diagnose.icd_code", - "validityDates": [ - { - "label": "Entlassungsdatum", - "column": "kh_diagnose.entlassungsdatum" - }, - { - "label": "Aufnahmedatum", - "column": "kh_diagnose.aufnahmedatum" - } - ], - "filters": [] - } - ], - "children": [ - { - "label": "F00-F99", - "description": "Psychische und Verhaltensstörungen", - "condition": { - "type": "PREFIX_RANGE", - "min": "F00", - "max": "F99" - }, - "children": [ - { - "label": "F20-F29", - "description": "Schizophrenie, schizotype und wahnhafte Störungen", - "condition": { - "type": "PREFIX_RANGE", - "min": "F20", - "max": "F29" - }, - "children": [ - { - "label": "F20", - "description": "Schizophrenie", - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F20" - ] - }, - "children": [ - { - "label": "F20.0", - "description": "Paranoide Schizophrenie", - "additionalInfos": [ - { - "key": "Stichworte", - "value": "Paranoide Schizophrenie -- Paranoid-halluzinatorische Schizophrenie -- Paranoide Schizophrenie mit Halluzination -- Paraphrenie -- Paranoid-schizophrene Psychose -- Akute Paraphrenie -- Paraphrene Schizophrenie -- Akute paranoide Schizophrenie" - } - ], - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F200" - ] - } - }, - { - "label": "F20.1", - "description": "Hebephrene Schizophrenie", - "additionalInfos": [ - { - "key": "Stichworte", - "value": "Hebephrenie -- Hebephrene Schizophrenie -- Akute Hebephrenie -- Hebephrene Demenz -- Hebephrene Dementia praecox -- Desintegrative Schizophrenie -- Desorganisierte Schizophrenie -- Jugendirresein" - } - ], - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F201" - ] - } - }, - { - "label": "F20.4", - "description": "Postschizophrene Depression", - "additionalInfos": [ - { - "key": "Stichworte", - "value": "Postschizophrene Depression" - } - ], - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F204" - ] - } - }, - { - "label": "F20.5", - "description": "Schizophrenes Residuum", - "additionalInfos": [ - { - "key": "Stichworte", - "value": "Schizophrenes Residuum -- Schizophrener Restzustand -- Chronischer Morbus Bleuler -- Schizophrener Defekt -- Chronische Schizophrenie a.n.k. -- Residuale Schizophrenie -- Schizophrener Residualzustand -- Chronische undifferenzierte Schizophrenie" - } - ], - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F205" - ] - } - }, - { - "label": "F20.6", - "description": "Schizophrenia simplex", - "additionalInfos": [ - { - "key": "Stichworte", - "value": "Schizophrenia simplex -- Akute primäre Schizophrenie -- Akute einfache Schizophrenie" - } - ], - "condition": { - "type": "PREFIX_LIST", - "prefixes": [ - "F206" - ] - } - } - ] - } - ] - } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/query/COMMON_CONCEPT_ICD_QUERY/kh-content.csv", - "name": "kh_diagnose", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "icd_code", - "type": "STRING" - }, - { - "name": "entlassungsdatum", - "type": "DATE" - }, - { - "name": "aufnahmedatum", - "type": "DATE" - } - ] - } - ] - } + "type": "QUERY_TEST", + "sqlSpec": { + "isEnabled": false, + "comment" : "Prefix not supported in SQL Mode." + }, + "label": "COMMON_CONCEPT_ICD_QUERY Test", + "expectedCsv": "tests/query/COMMON_CONCEPT_ICD_QUERY/expected-kh.csv", + "query": { + "type": "CONCEPT_QUERY", + "root": { + "type": "AND", + "children": [ + { + "type": "DATE_RESTRICTION", + "dateRange": { + "min": "2017-01-01", + "max": "2017-12-31" + }, + "child": { + "type": "CONCEPT", + "ids": [ + "icd.f00$2df99.f20$2df29.f20" + ], + "label": "F20", + "tables": [ + { + "id": "icd.kh_diagnose_icd_code", + "filters": [] + } + ] + } + } + ] + } + }, + "concepts": [ + { + "label": "ICD", + "type": "TREE", + "additionalInfos": [ + { + "key": "ICD-Codes", + "value": "Historisierung bis einschließlich des Jahres 2018" + } + ], + "connectors": [ + { + "label": "KH-Diagnose", + "name": "kh_diagnose_icd_code", + "column": "kh_diagnose.icd_code", + "validityDates": [ + { + "label": "Entlassungsdatum", + "column": "kh_diagnose.entlassungsdatum" + }, + { + "label": "Aufnahmedatum", + "column": "kh_diagnose.aufnahmedatum" + } + ], + "filters": [] + } + ], + "children": [ + { + "label": "F00-F99", + "description": "Psychische und Verhaltensstörungen", + "condition": { + "type": "PREFIX_RANGE", + "min": "F00", + "max": "F99" + }, + "children": [ + { + "label": "F20-F29", + "description": "Schizophrenie, schizotype und wahnhafte Störungen", + "condition": { + "type": "PREFIX_RANGE", + "min": "F20", + "max": "F29" + }, + "children": [ + { + "label": "F20", + "description": "Schizophrenie", + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F20" + ] + }, + "children": [ + { + "label": "F20.0", + "description": "Paranoide Schizophrenie", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Paranoide Schizophrenie -- Paranoid-halluzinatorische Schizophrenie -- Paranoide Schizophrenie mit Halluzination -- Paraphrenie -- Paranoid-schizophrene Psychose -- Akute Paraphrenie -- Paraphrene Schizophrenie -- Akute paranoide Schizophrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F200" + ] + } + }, + { + "label": "F20.1", + "description": "Hebephrene Schizophrenie", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Hebephrenie -- Hebephrene Schizophrenie -- Akute Hebephrenie -- Hebephrene Demenz -- Hebephrene Dementia praecox -- Desintegrative Schizophrenie -- Desorganisierte Schizophrenie -- Jugendirresein" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F201" + ] + } + }, + { + "label": "F20.4", + "description": "Postschizophrene Depression", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Postschizophrene Depression" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F204" + ] + } + }, + { + "label": "F20.5", + "description": "Schizophrenes Residuum", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Schizophrenes Residuum -- Schizophrener Restzustand -- Chronischer Morbus Bleuler -- Schizophrener Defekt -- Chronische Schizophrenie a.n.k. -- Residuale Schizophrenie -- Schizophrener Residualzustand -- Chronische undifferenzierte Schizophrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F205" + ] + } + }, + { + "label": "F20.6", + "description": "Schizophrenia simplex", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Schizophrenia simplex -- Akute primäre Schizophrenie -- Akute einfache Schizophrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F206" + ] + } + } + ] + } + ] + } + ] + } + ] + } + ], + "content": { + "tables": [ + { + "csv": "tests/query/COMMON_CONCEPT_ICD_QUERY/kh-content.csv", + "name": "kh_diagnose", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ + { + "name": "icd_code", + "type": "STRING" + }, + { + "name": "entlassungsdatum", + "type": "DATE" + }, + { + "name": "aufnahmedatum", + "type": "DATE" + } + ] + } + ] + } } \ No newline at end of file diff --git a/backend/src/test/resources/tests/query/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE.test.json b/backend/src/test/resources/tests/query/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE.test.json index 9c5db6eefb..90bd982f81 100644 --- a/backend/src/test/resources/tests/query/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE.test.json +++ b/backend/src/test/resources/tests/query/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE/CONCEPT_DATE_RESTRICTION_WITHOUT_VALIDITYDATE.test.json @@ -50,8 +50,8 @@ "label": "test_child1", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, @@ -59,8 +59,8 @@ "label": "test_child2", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/CONCEPT_RESTRICTION_QUERY/CONCEPT_RESTRICTION.test.json b/backend/src/test/resources/tests/query/CONCEPT_RESTRICTION_QUERY/CONCEPT_RESTRICTION.test.json index df025fbb36..d37b560247 100644 --- a/backend/src/test/resources/tests/query/CONCEPT_RESTRICTION_QUERY/CONCEPT_RESTRICTION.test.json +++ b/backend/src/test/resources/tests/query/CONCEPT_RESTRICTION_QUERY/CONCEPT_RESTRICTION.test.json @@ -2,6 +2,10 @@ "type": "QUERY_TEST", "label": "CONCEPT_RESTRICTION Test", "expectedCsv": "tests/query/CONCEPT_RESTRICTION_QUERY/expected-kh.csv", + "sqlSpec": { + "isEnabled": false, + "comment": "Prefix not supported in SQL Mode." + }, "query": { "type": "CONCEPT_QUERY", "root": { diff --git a/backend/src/test/resources/tests/query/CONCEPT_WITHOUT_VALIDITYDATE/CONCEPT_WITHOUT_VALIDITYDATE.test.json b/backend/src/test/resources/tests/query/CONCEPT_WITHOUT_VALIDITYDATE/CONCEPT_WITHOUT_VALIDITYDATE.test.json index 9b80cbc473..451d7f2c2e 100644 --- a/backend/src/test/resources/tests/query/CONCEPT_WITHOUT_VALIDITYDATE/CONCEPT_WITHOUT_VALIDITYDATE.test.json +++ b/backend/src/test/resources/tests/query/CONCEPT_WITHOUT_VALIDITYDATE/CONCEPT_WITHOUT_VALIDITYDATE.test.json @@ -42,8 +42,8 @@ "label": "test_child1", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, @@ -51,8 +51,8 @@ "label": "test_child2", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/CONNECTOR_CONDITION/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/CONNECTOR_CONDITION/SIMPLE_TREECONCEPT_Query.test.json index db287a6d8b..b024e9e07f 100644 --- a/backend/src/test/resources/tests/query/CONNECTOR_CONDITION/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/CONNECTOR_CONDITION/SIMPLE_TREECONCEPT_Query.test.json @@ -38,16 +38,16 @@ { "label": "a1", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, { "label": "b2", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/DELETE_IMPORT_TESTS/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/DELETE_IMPORT_TESTS/SIMPLE_TREECONCEPT_Query.test.json index 084bdf7406..95496145d0 100644 --- a/backend/src/test/resources/tests/query/DELETE_IMPORT_TESTS/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/DELETE_IMPORT_TESTS/SIMPLE_TREECONCEPT_Query.test.json @@ -1,104 +1,110 @@ { - "type": "QUERY_TEST", - "label": "DELETE_IMPORT_TESTS Test", - "expectedCsv": "tests/query/DELETE_IMPORT_TESTS/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "ids": [ - "test_tree.test_child1" - ], - "tables": [ - { - "id": "test_tree.test_column", - "filters": [] - }, - { - "id": "test_tree.test_column2", - "filters": [] - } - ] + "type": "QUERY_TEST", + "label": "DELETE_IMPORT_TESTS Test", + "expectedCsv": "tests/query/DELETE_IMPORT_TESTS/expected.csv", + "query": { + "type": "CONCEPT_QUERY", + "root": { + "type": "CONCEPT", + "ids": [ + "test_tree.test_child1" + ], + "tables": [ + { + "id": "test_tree.test_column", + "filters": [] + }, + { + "id": "test_tree.test_column2", + "filters": [] } - }, - "concepts": [ + ] + } + }, + "concepts": [ + { + "label": "test_tree", + "type": "TREE", + "connectors": [ + { + "label": "tree_label", + "name": "test_column", + "column": "test_table.test_column", + "validityDates": { + "label": "datum", + "column": "test_table.datum" + } + }, { - "label": "test_tree", - "type":"TREE", - "connectors": [ - { - "label": "tree_label", - "name": "test_column", - "column": "test_table.test_column", - "validityDates": { - "label": "datum", - "column": "test_table.datum" - } - }, - { - "label": "tree_label", - "name": "test_column2", - "column": "test_table2.test_column", - "validityDates": { - "label": "datum", - "column": "test_table2.datum" - } - } - ], - "children": [ - { - "label": "test_child1", - "description": " ", - "condition": {"type": "PREFIX_LIST", "prefixes": "A1"}, - "children": [] - }, - { - "label": "test_child2", - "description": " ", - "condition": {"type": "PREFIX_LIST", "prefixes": "B2"}, - "children": [] - } - ] + "label": "tree_label", + "name": "test_column2", + "column": "test_table2.test_column", + "validityDates": { + "label": "datum", + "column": "test_table2.datum" + } } - ], - "content": { - "tables": [ + ], + "children": [ + { + "label": "test_child1", + "description": " ", + "condition": { + "type": "EQUAL", + "values": "A1" + }, + "children": [] + }, + { + "label": "test_child2", + "description": " ", + "condition": { + "type": "EQUAL", + "values": "B2" + }, + "children": [] + } + ] + } + ], + "content": { + "tables": [ + { + "csv": "tests/query/DELETE_IMPORT_TESTS/content1.csv", + "name": "test_table", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ { - "csv": "tests/query/DELETE_IMPORT_TESTS/content1.csv", - "name": "test_table", - "primaryColumn" : { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] + "name": "datum", + "type": "DATE" }, { - "csv": "tests/query/DELETE_IMPORT_TESTS/content2.csv", - "name": "test_table2", - "primaryColumn" : { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] + "name": "test_column", + "type": "STRING" } - ] - } + ] + }, + { + "csv": "tests/query/DELETE_IMPORT_TESTS/content2.csv", + "name": "test_table2", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ + { + "name": "datum", + "type": "DATE" + }, + { + "name": "test_column", + "type": "STRING" + } + ] + } + ] + } } diff --git a/backend/src/test/resources/tests/query/LOGICAL/AND/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/LOGICAL/AND/SIMPLE_TREECONCEPT_Query.test.json index f21dea72c4..8727fa54ea 100644 --- a/backend/src/test/resources/tests/query/LOGICAL/AND/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/LOGICAL/AND/SIMPLE_TREECONCEPT_Query.test.json @@ -49,16 +49,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/LOGICAL/AND_NEGATION/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/LOGICAL/AND_NEGATION/SIMPLE_TREECONCEPT_Query.test.json index 69d3b7151b..b2c40ffc82 100644 --- a/backend/src/test/resources/tests/query/LOGICAL/AND_NEGATION/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/LOGICAL/AND_NEGATION/SIMPLE_TREECONCEPT_Query.test.json @@ -53,16 +53,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/LOGICAL/AND_WITH_EXCLUDE_TIME/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/LOGICAL/AND_WITH_EXCLUDE_TIME/SIMPLE_TREECONCEPT_Query.test.json index 79a22238b5..457264cf62 100644 --- a/backend/src/test/resources/tests/query/LOGICAL/AND_WITH_EXCLUDE_TIME/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/LOGICAL/AND_WITH_EXCLUDE_TIME/SIMPLE_TREECONCEPT_Query.test.json @@ -4,7 +4,7 @@ "expectedCsv": "tests/query/LOGICAL/AND_WITH_EXCLUDE_TIME/expected.csv", "query": { "type": "CONCEPT_QUERY", - "dateAggregationMode" : "LOGICAL", + "dateAggregationMode": "LOGICAL", "root": { "type": "AND", "children": [ @@ -67,16 +67,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/LOGICAL/OR/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/LOGICAL/OR/SIMPLE_TREECONCEPT_Query.test.json index e306d957c6..7182348e4b 100644 --- a/backend/src/test/resources/tests/query/LOGICAL/OR/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/LOGICAL/OR/SIMPLE_TREECONCEPT_Query.test.json @@ -57,16 +57,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/LOGICAL/OR_AND/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/LOGICAL/OR_AND/SIMPLE_TREECONCEPT_Query.test.json index e20dcbb384..432d322545 100644 --- a/backend/src/test/resources/tests/query/LOGICAL/OR_AND/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/LOGICAL/OR_AND/SIMPLE_TREECONCEPT_Query.test.json @@ -90,16 +90,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/LOGICAL/OR_DATE_LOGICAL/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/LOGICAL/OR_DATE_LOGICAL/SIMPLE_TREECONCEPT_Query.test.json index e17fa70e18..de618aaec0 100644 --- a/backend/src/test/resources/tests/query/LOGICAL/OR_DATE_LOGICAL/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/LOGICAL/OR_DATE_LOGICAL/SIMPLE_TREECONCEPT_Query.test.json @@ -58,16 +58,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/MERGE/AND_DURATION_SUM/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/MERGE/AND_DURATION_SUM/SIMPLE_TREECONCEPT_Query.test.json index 351923374b..99cee173b9 100644 --- a/backend/src/test/resources/tests/query/MERGE/AND_DURATION_SUM/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/MERGE/AND_DURATION_SUM/SIMPLE_TREECONCEPT_Query.test.json @@ -57,16 +57,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/MERGE/AND_EVENT_DATE_EXCLUDED/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/MERGE/AND_EVENT_DATE_EXCLUDED/SIMPLE_TREECONCEPT_Query.test.json index dfb8ad9b93..27db81197b 100644 --- a/backend/src/test/resources/tests/query/MERGE/AND_EVENT_DATE_EXCLUDED/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/MERGE/AND_EVENT_DATE_EXCLUDED/SIMPLE_TREECONCEPT_Query.test.json @@ -4,13 +4,13 @@ "expectedCsv": "tests/query/MERGE/AND_EVENT_DATE_EXCLUDED/expected.csv", "query": { "type": "CONCEPT_QUERY", - "dateAggregationMode" : "MERGE", + "dateAggregationMode": "MERGE", "root": { "type": "AND", "children": [ { "type": "CONCEPT", - "excludeFromTimeAggregation" : true, + "excludeFromTimeAggregation": true, "ids": [ "tree.a" ], @@ -44,9 +44,9 @@ "connectors": { "name": "connector", "column": "table.column", - "selects" : { - "type" : "EVENT_DATE_UNION", - "name" : "date_union" + "selects": { + "type": "EVENT_DATE_UNION", + "name": "date_union" }, "validityDates": { "name": "datum", @@ -57,16 +57,16 @@ { "name": "a", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "name": "b", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/MULTIPLE_CONNECTORS_QUERY/MULTIPLE_CONNECTORS_QUERY.test.json b/backend/src/test/resources/tests/query/MULTIPLE_CONNECTORS_QUERY/MULTIPLE_CONNECTORS_QUERY.test.json index 00324a6099..dc879269a7 100644 --- a/backend/src/test/resources/tests/query/MULTIPLE_CONNECTORS_QUERY/MULTIPLE_CONNECTORS_QUERY.test.json +++ b/backend/src/test/resources/tests/query/MULTIPLE_CONNECTORS_QUERY/MULTIPLE_CONNECTORS_QUERY.test.json @@ -1,402 +1,405 @@ { - "type": "QUERY_TEST", - "label": "MULTIPLE_CONNECTORS_QUERY Test", - "expectedCsv": "tests/query/MULTIPLE_CONNECTORS_QUERY/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "AND", - "children": [ - { - "type": "CONCEPT", - "ids": [ - "icd.f00$2df99" - ], - "label": "F00-F99", - "tables": [ - { - "id": "icd.kh$5fdiagnose$5ficd$5fcode", - "filters": [] - }, - { - "id": "icd.au$5ffall", - "filters": [] - } - ] - }, - { - "type": "CONCEPT", - "ids": [ - "icd.f00$2df99.f20$2df29" - ], - "label": "F20-F29", - "tables": [ - { - "id": "icd.kh$5fdiagnose$5ficd$5fcode", - "filters": [] - } - ] - } - ] + "type": "QUERY_TEST", + "label": "MULTIPLE_CONNECTORS_QUERY Test", + "expectedCsv": "tests/query/MULTIPLE_CONNECTORS_QUERY/expected.csv", + "sqlSpec": { + "isEnabled": false, + "comment": "Prefix not supported in SQL Mode." + }, + "query": { + "type": "CONCEPT_QUERY", + "root": { + "type": "AND", + "children": [ + { + "type": "CONCEPT", + "ids": [ + "icd.f00$2df99" + ], + "label": "F00-F99", + "tables": [ + { + "id": "icd.kh$5fdiagnose$5ficd$5fcode", + "filters": [] + }, + { + "id": "icd.au$5ffall", + "filters": [] + } + ] + }, + { + "type": "CONCEPT", + "ids": [ + "icd.f00$2df99.f20$2df29" + ], + "label": "F20-F29", + "tables": [ + { + "id": "icd.kh$5fdiagnose$5ficd$5fcode", + "filters": [] + } + ] } - }, - "concepts": [ + ] + } + }, + "concepts": [ + { + "label": "ICD", + "type": "TREE", + "additionalInfos": [ { - "label" : "ICD", - "type" : "TREE", - "additionalInfos" : [ - { - "key" : "ICD-Codes", - "value" : "Historisierung bis einschließlich des Jahres 2018" - } - ], - "connectors" : [ + "key": "ICD-Codes", + "value": "Historisierung bis einschließlich des Jahres 2018" + } + ], + "connectors": [ + { + "label": "KH-Diagnose", + "name": "kh_diagnose_icd_code", + "column": "kh_diagnose.icd_code", + "validityDates": [ + { + "label": "Entlassungsdatum", + "column": "kh_diagnose.entlassungsdatum" + }, + { + "label": "Aufnahmedatum", + "column": "kh_diagnose.aufnahmedatum" + } + ], + "filters": [] + }, + { + "label": "AU-Diagnose", + "name": "au_fall", + "column": "au_diagnose.icd_code", + "validityDates": [ + { + "label": "AU-Beginn", + "column": "au_diagnose.au_beginn" + }, + { + "label": "AU-Ende", + "column": "au_diagnose.au_ende" + }, + { + "label": "AU-Zeit", + "column": "au_diagnose.au" + } + ], + "filters": [] + } + ], + "children": [ + { + "label": "F00-F99", + "description": "Psychische und Verhaltensstörungen", + "condition": { + "type": "PREFIX_RANGE", + "min": "F00", + "max": "F99" + }, + "children": [ + { + "label": "F20-F29", + "description": "Schizophrenie, schizotype und wahnhafte Störungen", + "condition": { + "type": "PREFIX_RANGE", + "min": "F20", + "max": "F29" + }, + "children": [ { - "label" : "KH-Diagnose", - "name" : "kh_diagnose_icd_code", - "column" : "kh_diagnose.icd_code", - "validityDates" : [ + "label": "F20", + "description": "Schizophrenie", + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F20" + ] + }, + "children": [ + { + "label": "F20.0", + "description": "Paranoide Schizophrenie", + "additionalInfos": [ { - "label" : "Entlassungsdatum", - "column" : "kh_diagnose.entlassungsdatum" - }, + "key": "Stichworte", + "value": "Paranoide Schizophrenie -- Paranoid-halluzinatorische Schizophrenie -- Paranoide Schizophrenie mit Halluzination -- Paraphrenie -- Paranoid-schizophrene Psychose -- Akute Paraphrenie -- Paraphrene Schizophrenie -- Akute paranoide Schizophrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F200" + ] + } + }, + { + "label": "F20.1", + "description": "Hebephrene Schizophrenie", + "additionalInfos": [ { - "label" : "Aufnahmedatum", - "column" : "kh_diagnose.aufnahmedatum" + "key": "Stichworte", + "value": "Hebephrenie -- Hebephrene Schizophrenie -- Akute Hebephrenie -- Hebephrene Demenz -- Hebephrene Dementia praecox -- Desintegrative Schizophrenie -- Desorganisierte Schizophrenie -- Jugendirresein" } - ], - "filters" : [] - }, - { - "label" : "AU-Diagnose", - "name" : "au_fall", - "column" : "au_diagnose.icd_code", - "validityDates" : [ + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F201" + ] + } + }, + { + "label": "F20.2", + "description": "Katatone Schizophrenie", + "additionalInfos": [ { - "label" : "AU-Beginn", - "column" : "au_diagnose.au_beginn" - }, + "key": "Stichworte", + "value": "Katatone Schizophrenie -- Katatonie -- Katatone Demenz -- Katatone Erregung -- Akute Katatonie -- Katatoner Erregungszustand -- Katatoner Spannungszustand -- Katatone Agitation -- Schizophrene Flexibilitas cerea -- Schizophrene Katalepsie -- Akute katatone Katalepsie -- Kataleptische Schizophrenie -- Flexibilitas cerea bei Schizophrenie -- Katatoner Stupor -- Schizophrene Katatonie -- Katatonischer Stupor" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F202" + ] + } + }, + { + "label": "F20.3", + "description": "Undifferenzierte Schizophrenie", + "additionalInfos": [ { - "label" : "AU-Ende", - "column" : "au_diagnose.au_ende" - }, + "key": "Stichworte", + "value": "Undifferenzierte Schizophrenie -- Atypische Schizophrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F203" + ] + } + }, + { + "label": "F20.4", + "description": "Postschizophrene Depression", + "additionalInfos": [ { - "label" : "AU-Zeit", - "column" : "au_diagnose.au" + "key": "Stichworte", + "value": "Postschizophrene Depression" } - ], - "filters" : [] - } - ], - "children" : [ - { - "label" : "F00-F99", - "description" : "Psychische und Verhaltensstörungen", - "condition" : { - "type" : "PREFIX_RANGE", - "min" : "F00", - "max" : "F99" + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F204" + ] + } }, - "children" : [ + { + "label": "F20.5", + "description": "Schizophrenes Residuum", + "additionalInfos": [ { - "label" : "F20-F29", - "description" : "Schizophrenie, schizotype und wahnhafte Störungen", - "condition" : { - "type" : "PREFIX_RANGE", - "min" : "F20", - "max" : "F29" - }, - "children" : [ - { - "label" : "F20", - "description" : "Schizophrenie", - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F20" - ] - }, - "children" : [ - { - "label" : "F20.0", - "description" : "Paranoide Schizophrenie", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Paranoide Schizophrenie -- Paranoid-halluzinatorische Schizophrenie -- Paranoide Schizophrenie mit Halluzination -- Paraphrenie -- Paranoid-schizophrene Psychose -- Akute Paraphrenie -- Paraphrene Schizophrenie -- Akute paranoide Schizophrenie" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F200" - ] - } - }, - { - "label" : "F20.1", - "description" : "Hebephrene Schizophrenie", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Hebephrenie -- Hebephrene Schizophrenie -- Akute Hebephrenie -- Hebephrene Demenz -- Hebephrene Dementia praecox -- Desintegrative Schizophrenie -- Desorganisierte Schizophrenie -- Jugendirresein" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F201" - ] - } - }, - { - "label" : "F20.2", - "description" : "Katatone Schizophrenie", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Katatone Schizophrenie -- Katatonie -- Katatone Demenz -- Katatone Erregung -- Akute Katatonie -- Katatoner Erregungszustand -- Katatoner Spannungszustand -- Katatone Agitation -- Schizophrene Flexibilitas cerea -- Schizophrene Katalepsie -- Akute katatone Katalepsie -- Kataleptische Schizophrenie -- Flexibilitas cerea bei Schizophrenie -- Katatoner Stupor -- Schizophrene Katatonie -- Katatonischer Stupor" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F202" - ] - } - }, - { - "label" : "F20.3", - "description" : "Undifferenzierte Schizophrenie", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Undifferenzierte Schizophrenie -- Atypische Schizophrenie" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F203" - ] - } - }, - { - "label" : "F20.4", - "description" : "Postschizophrene Depression", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Postschizophrene Depression" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F204" - ] - } - }, - { - "label" : "F20.5", - "description" : "Schizophrenes Residuum", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Schizophrenes Residuum -- Schizophrener Restzustand -- Chronischer Morbus Bleuler -- Schizophrener Defekt -- Chronische Schizophrenie a.n.k. -- Residuale Schizophrenie -- Schizophrener Residualzustand -- Chronische undifferenzierte Schizophrenie" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F205" - ] - } - }, - { - "label" : "F20.6", - "description" : "Schizophrenia simplex", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Schizophrenia simplex -- Akute primäre Schizophrenie -- Akute einfache Schizophrenie" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F206" - ] - } - }, - { - "label" : "F20.8", - "description" : "Sonstige Schizophrenie", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Akute schizophrene Attacke -- Zönästhetische Schizophrenie -- Schizophrene Attacke -- Schizophrenie und Verwirrtheit -- Schizophreniformer Anfall -- Schizophreniforme Psychose" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F208" - ] - } - }, - { - "label" : "F20.9", - "description" : "Schizophrenie, nicht näher bezeichnet", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Schizophrenie -- Schizophrene Reaktion -- Schizophrene Demenz -- Morbus Bleuler -- Schizophrene Psychose -- Schizophrenia -- Schizophrenie-Reaktion -- Dementia praecox -- Spaltungsirresein -- Paranoide Dementia praecox" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F209" - ] - } - } - ] - }, - { - "label" : "F22", - "description" : "Anhaltende wahnhafte Störungen", - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F22" - ] - }, - "children" : [ - { - "label" : "F22.0", - "description" : "Wahnhafte Störung", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Beziehungswahn -- Wahnidee -- Wahnvorstellung -- Größenwahn -- Wahnhafte Störung -- Wahn -- Capgras-Syndrom \\[Wahnsyndrom mit Personenverkennung im Sinne der Doppelgänger-Illusion\\] -- Wahnsyndrom mit Personenverkennung im Sinne einer Doppelgängerillusion \\[Capgras-Syndrom\\] -- Verfolgungswahn -- Spätparaphrenie -- Paranoia -- Eifersuchtswahn -- Sensitiver Beziehungswahn -- Paranoid-halluzinatorische Psychose -- Paranoide Psychose -- Paranoider Zustand -- Chronische paranoide Reaktion -- Paranoides Syndrom -- Einfache paranoide Psychose -- Paranoide Charakterneurose -- Paranoider Wahn -- Paranoische Psychose -- Systematisierter Wahn -- Paranoide Wahnvorstellung -- Paranoide Halluzination" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F220" - ] - } - }, - { - "label" : "F22.8", - "description" : "Sonstige anhaltende wahnhafte Störungen", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Involutionsparaphrenie -- Dysmorphophobie -- Querulantenwahn -- Paranoia querulans -- Wahnhafte Dysmorphophobie -- Paranoides Zustandsbild bei Klimakterium -- Paranoides Zustandsbild im Involutionsalter -- Paranoides organisch bedingtes Zustandsbild im Involutionsalter -- Paranoide Involutionspsychose -- Paranoide Involutionsreaktion -- Menopausale paranoide Psychose -- Klimakterische paranoide Psychose -- Klimakterische paranoide Reaktion -- Menopausale Paraphrenie -- Klimakterische Paraphrenie" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F228" - ] - } - }, - { - "label" : "F22.9", - "description" : "Anhaltende wahnhafte Störung, nicht näher bezeichnet", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Anhaltende wahnhafte Störung -- Dementia phantastica -- Paranoides Irresein" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F229" - ] - } - } - ] - }, - { - "label" : "F24", - "description" : "Induzierte wahnhafte Störung", - "additionalInfos" : [ - { - "key" : "Stichworte", - "value" : "Induzierte wahnhafte Störung -- Induzierte Psychose -- Induzierte paranoide Psychose -- Folie à deux -- Symbiotische Psychose -- Induzierte psychotische Störung -- Induzierte paranoide Störung" - } - ], - "condition" : { - "type" : "PREFIX_LIST", - "prefixes" : [ - "F24" - ] - } - } - ] + "key": "Stichworte", + "value": "Schizophrenes Residuum -- Schizophrener Restzustand -- Chronischer Morbus Bleuler -- Schizophrener Defekt -- Chronische Schizophrenie a.n.k. -- Residuale Schizophrenie -- Schizophrener Residualzustand -- Chronische undifferenzierte Schizophrenie" } - ] - } - ] - } - ], - "content": { - "tables": [ - { - "csv": "tests/query/MULTIPLE_CONNECTORS_QUERY/kh-content.csv", - "name": "kh_diagnose", - "primaryColumn": { - "name": "pid", - "type": "STRING" - }, - "columns": [ + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F205" + ] + } + }, { - "name": "icd_code", - "type": "STRING" + "label": "F20.6", + "description": "Schizophrenia simplex", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Schizophrenia simplex -- Akute primäre Schizophrenie -- Akute einfache Schizophrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F206" + ] + } }, { - "name": "entlassungsdatum", - "type": "DATE" + "label": "F20.8", + "description": "Sonstige Schizophrenie", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Akute schizophrene Attacke -- Zönästhetische Schizophrenie -- Schizophrene Attacke -- Schizophrenie und Verwirrtheit -- Schizophreniformer Anfall -- Schizophreniforme Psychose" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F208" + ] + } }, { - "name": "aufnahmedatum", - "type": "DATE" + "label": "F20.9", + "description": "Schizophrenie, nicht näher bezeichnet", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Schizophrenie -- Schizophrene Reaktion -- Schizophrene Demenz -- Morbus Bleuler -- Schizophrene Psychose -- Schizophrenia -- Schizophrenie-Reaktion -- Dementia praecox -- Spaltungsirresein -- Paranoide Dementia praecox" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F209" + ] + } } - - ] - }, - { - "csv": "tests/query/MULTIPLE_CONNECTORS_QUERY/au-content.csv", - "name": "au_diagnose", - "primaryColumn": { - "name": "pid", - "type": "STRING" + ] }, - "columns": [ + { + "label": "F22", + "description": "Anhaltende wahnhafte Störungen", + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F22" + ] + }, + "children": [ { - "name": "icd_code", - "type": "STRING" + "label": "F22.0", + "description": "Wahnhafte Störung", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Beziehungswahn -- Wahnidee -- Wahnvorstellung -- Größenwahn -- Wahnhafte Störung -- Wahn -- Capgras-Syndrom \\[Wahnsyndrom mit Personenverkennung im Sinne der Doppelgänger-Illusion\\] -- Wahnsyndrom mit Personenverkennung im Sinne einer Doppelgängerillusion \\[Capgras-Syndrom\\] -- Verfolgungswahn -- Spätparaphrenie -- Paranoia -- Eifersuchtswahn -- Sensitiver Beziehungswahn -- Paranoid-halluzinatorische Psychose -- Paranoide Psychose -- Paranoider Zustand -- Chronische paranoide Reaktion -- Paranoides Syndrom -- Einfache paranoide Psychose -- Paranoide Charakterneurose -- Paranoider Wahn -- Paranoische Psychose -- Systematisierter Wahn -- Paranoide Wahnvorstellung -- Paranoide Halluzination" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F220" + ] + } }, { - "name": "au_beginn", - "type": "DATE" + "label": "F22.8", + "description": "Sonstige anhaltende wahnhafte Störungen", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Involutionsparaphrenie -- Dysmorphophobie -- Querulantenwahn -- Paranoia querulans -- Wahnhafte Dysmorphophobie -- Paranoides Zustandsbild bei Klimakterium -- Paranoides Zustandsbild im Involutionsalter -- Paranoides organisch bedingtes Zustandsbild im Involutionsalter -- Paranoide Involutionspsychose -- Paranoide Involutionsreaktion -- Menopausale paranoide Psychose -- Klimakterische paranoide Psychose -- Klimakterische paranoide Reaktion -- Menopausale Paraphrenie -- Klimakterische Paraphrenie" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F228" + ] + } }, { - "name": "au_ende", - "type": "DATE" - }, + "label": "F22.9", + "description": "Anhaltende wahnhafte Störung, nicht näher bezeichnet", + "additionalInfos": [ + { + "key": "Stichworte", + "value": "Anhaltende wahnhafte Störung -- Dementia phantastica -- Paranoides Irresein" + } + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F229" + ] + } + } + ] + }, + { + "label": "F24", + "description": "Induzierte wahnhafte Störung", + "additionalInfos": [ { - "name": "au", - "type": "DATE" + "key": "Stichworte", + "value": "Induzierte wahnhafte Störung -- Induzierte Psychose -- Induzierte paranoide Psychose -- Folie à deux -- Symbiotische Psychose -- Induzierte psychotische Störung -- Induzierte paranoide Störung" } - ] + ], + "condition": { + "type": "PREFIX_LIST", + "prefixes": [ + "F24" + ] + } + } + ] } - ] + ] + } + ] } + ], + "content": { + "tables": [ + { + "csv": "tests/query/MULTIPLE_CONNECTORS_QUERY/kh-content.csv", + "name": "kh_diagnose", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ + { + "name": "icd_code", + "type": "STRING" + }, + { + "name": "entlassungsdatum", + "type": "DATE" + }, + { + "name": "aufnahmedatum", + "type": "DATE" + } + ] + }, + { + "csv": "tests/query/MULTIPLE_CONNECTORS_QUERY/au-content.csv", + "name": "au_diagnose", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ + { + "name": "icd_code", + "type": "STRING" + }, + { + "name": "au_beginn", + "type": "DATE" + }, + { + "name": "au_ende", + "type": "DATE" + }, + { + "name": "au", + "type": "DATE" + } + ] + } + ] + } } \ No newline at end of file diff --git a/backend/src/test/resources/tests/query/MULTIPLE_TABLES_ICD_QUERY2/MULTIPLE_TABLES_ICD_KH_AU_QUERY_ohneFilter.test.json b/backend/src/test/resources/tests/query/MULTIPLE_TABLES_ICD_QUERY2/MULTIPLE_TABLES_ICD_KH_AU_QUERY_ohneFilter.test.json index 5236855788..aacae7f8e0 100644 --- a/backend/src/test/resources/tests/query/MULTIPLE_TABLES_ICD_QUERY2/MULTIPLE_TABLES_ICD_KH_AU_QUERY_ohneFilter.test.json +++ b/backend/src/test/resources/tests/query/MULTIPLE_TABLES_ICD_QUERY2/MULTIPLE_TABLES_ICD_KH_AU_QUERY_ohneFilter.test.json @@ -2,6 +2,10 @@ "type": "QUERY_TEST", "label": "MULTIPLE_TABLES_ICD_QUERY2 Test", "expectedCsv": "tests/query/MULTIPLE_TABLES_ICD_QUERY2/expected.csv", + "sqlSpec": { + "isEnabled": false, + "comment": "Prefix not supported in SQL Mode." + }, "query": { "type": "CONCEPT_QUERY", "root": { diff --git a/backend/src/test/resources/tests/query/MULTI_CONCEPT_QUERY_SEPARATE_DATES/MULTI_CONCEPT_QUERY_SEPARATE_DATES.test.json b/backend/src/test/resources/tests/query/MULTI_CONCEPT_QUERY_SEPARATE_DATES/MULTI_CONCEPT_QUERY_SEPARATE_DATES.test.json index 722a0580cf..c8aac830cd 100644 --- a/backend/src/test/resources/tests/query/MULTI_CONCEPT_QUERY_SEPARATE_DATES/MULTI_CONCEPT_QUERY_SEPARATE_DATES.test.json +++ b/backend/src/test/resources/tests/query/MULTI_CONCEPT_QUERY_SEPARATE_DATES/MULTI_CONCEPT_QUERY_SEPARATE_DATES.test.json @@ -54,19 +54,17 @@ "children": [ { "label": "test_child1", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A" + "type": "EQUAL", + "values": "A" }, "children": [] }, { "label": "test_child2", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B" + "type": "EQUAL", + "values": "B" }, "children": [] } @@ -95,19 +93,17 @@ "children": [ { "label": "test_child1", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "1" + "type": "EQUAL", + "values": "1" }, "children": [] }, { "label": "test_child2", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "2" + "type": "EQUAL", + "values": "2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/MULTI_CONNECTOR_QUERY_SEPARATE_DATES/MULTI_CONNECTOR_QUERY_SEPARATE_DATES.test.json b/backend/src/test/resources/tests/query/MULTI_CONNECTOR_QUERY_SEPARATE_DATES/MULTI_CONNECTOR_QUERY_SEPARATE_DATES.test.json index 9972ebd8da..41d8898371 100644 --- a/backend/src/test/resources/tests/query/MULTI_CONNECTOR_QUERY_SEPARATE_DATES/MULTI_CONNECTOR_QUERY_SEPARATE_DATES.test.json +++ b/backend/src/test/resources/tests/query/MULTI_CONNECTOR_QUERY_SEPARATE_DATES/MULTI_CONNECTOR_QUERY_SEPARATE_DATES.test.json @@ -65,17 +65,16 @@ "label": "test_child1", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, { "label": "test_child2", - "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/REL_EXPORT/PREREQUISITE_WITH_DATES/REL_EXPORT_Query.test.json b/backend/src/test/resources/tests/query/REL_EXPORT/PREREQUISITE_WITH_DATES/REL_EXPORT_Query.test.json index 6ef36b7970..227423a9f3 100644 --- a/backend/src/test/resources/tests/query/REL_EXPORT/PREREQUISITE_WITH_DATES/REL_EXPORT_Query.test.json +++ b/backend/src/test/resources/tests/query/REL_EXPORT/PREREQUISITE_WITH_DATES/REL_EXPORT_Query.test.json @@ -88,8 +88,8 @@ "label": "test_child1", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, @@ -97,8 +97,8 @@ "label": "test_child2", "description": " ", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_PRESENT_CONDITION_QUERY/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_PRESENT_CONDITION_QUERY/SIMPLE_TREECONCEPT_Query.test.json index f7da519388..762bf2efa9 100644 --- a/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_PRESENT_CONDITION_QUERY/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_PRESENT_CONDITION_QUERY/SIMPLE_TREECONCEPT_Query.test.json @@ -37,16 +37,16 @@ { "name": "a1", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, { "name": "b2", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] } diff --git a/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY/SIMPLE_TREECONCEPT_Query.test.json index fa2ff99607..91c79d991b 100644 --- a/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY/SIMPLE_TREECONCEPT_Query.test.json @@ -1,68 +1,76 @@ { - "type": "QUERY_TEST", - "label": "SIMPLE_TREECONCEPT_QUERY Test", - "expectedCsv": "tests/query/SIMPLE_TREECONCEPT_QUERY/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "ids": [ - "test_tree.test_child1" - ], - "tables": [ - { - "id": "test_tree.test_column", - "filters": [] - } - ] + "type": "QUERY_TEST", + "label": "SIMPLE_TREECONCEPT_QUERY Test", + "expectedCsv": "tests/query/SIMPLE_TREECONCEPT_QUERY/expected.csv", + "query": { + "type": "CONCEPT_QUERY", + "root": { + "type": "CONCEPT", + "ids": [ + "test_tree.test_child1" + ], + "tables": [ + { + "id": "test_tree.test_column", + "filters": [] + } + ] + } + }, + "concepts": [ + { + "label": "test_tree", + "type": "TREE", + "connectors": { + "label": "tree_label", + "name": "test_column", + "column": "test_table.test_column", + "validityDates": { + "label": "datum", + "column": "test_table.datum" } - }, - "concepts": [ + }, + "children": [ + { + "label": "test_child1", + "description": " ", + "condition": { + "type": "EQUAL", + "values": "A1" + }, + "children": [] + }, { - "label": "test_tree", - "type":"TREE", - "connectors": { - "label": "tree_label", - "name": "test_column", - "column": "test_table.test_column", - "validityDates": {"label": "datum" ,"column": "test_table.datum"} - }, - "children": [ - { - "label": "test_child1", - "description": " ", - "condition": {"type": "PREFIX_LIST", "prefixes": "A1"}, - "children": [] - }, - { - "label": "test_child2", - "description": " ", - "condition": {"type": "PREFIX_LIST", "prefixes": "B2"}, - "children": [] - } - ] + "label": "test_child2", + "condition": { + "type": "EQUAL", + "values": "B2" + }, + "children": [] } - ], - "content": { - "tables": [ - { - "csv": "tests/query/SIMPLE_TREECONCEPT_QUERY/content.csv", - "name": "test_table", - "primaryColumn" : { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - } - ] + ] } + ], + "content": { + "tables": [ + { + "csv": "tests/query/SIMPLE_TREECONCEPT_QUERY/content.csv", + "name": "test_table", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ + { + "name": "datum", + "type": "DATE" + }, + { + "name": "test_column", + "type": "STRING" + } + ] + } + ] + } } diff --git a/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/SIMPLE_TREECONCEPT_Query.test.json b/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/SIMPLE_TREECONCEPT_Query.test.json index 35fc3dbbf7..cc86bef0e6 100644 --- a/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/SIMPLE_TREECONCEPT_Query.test.json +++ b/backend/src/test/resources/tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/SIMPLE_TREECONCEPT_Query.test.json @@ -1,68 +1,76 @@ { - "type": "QUERY_TEST", - "label": "SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA Test", - "expectedCsv": "tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/expected.csv", - "query": { - "type": "CONCEPT_QUERY", - "root": { - "type": "CONCEPT", - "ids": [ - "test_tree.$c3$a41" // =Ä1 - ], - "tables": [ - { - "id": "test_tree.test_column", - "filters": [] - } - ] + "type": "QUERY_TEST", + "label": "SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA Test", + "expectedCsv": "tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/expected.csv", + "query": { + "type": "CONCEPT_QUERY", + "root": { + "type": "CONCEPT", + "ids": [ + "test_tree.$c3$a41" + // =Ä1 + ], + "tables": [ + { + "id": "test_tree.test_column", + "filters": [] + } + ] + } + }, + "concepts": [ + { + "label": "test_tree", + "type": "TREE", + "connectors": { + "label": "tree_label", + "name": "test_column", + "column": "test_table.test_column", + "validityDates": { + "label": "datum", + "column": "test_table.datum" } - }, - "concepts": [ + }, + "children": [ + { + "label": "Ä1", + "condition": { + "type": "EQUAL", + "values": "Ä1" + }, + "children": [] + }, { - "label": "test_tree", - "type":"TREE", - "connectors": { - "label": "tree_label", - "name": "test_column", - "column": "test_table.test_column", - "validityDates": {"label": "datum" ,"column": "test_table.datum"} - }, - "children": [ - { - "label": "Ä1", - "description": " ", - "condition": {"type": "EQUAL", "values": "Ä1"}, - "children": [] - }, - { - "label": "B2", - "description": " ", - "condition": {"type": "PREFIX_LIST", "prefixes": "B2"}, - "children": [] - } - ] + "label": "B2", + "condition": { + "type": "EQUAL", + "values": "B2" + }, + "children": [] } - ], - "content": { - "tables": [ - { - "csv": "tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/content.csv", - "name": "test_table", - "primaryColumn" : { - "name": "pid", - "type": "STRING" - }, - "columns": [ - { - "name": "datum", - "type": "DATE" - }, - { - "name": "test_column", - "type": "STRING" - } - ] - } - ] + ] } + ], + "content": { + "tables": [ + { + "csv": "tests/query/SIMPLE_TREECONCEPT_QUERY_SPECIAL_CHAR_DATA/content.csv", + "name": "test_table", + "primaryColumn": { + "name": "pid", + "type": "STRING" + }, + "columns": [ + { + "name": "datum", + "type": "DATE" + }, + { + "name": "test_column", + "type": "STRING" + } + ] + } + ] + } } diff --git a/backend/src/test/resources/tests/query/VALIDITY_DATE_QUERY/VALIDITY_DATE_QUERY_Query.test.json b/backend/src/test/resources/tests/query/VALIDITY_DATE_QUERY/VALIDITY_DATE_QUERY_Query.test.json index f2f8b16937..572d1ba129 100644 --- a/backend/src/test/resources/tests/query/VALIDITY_DATE_QUERY/VALIDITY_DATE_QUERY_Query.test.json +++ b/backend/src/test/resources/tests/query/VALIDITY_DATE_QUERY/VALIDITY_DATE_QUERY_Query.test.json @@ -41,16 +41,16 @@ { "name": "test_child1", "condition": { - "type": "PREFIX_LIST", - "prefixes": "A1" + "type": "EQUAL", + "values": "A1" }, "children": [] }, { "name": "test_child2", "condition": { - "type": "PREFIX_LIST", - "prefixes": "B2" + "type": "EQUAL", + "values": "B2" }, "children": [] }