aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query-interpreter/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-query-interpreter/src/main')
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/QueryInterpreterBuilder.java6
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterAdapterImpl.java8
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterBuilderImpl.java12
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterStoreAdapterImpl.java4
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/context/RelationalQueryMetaContext.java6
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/AbstractInterpretedMatcher.java2
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedFunctionalMatcher.java2
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedRelationalMatcher.java2
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/CheckEvaluator.java2
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/Dnf2PQuery.java103
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/QueryWrapperFactory.java14
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatefulMultisetAggregator.java4
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatelessMultisetAggregator.java2
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/TermEvaluator.java4
-rw-r--r--subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/ValueProviderBasedValuation.java4
15 files changed, 95 insertions, 80 deletions
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/QueryInterpreterBuilder.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/QueryInterpreterBuilder.java
index 6e167d0d..010164e2 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/QueryInterpreterBuilder.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/QueryInterpreterBuilder.java
@@ -7,9 +7,9 @@ package tools.refinery.store.query.interpreter;
7 7
8import tools.refinery.store.model.ModelStore; 8import tools.refinery.store.model.ModelStore;
9import tools.refinery.store.query.ModelQueryBuilder; 9import tools.refinery.store.query.ModelQueryBuilder;
10import tools.refinery.store.query.dnf.AnyQuery; 10import tools.refinery.logic.dnf.AnyQuery;
11import tools.refinery.store.query.dnf.Dnf; 11import tools.refinery.logic.dnf.Dnf;
12import tools.refinery.store.query.rewriter.DnfRewriter; 12import tools.refinery.logic.rewriter.DnfRewriter;
13import tools.refinery.interpreter.api.InterpreterEngineOptions; 13import tools.refinery.interpreter.api.InterpreterEngineOptions;
14import tools.refinery.interpreter.matchers.backend.IQueryBackendFactory; 14import tools.refinery.interpreter.matchers.backend.IQueryBackendFactory;
15import tools.refinery.interpreter.matchers.backend.QueryEvaluationHint; 15import tools.refinery.interpreter.matchers.backend.QueryEvaluationHint;
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterAdapterImpl.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterAdapterImpl.java
index ee527fd3..c5423223 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterAdapterImpl.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterAdapterImpl.java
@@ -7,10 +7,10 @@ package tools.refinery.store.query.interpreter.internal;
7 7
8import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
9import tools.refinery.store.model.ModelListener; 9import tools.refinery.store.model.ModelListener;
10import tools.refinery.store.query.dnf.AnyQuery; 10import tools.refinery.logic.dnf.AnyQuery;
11import tools.refinery.store.query.dnf.FunctionalQuery; 11import tools.refinery.logic.dnf.FunctionalQuery;
12import tools.refinery.store.query.dnf.Query; 12import tools.refinery.logic.dnf.Query;
13import tools.refinery.store.query.dnf.RelationalQuery; 13import tools.refinery.logic.dnf.RelationalQuery;
14import tools.refinery.store.query.resultset.AnyResultSet; 14import tools.refinery.store.query.resultset.AnyResultSet;
15import tools.refinery.store.query.resultset.EmptyResultSet; 15import tools.refinery.store.query.resultset.EmptyResultSet;
16import tools.refinery.store.query.resultset.ResultSet; 16import tools.refinery.store.query.resultset.ResultSet;
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterBuilderImpl.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterBuilderImpl.java
index 4e839b43..1791e626 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterBuilderImpl.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterBuilderImpl.java
@@ -9,12 +9,12 @@ import org.eclipse.emf.ecore.EPackage;
9import tools.refinery.interpreter.rete.recipes.RecipesPackage; 9import tools.refinery.interpreter.rete.recipes.RecipesPackage;
10import tools.refinery.store.adapter.AbstractModelAdapterBuilder; 10import tools.refinery.store.adapter.AbstractModelAdapterBuilder;
11import tools.refinery.store.model.ModelStore; 11import tools.refinery.store.model.ModelStore;
12import tools.refinery.store.query.dnf.AnyQuery; 12import tools.refinery.logic.dnf.AnyQuery;
13import tools.refinery.store.query.dnf.Dnf; 13import tools.refinery.logic.dnf.Dnf;
14import tools.refinery.store.query.rewriter.CompositeRewriter; 14import tools.refinery.logic.rewriter.CompositeRewriter;
15import tools.refinery.store.query.rewriter.DnfRewriter; 15import tools.refinery.logic.rewriter.DnfRewriter;
16import tools.refinery.store.query.rewriter.DuplicateDnfRemover; 16import tools.refinery.logic.rewriter.DuplicateDnfRemover;
17import tools.refinery.store.query.rewriter.InputParameterResolver; 17import tools.refinery.logic.rewriter.InputParameterResolver;
18import tools.refinery.store.query.interpreter.QueryInterpreterBuilder; 18import tools.refinery.store.query.interpreter.QueryInterpreterBuilder;
19import tools.refinery.store.query.interpreter.internal.localsearch.FlatCostFunction; 19import tools.refinery.store.query.interpreter.internal.localsearch.FlatCostFunction;
20import tools.refinery.store.query.interpreter.internal.matcher.RawPatternMatcher; 20import tools.refinery.store.query.interpreter.internal.matcher.RawPatternMatcher;
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterStoreAdapterImpl.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterStoreAdapterImpl.java
index 10e7a402..d1ec3e3e 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterStoreAdapterImpl.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/QueryInterpreterStoreAdapterImpl.java
@@ -11,8 +11,8 @@ import tools.refinery.interpreter.api.InterpreterEngineOptions;
11import tools.refinery.interpreter.matchers.context.IInputKey; 11import tools.refinery.interpreter.matchers.context.IInputKey;
12import tools.refinery.store.model.Model; 12import tools.refinery.store.model.Model;
13import tools.refinery.store.model.ModelStore; 13import tools.refinery.store.model.ModelStore;
14import tools.refinery.store.query.dnf.AnyQuery; 14import tools.refinery.logic.dnf.AnyQuery;
15import tools.refinery.store.query.dnf.Query; 15import tools.refinery.logic.dnf.Query;
16import tools.refinery.store.query.interpreter.QueryInterpreterStoreAdapter; 16import tools.refinery.store.query.interpreter.QueryInterpreterStoreAdapter;
17import tools.refinery.store.query.interpreter.internal.matcher.RawPatternMatcher; 17import tools.refinery.store.query.interpreter.internal.matcher.RawPatternMatcher;
18import tools.refinery.store.query.view.AnySymbolView; 18import tools.refinery.store.query.view.AnySymbolView;
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/context/RelationalQueryMetaContext.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/context/RelationalQueryMetaContext.java
index 2b1ff2b4..117e81ba 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/context/RelationalQueryMetaContext.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/context/RelationalQueryMetaContext.java
@@ -1,5 +1,5 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
@@ -48,7 +48,7 @@ public class RelationalQueryMetaContext extends AbstractQueryMetaContext {
48 } 48 }
49 var symbolView = checkKey(implyingKey); 49 var symbolView = checkKey(implyingKey);
50 var relationViewImplications = symbolView.getImpliedRelationViews(); 50 var relationViewImplications = symbolView.getImpliedRelationViews();
51 var inputKeyImplications = new HashSet<InputKeyImplication>(relationViewImplications.size()); 51 var inputKeyImplications = HashSet.<InputKeyImplication>newHashSet(relationViewImplications.size());
52 for (var relationViewImplication : relationViewImplications) { 52 for (var relationViewImplication : relationViewImplications) {
53 if (!symbolView.equals(relationViewImplication.implyingView())) { 53 if (!symbolView.equals(relationViewImplication.implyingView())) {
54 throw new IllegalArgumentException("Relation view %s returned unrelated implication %s".formatted( 54 throw new IllegalArgumentException("Relation view %s returned unrelated implication %s".formatted(
@@ -82,7 +82,7 @@ public class RelationalQueryMetaContext extends AbstractQueryMetaContext {
82 } 82 }
83 var relationView = checkKey(key); 83 var relationView = checkKey(key);
84 var functionalDependencies = relationView.getFunctionalDependencies(); 84 var functionalDependencies = relationView.getFunctionalDependencies();
85 var flattened = new HashMap<Set<Integer>, Set<Integer>>(functionalDependencies.size()); 85 var flattened = HashMap.<Set<Integer>, Set<Integer>>newHashMap(functionalDependencies.size());
86 for (var functionalDependency : functionalDependencies) { 86 for (var functionalDependency : functionalDependencies) {
87 var forEach = functionalDependency.forEach(); 87 var forEach = functionalDependency.forEach();
88 checkValidIndices(relationView, forEach); 88 checkValidIndices(relationView, forEach);
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/AbstractInterpretedMatcher.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/AbstractInterpretedMatcher.java
index 8cec0bf6..8e6a74ed 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/AbstractInterpretedMatcher.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/AbstractInterpretedMatcher.java
@@ -7,7 +7,7 @@ package tools.refinery.store.query.interpreter.internal.matcher;
7 7
8import tools.refinery.interpreter.matchers.backend.IQueryResultProvider; 8import tools.refinery.interpreter.matchers.backend.IQueryResultProvider;
9import tools.refinery.interpreter.matchers.backend.IUpdateable; 9import tools.refinery.interpreter.matchers.backend.IUpdateable;
10import tools.refinery.store.query.dnf.Query; 10import tools.refinery.logic.dnf.Query;
11import tools.refinery.store.query.resultset.AbstractResultSet; 11import tools.refinery.store.query.resultset.AbstractResultSet;
12import tools.refinery.store.query.interpreter.internal.QueryInterpreterAdapterImpl; 12import tools.refinery.store.query.interpreter.internal.QueryInterpreterAdapterImpl;
13 13
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedFunctionalMatcher.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedFunctionalMatcher.java
index 249664a4..bf707487 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedFunctionalMatcher.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedFunctionalMatcher.java
@@ -11,7 +11,7 @@ import tools.refinery.interpreter.matchers.tuple.Tuples;
11import tools.refinery.interpreter.rete.index.IterableIndexer; 11import tools.refinery.interpreter.rete.index.IterableIndexer;
12import tools.refinery.interpreter.rete.matcher.RetePatternMatcher; 12import tools.refinery.interpreter.rete.matcher.RetePatternMatcher;
13import tools.refinery.store.map.Cursor; 13import tools.refinery.store.map.Cursor;
14import tools.refinery.store.query.dnf.FunctionalQuery; 14import tools.refinery.logic.dnf.FunctionalQuery;
15import tools.refinery.store.query.interpreter.internal.QueryInterpreterAdapterImpl; 15import tools.refinery.store.query.interpreter.internal.QueryInterpreterAdapterImpl;
16import tools.refinery.store.tuple.Tuple; 16import tools.refinery.store.tuple.Tuple;
17 17
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedRelationalMatcher.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedRelationalMatcher.java
index 9278b46d..9d9c3042 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedRelationalMatcher.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/matcher/InterpretedRelationalMatcher.java
@@ -12,7 +12,7 @@ import tools.refinery.interpreter.rete.index.Indexer;
12import tools.refinery.interpreter.rete.matcher.RetePatternMatcher; 12import tools.refinery.interpreter.rete.matcher.RetePatternMatcher;
13import tools.refinery.store.map.Cursor; 13import tools.refinery.store.map.Cursor;
14import tools.refinery.store.map.Cursors; 14import tools.refinery.store.map.Cursors;
15import tools.refinery.store.query.dnf.RelationalQuery; 15import tools.refinery.logic.dnf.RelationalQuery;
16import tools.refinery.store.query.interpreter.internal.QueryInterpreterAdapterImpl; 16import tools.refinery.store.query.interpreter.internal.QueryInterpreterAdapterImpl;
17import tools.refinery.store.tuple.Tuple; 17import tools.refinery.store.tuple.Tuple;
18 18
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/CheckEvaluator.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/CheckEvaluator.java
index 4a71e879..8cfc2226 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/CheckEvaluator.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/CheckEvaluator.java
@@ -6,7 +6,7 @@
6package tools.refinery.store.query.interpreter.internal.pquery; 6package tools.refinery.store.query.interpreter.internal.pquery;
7 7
8import tools.refinery.interpreter.matchers.psystem.IValueProvider; 8import tools.refinery.interpreter.matchers.psystem.IValueProvider;
9import tools.refinery.store.query.term.Term; 9import tools.refinery.logic.term.Term;
10 10
11class CheckEvaluator extends TermEvaluator<Boolean> { 11class CheckEvaluator extends TermEvaluator<Boolean> {
12 public CheckEvaluator(Term<Boolean> term) { 12 public CheckEvaluator(Term<Boolean> term) {
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/Dnf2PQuery.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/Dnf2PQuery.java
index 24205cf4..0ffaa6b2 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/Dnf2PQuery.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/Dnf2PQuery.java
@@ -1,25 +1,10 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.query.interpreter.internal.pquery; 6package tools.refinery.store.query.interpreter.internal.pquery;
7 7
8import tools.refinery.interpreter.matchers.psystem.annotations.ParameterReference;
9import tools.refinery.interpreter.matchers.psystem.basicdeferred.*;
10import tools.refinery.interpreter.matchers.psystem.basicenumerables.*;
11import tools.refinery.interpreter.matchers.psystem.basicenumerables.Connectivity;
12import tools.refinery.store.query.Constraint;
13import tools.refinery.store.query.dnf.Dnf;
14import tools.refinery.store.query.dnf.DnfClause;
15import tools.refinery.store.query.dnf.SymbolicParameter;
16import tools.refinery.store.query.literal.*;
17import tools.refinery.store.query.term.ConstantTerm;
18import tools.refinery.store.query.term.StatefulAggregator;
19import tools.refinery.store.query.term.StatelessAggregator;
20import tools.refinery.store.query.term.Variable;
21import tools.refinery.store.query.view.AnySymbolView;
22import tools.refinery.store.util.CycleDetectingMapper;
23import tools.refinery.interpreter.matchers.backend.IQueryBackendFactory; 8import tools.refinery.interpreter.matchers.backend.IQueryBackendFactory;
24import tools.refinery.interpreter.matchers.backend.QueryEvaluationHint; 9import tools.refinery.interpreter.matchers.backend.QueryEvaluationHint;
25import tools.refinery.interpreter.matchers.context.IInputKey; 10import tools.refinery.interpreter.matchers.context.IInputKey;
@@ -28,11 +13,27 @@ import tools.refinery.interpreter.matchers.psystem.PVariable;
28import tools.refinery.interpreter.matchers.psystem.aggregations.BoundAggregator; 13import tools.refinery.interpreter.matchers.psystem.aggregations.BoundAggregator;
29import tools.refinery.interpreter.matchers.psystem.aggregations.IMultisetAggregationOperator; 14import tools.refinery.interpreter.matchers.psystem.aggregations.IMultisetAggregationOperator;
30import tools.refinery.interpreter.matchers.psystem.annotations.PAnnotation; 15import tools.refinery.interpreter.matchers.psystem.annotations.PAnnotation;
16import tools.refinery.interpreter.matchers.psystem.annotations.ParameterReference;
17import tools.refinery.interpreter.matchers.psystem.basicdeferred.*;
18import tools.refinery.interpreter.matchers.psystem.basicenumerables.Connectivity;
19import tools.refinery.interpreter.matchers.psystem.basicenumerables.*;
31import tools.refinery.interpreter.matchers.psystem.queries.PParameter; 20import tools.refinery.interpreter.matchers.psystem.queries.PParameter;
32import tools.refinery.interpreter.matchers.psystem.queries.PParameterDirection; 21import tools.refinery.interpreter.matchers.psystem.queries.PParameterDirection;
33import tools.refinery.interpreter.matchers.psystem.queries.PQuery; 22import tools.refinery.interpreter.matchers.psystem.queries.PQuery;
34import tools.refinery.interpreter.matchers.tuple.Tuple; 23import tools.refinery.interpreter.matchers.tuple.Tuple;
35import tools.refinery.interpreter.matchers.tuple.Tuples; 24import tools.refinery.interpreter.matchers.tuple.Tuples;
25import tools.refinery.logic.Constraint;
26import tools.refinery.logic.dnf.Dnf;
27import tools.refinery.logic.dnf.DnfClause;
28import tools.refinery.logic.dnf.FunctionalDependency;
29import tools.refinery.logic.dnf.SymbolicParameter;
30import tools.refinery.logic.literal.*;
31import tools.refinery.logic.term.ConstantTerm;
32import tools.refinery.logic.term.StatefulAggregator;
33import tools.refinery.logic.term.StatelessAggregator;
34import tools.refinery.logic.term.Variable;
35import tools.refinery.logic.util.CycleDetectingMapper;
36import tools.refinery.store.query.view.AnySymbolView;
36 37
37import java.util.ArrayList; 38import java.util.ArrayList;
38import java.util.HashMap; 39import java.util.HashMap;
@@ -79,15 +80,7 @@ public class Dnf2PQuery {
79 pQuery.setParameters(parameterList); 80 pQuery.setParameters(parameterList);
80 81
81 for (var functionalDependency : dnfQuery.getFunctionalDependencies()) { 82 for (var functionalDependency : dnfQuery.getFunctionalDependencies()) {
82 var functionalDependencyAnnotation = new PAnnotation("FunctionalDependency"); 83 var functionalDependencyAnnotation = getFunctionalDependencyAnnotation(functionalDependency);
83 for (var forEachVariable : functionalDependency.forEach()) {
84 var reference = new ParameterReference(forEachVariable.getUniqueName());
85 functionalDependencyAnnotation.addAttribute("forEach", reference);
86 }
87 for (var uniqueVariable : functionalDependency.unique()) {
88 var reference = new ParameterReference(uniqueVariable.getUniqueName());
89 functionalDependencyAnnotation.addAttribute("unique", reference);
90 }
91 pQuery.addAnnotation(functionalDependencyAnnotation); 84 pQuery.addAnnotation(functionalDependencyAnnotation);
92 } 85 }
93 86
@@ -108,26 +101,33 @@ public class Dnf2PQuery {
108 return pQuery; 101 return pQuery;
109 } 102 }
110 103
111 private void translateLiteral(Literal literal, PBody body) { 104 private static PAnnotation getFunctionalDependencyAnnotation(FunctionalDependency<Variable> functionalDependency) {
112 if (literal instanceof EquivalenceLiteral equivalenceLiteral) { 105 var functionalDependencyAnnotation = new PAnnotation("FunctionalDependency");
113 translateEquivalenceLiteral(equivalenceLiteral, body); 106 for (var forEachVariable : functionalDependency.forEach()) {
114 } else if (literal instanceof CallLiteral callLiteral) { 107 var reference = new ParameterReference(forEachVariable.getUniqueName());
115 translateCallLiteral(callLiteral, body); 108 functionalDependencyAnnotation.addAttribute("forEach", reference);
116 } else if (literal instanceof ConstantLiteral constantLiteral) {
117 translateConstantLiteral(constantLiteral, body);
118 } else if (literal instanceof AssignLiteral<?> assignLiteral) {
119 translateAssignLiteral(assignLiteral, body);
120 } else if (literal instanceof CheckLiteral checkLiteral) {
121 translateCheckLiteral(checkLiteral, body);
122 } else if (literal instanceof CountLiteral countLiteral) {
123 translateCountLiteral(countLiteral, body);
124 } else if (literal instanceof AggregationLiteral<?, ?> aggregationLiteral) {
125 translateAggregationLiteral(aggregationLiteral, body);
126 } else if (literal instanceof RepresentativeElectionLiteral representativeElectionLiteral) {
127 translateRepresentativeElectionLiteral(representativeElectionLiteral, body);
128 } else {
129 throw new IllegalArgumentException("Unknown literal: " + literal.toString());
130 } 109 }
110 for (var uniqueVariable : functionalDependency.unique()) {
111 var reference = new ParameterReference(uniqueVariable.getUniqueName());
112 functionalDependencyAnnotation.addAttribute("unique", reference);
113 }
114 return functionalDependencyAnnotation;
115 }
116
117 private void translateLiteral(Literal literal, PBody body) {
118 switch (literal) {
119 case EquivalenceLiteral equivalenceLiteral -> translateEquivalenceLiteral(equivalenceLiteral, body);
120 case CallLiteral callLiteral -> translateCallLiteral(callLiteral, body);
121 case ConstantLiteral constantLiteral -> translateConstantLiteral(constantLiteral, body);
122 case AssignLiteral<?> assignLiteral -> translateAssignLiteral(assignLiteral, body);
123 case CheckLiteral checkLiteral -> translateCheckLiteral(checkLiteral, body);
124 case CountLiteral countLiteral -> translateCountLiteral(countLiteral, body);
125 case AggregationLiteral<?, ?> aggregationLiteral -> translateAggregationLiteral(aggregationLiteral, body);
126 case LeftJoinLiteral<?> leftJoinLiteral -> translateLeftJoinLiteral(leftJoinLiteral, body);
127 case RepresentativeElectionLiteral representativeElectionLiteral ->
128 translateRepresentativeElectionLiteral(representativeElectionLiteral, body);
129 case null, default -> throw new IllegalArgumentException("Unknown literal: " + literal);
130 }
131 } 131 }
132 132
133 private void translateEquivalenceLiteral(EquivalenceLiteral equivalenceLiteral, PBody body) { 133 private void translateEquivalenceLiteral(EquivalenceLiteral equivalenceLiteral, PBody body) {
@@ -244,6 +244,21 @@ public class Dnf2PQuery {
244 aggregatedColumn); 244 aggregatedColumn);
245 } 245 }
246 246
247 private <T> void translateLeftJoinLiteral(LeftJoinLiteral<T> leftJoinLiteral, PBody body) {
248 var wrappedCall = wrapperFactory.maybeWrapConstraint(leftJoinLiteral);
249 var substitution = translateSubstitution(wrappedCall.remappedArguments(), body);
250 var placeholderVariable = body.getOrCreateVariableByName(
251 leftJoinLiteral.getPlaceholderVariable().getUniqueName());
252 var optionalColumn = substitution.invertIndex().get(placeholderVariable);
253 if (optionalColumn == null) {
254 throw new IllegalStateException("Placeholder variable %s not found in substitution %s"
255 .formatted(placeholderVariable, substitution));
256 }
257 var resultVariable = body.getOrCreateVariableByName(leftJoinLiteral.getResultVariable().getUniqueName());
258 new LeftJoinConstraint(body, substitution, wrappedCall.pattern(), resultVariable, optionalColumn,
259 leftJoinLiteral.getDefaultValue());
260 }
261
247 private void translateRepresentativeElectionLiteral(RepresentativeElectionLiteral literal, PBody body) { 262 private void translateRepresentativeElectionLiteral(RepresentativeElectionLiteral literal, PBody body) {
248 var substitution = translateSubstitution(literal.getArguments(), body); 263 var substitution = translateSubstitution(literal.getArguments(), body);
249 var pattern = wrapConstraintWithIdentityArguments(literal.getTarget()); 264 var pattern = wrapConstraintWithIdentityArguments(literal.getTarget());
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/QueryWrapperFactory.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/QueryWrapperFactory.java
index a710dab3..f855f1f0 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/QueryWrapperFactory.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/QueryWrapperFactory.java
@@ -16,15 +16,15 @@ import tools.refinery.interpreter.matchers.psystem.queries.PQuery;
16import tools.refinery.interpreter.matchers.psystem.queries.PVisibility; 16import tools.refinery.interpreter.matchers.psystem.queries.PVisibility;
17import tools.refinery.interpreter.matchers.tuple.Tuple; 17import tools.refinery.interpreter.matchers.tuple.Tuple;
18import tools.refinery.interpreter.matchers.tuple.Tuples; 18import tools.refinery.interpreter.matchers.tuple.Tuples;
19import tools.refinery.store.query.Constraint; 19import tools.refinery.logic.Constraint;
20import tools.refinery.store.query.dnf.Dnf; 20import tools.refinery.logic.dnf.Dnf;
21import tools.refinery.store.query.dnf.DnfUtils; 21import tools.refinery.logic.dnf.DnfUtils;
22import tools.refinery.store.query.literal.AbstractCallLiteral; 22import tools.refinery.logic.literal.AbstractCallLiteral;
23import tools.refinery.store.query.term.ParameterDirection; 23import tools.refinery.logic.term.ParameterDirection;
24import tools.refinery.store.query.term.Variable; 24import tools.refinery.logic.term.Variable;
25import tools.refinery.store.query.view.AnySymbolView; 25import tools.refinery.store.query.view.AnySymbolView;
26import tools.refinery.store.query.view.SymbolView; 26import tools.refinery.store.query.view.SymbolView;
27import tools.refinery.store.util.CycleDetectingMapper; 27import tools.refinery.logic.util.CycleDetectingMapper;
28 28
29import java.util.*; 29import java.util.*;
30import java.util.function.ToIntFunction; 30import java.util.function.ToIntFunction;
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatefulMultisetAggregator.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatefulMultisetAggregator.java
index 7552117b..936b3513 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatefulMultisetAggregator.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatefulMultisetAggregator.java
@@ -6,8 +6,8 @@
6package tools.refinery.store.query.interpreter.internal.pquery; 6package tools.refinery.store.query.interpreter.internal.pquery;
7 7
8import tools.refinery.interpreter.matchers.psystem.aggregations.IMultisetAggregationOperator; 8import tools.refinery.interpreter.matchers.psystem.aggregations.IMultisetAggregationOperator;
9import tools.refinery.store.query.term.StatefulAggregate; 9import tools.refinery.logic.term.StatefulAggregate;
10import tools.refinery.store.query.term.StatefulAggregator; 10import tools.refinery.logic.term.StatefulAggregator;
11 11
12import java.util.stream.Stream; 12import java.util.stream.Stream;
13 13
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatelessMultisetAggregator.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatelessMultisetAggregator.java
index 2da7ba87..01432a5b 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatelessMultisetAggregator.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/StatelessMultisetAggregator.java
@@ -6,7 +6,7 @@
6package tools.refinery.store.query.interpreter.internal.pquery; 6package tools.refinery.store.query.interpreter.internal.pquery;
7 7
8import tools.refinery.interpreter.matchers.psystem.aggregations.IMultisetAggregationOperator; 8import tools.refinery.interpreter.matchers.psystem.aggregations.IMultisetAggregationOperator;
9import tools.refinery.store.query.term.StatelessAggregator; 9import tools.refinery.logic.term.StatelessAggregator;
10 10
11import java.util.stream.Stream; 11import java.util.stream.Stream;
12 12
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/TermEvaluator.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/TermEvaluator.java
index ed991091..8da9ece7 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/TermEvaluator.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/TermEvaluator.java
@@ -5,8 +5,8 @@
5 */ 5 */
6package tools.refinery.store.query.interpreter.internal.pquery; 6package tools.refinery.store.query.interpreter.internal.pquery;
7 7
8import tools.refinery.store.query.term.Term; 8import tools.refinery.logic.term.Term;
9import tools.refinery.store.query.term.Variable; 9import tools.refinery.logic.term.Variable;
10import tools.refinery.interpreter.matchers.psystem.IExpressionEvaluator; 10import tools.refinery.interpreter.matchers.psystem.IExpressionEvaluator;
11import tools.refinery.interpreter.matchers.psystem.IValueProvider; 11import tools.refinery.interpreter.matchers.psystem.IValueProvider;
12 12
diff --git a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/ValueProviderBasedValuation.java b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/ValueProviderBasedValuation.java
index 4124c9bb..a69c8bd2 100644
--- a/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/ValueProviderBasedValuation.java
+++ b/subprojects/store-query-interpreter/src/main/java/tools/refinery/store/query/interpreter/internal/pquery/ValueProviderBasedValuation.java
@@ -6,8 +6,8 @@
6package tools.refinery.store.query.interpreter.internal.pquery; 6package tools.refinery.store.query.interpreter.internal.pquery;
7 7
8import tools.refinery.interpreter.matchers.psystem.IValueProvider; 8import tools.refinery.interpreter.matchers.psystem.IValueProvider;
9import tools.refinery.store.query.term.DataVariable; 9import tools.refinery.logic.term.DataVariable;
10import tools.refinery.store.query.valuation.Valuation; 10import tools.refinery.logic.valuation.Valuation;
11 11
12public record ValueProviderBasedValuation(IValueProvider valueProvider) implements Valuation { 12public record ValueProviderBasedValuation(IValueProvider valueProvider) implements Valuation {
13 @Override 13 @Override