diff options
author | Kristóf Marussy <kristof@marussy.com> | 2023-05-26 22:24:40 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2023-05-26 22:24:40 +0200 |
commit | d2348a15846ad861fc58b018f50a502a288bfcec (patch) | |
tree | 3a03b9eb35e9f90fd7f0e669ed00bf3aa8636982 /subprojects/store-query-viatra/src | |
parent | feat: count and aggregation literal reduction (diff) | |
download | refinery-d2348a15846ad861fc58b018f50a502a288bfcec.tar.gz refinery-d2348a15846ad861fc58b018f50a502a288bfcec.tar.zst refinery-d2348a15846ad861fc58b018f50a502a288bfcec.zip |
refactor: simplified Dnf parameter directions
Diffstat (limited to 'subprojects/store-query-viatra/src')
2 files changed, 9 insertions, 21 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java index ec880435..5b0ea61d 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java | |||
@@ -88,8 +88,7 @@ public class Dnf2PQuery { | |||
88 | List<PParameter> parameterList = new ArrayList<>(); | 88 | List<PParameter> parameterList = new ArrayList<>(); |
89 | for (var parameter : dnfQuery.getSymbolicParameters()) { | 89 | for (var parameter : dnfQuery.getSymbolicParameters()) { |
90 | var direction = switch (parameter.getDirection()) { | 90 | var direction = switch (parameter.getDirection()) { |
91 | case IN_OUT -> PParameterDirection.INOUT; | 91 | case OUT -> parameter.isUnifiable() ? PParameterDirection.INOUT : PParameterDirection.OUT; |
92 | case OUT -> PParameterDirection.OUT; | ||
93 | case IN -> throw new IllegalArgumentException("Query %s with input parameter %s is not supported" | 92 | case IN -> throw new IllegalArgumentException("Query %s with input parameter %s is not supported" |
94 | .formatted(dnfQuery, parameter.getVariable())); | 93 | .formatted(dnfQuery, parameter.getVariable())); |
95 | }; | 94 | }; |
@@ -154,9 +153,9 @@ public class Dnf2PQuery { | |||
154 | } | 153 | } |
155 | 154 | ||
156 | private void translateEquivalenceLiteral(EquivalenceLiteral equivalenceLiteral, PBody body) { | 155 | private void translateEquivalenceLiteral(EquivalenceLiteral equivalenceLiteral, PBody body) { |
157 | PVariable varSource = body.getOrCreateVariableByName(equivalenceLiteral.getLeft().getUniqueName()); | 156 | PVariable varSource = body.getOrCreateVariableByName(equivalenceLiteral.left().getUniqueName()); |
158 | PVariable varTarget = body.getOrCreateVariableByName(equivalenceLiteral.getRight().getUniqueName()); | 157 | PVariable varTarget = body.getOrCreateVariableByName(equivalenceLiteral.right().getUniqueName()); |
159 | if (equivalenceLiteral.isPositive()) { | 158 | if (equivalenceLiteral.positive()) { |
160 | new Equality(body, varSource, varTarget); | 159 | new Equality(body, varSource, varTarget); |
161 | } else { | 160 | } else { |
162 | new Inequality(body, varSource, varTarget); | 161 | new Inequality(body, varSource, varTarget); |
@@ -213,13 +212,13 @@ public class Dnf2PQuery { | |||
213 | } | 212 | } |
214 | 213 | ||
215 | private void translateConstantLiteral(ConstantLiteral constantLiteral, PBody body) { | 214 | private void translateConstantLiteral(ConstantLiteral constantLiteral, PBody body) { |
216 | var variable = body.getOrCreateVariableByName(constantLiteral.getVariable().getUniqueName()); | 215 | var variable = body.getOrCreateVariableByName(constantLiteral.variable().getUniqueName()); |
217 | new ConstantValue(body, variable, constantLiteral.getNodeId()); | 216 | new ConstantValue(body, variable, constantLiteral.nodeId()); |
218 | } | 217 | } |
219 | 218 | ||
220 | private <T> void translateAssignLiteral(AssignLiteral<T> assignLiteral, PBody body) { | 219 | private <T> void translateAssignLiteral(AssignLiteral<T> assignLiteral, PBody body) { |
221 | var variable = body.getOrCreateVariableByName(assignLiteral.getTargetVariable().getUniqueName()); | 220 | var variable = body.getOrCreateVariableByName(assignLiteral.variable().getUniqueName()); |
222 | var term = assignLiteral.getTerm(); | 221 | var term = assignLiteral.term(); |
223 | if (term instanceof ConstantTerm<T> constantTerm) { | 222 | if (term instanceof ConstantTerm<T> constantTerm) { |
224 | new ConstantValue(body, variable, constantTerm.getValue()); | 223 | new ConstantValue(body, variable, constantTerm.getValue()); |
225 | } else { | 224 | } else { |
@@ -229,7 +228,7 @@ public class Dnf2PQuery { | |||
229 | } | 228 | } |
230 | 229 | ||
231 | private void translateAssumeLiteral(AssumeLiteral assumeLiteral, PBody body) { | 230 | private void translateAssumeLiteral(AssumeLiteral assumeLiteral, PBody body) { |
232 | var evaluator = new AssumptionEvaluator(assumeLiteral.getTerm()); | 231 | var evaluator = new AssumptionEvaluator(assumeLiteral.term()); |
233 | new ExpressionEvaluation(body, evaluator, null); | 232 | new ExpressionEvaluation(body, evaluator, null); |
234 | } | 233 | } |
235 | 234 | ||
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java index 46ce37b4..a9a2f71c 100644 --- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java +++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java | |||
@@ -23,7 +23,6 @@ import tools.refinery.store.tuple.Tuple; | |||
23 | import java.util.List; | 23 | import java.util.List; |
24 | import java.util.Map; | 24 | import java.util.Map; |
25 | 25 | ||
26 | import static org.junit.jupiter.api.Assertions.assertThrows; | ||
27 | import static tools.refinery.store.query.literal.Literals.assume; | 26 | import static tools.refinery.store.query.literal.Literals.assume; |
28 | import static tools.refinery.store.query.literal.Literals.not; | 27 | import static tools.refinery.store.query.literal.Literals.not; |
29 | import static tools.refinery.store.query.term.int_.IntTerms.constant; | 28 | import static tools.refinery.store.query.term.int_.IntTerms.constant; |
@@ -707,14 +706,4 @@ class QueryTest { | |||
707 | queryEngine.flushChanges(); | 706 | queryEngine.flushChanges(); |
708 | assertResults(Map.of(), predicateResultSet); | 707 | assertResults(Map.of(), predicateResultSet); |
709 | } | 708 | } |
710 | |||
711 | @Test | ||
712 | void alwaysTrueTest() { | ||
713 | var p1 = Variable.of("p1"); | ||
714 | var predicate = Query.builder("AlwaysTrue").parameters(p1).clause().build(); | ||
715 | |||
716 | var queryBuilder = ViatraModelQueryAdapter.builder(); | ||
717 | |||
718 | assertThrows(IllegalArgumentException.class, () -> queryBuilder.queries(predicate)); | ||
719 | } | ||
720 | } | 709 | } |