diff options
author | Kristóf Marussy <kristof@marussy.com> | 2023-06-26 19:38:03 +0200 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2023-06-29 02:23:01 +0200 |
commit | c42d391998eca46704c8699c90efd3c357442fb0 (patch) | |
tree | a82e7dd884b010936470111ec1be3e5aea19a213 /subprojects/store-query | |
parent | feat: remove contradictory calls in Dnf builder (diff) | |
download | refinery-c42d391998eca46704c8699c90efd3c357442fb0.tar.gz refinery-c42d391998eca46704c8699c90efd3c357442fb0.tar.zst refinery-c42d391998eca46704c8699c90efd3c357442fb0.zip |
feat: Dnf lifting
Support for count and aggregation is still missing.
Diffstat (limited to 'subprojects/store-query')
6 files changed, 40 insertions, 8 deletions
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java index 7a3e2a1e..e3c8924b 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java | |||
@@ -68,7 +68,7 @@ public final class Dnf implements Constraint { | |||
68 | } | 68 | } |
69 | 69 | ||
70 | public boolean isExplicitlyNamed() { | 70 | public boolean isExplicitlyNamed() { |
71 | return name == null; | 71 | return name != null; |
72 | } | 72 | } |
73 | 73 | ||
74 | public String getUniqueName() { | 74 | public String getUniqueName() { |
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java index 8e38ca6b..3d3b5198 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java | |||
@@ -7,10 +7,7 @@ package tools.refinery.store.query.dnf; | |||
7 | 7 | ||
8 | import tools.refinery.store.query.dnf.callback.*; | 8 | import tools.refinery.store.query.dnf.callback.*; |
9 | import tools.refinery.store.query.literal.Literal; | 9 | import tools.refinery.store.query.literal.Literal; |
10 | import tools.refinery.store.query.term.DataVariable; | 10 | import tools.refinery.store.query.term.*; |
11 | import tools.refinery.store.query.term.NodeVariable; | ||
12 | import tools.refinery.store.query.term.ParameterDirection; | ||
13 | import tools.refinery.store.query.term.Variable; | ||
14 | 11 | ||
15 | import java.util.*; | 12 | import java.util.*; |
16 | 13 | ||
@@ -62,6 +59,18 @@ public final class DnfBuilder { | |||
62 | return variable; | 59 | return variable; |
63 | } | 60 | } |
64 | 61 | ||
62 | public Variable parameter(Parameter parameter) { | ||
63 | return parameter(null, parameter); | ||
64 | } | ||
65 | |||
66 | public Variable parameter(String name, Parameter parameter) { | ||
67 | var type = parameter.tryGetType(); | ||
68 | if (type.isPresent()) { | ||
69 | return parameter(name, type.get(), parameter.getDirection()); | ||
70 | } | ||
71 | return parameter(name, parameter.getDirection()); | ||
72 | } | ||
73 | |||
65 | public DnfBuilder parameter(Variable variable) { | 74 | public DnfBuilder parameter(Variable variable) { |
66 | return parameter(variable, ParameterDirection.OUT); | 75 | return parameter(variable, ParameterDirection.OUT); |
67 | } | 76 | } |
@@ -129,7 +138,7 @@ public final class DnfBuilder { | |||
129 | } | 138 | } |
130 | 139 | ||
131 | public <T> DnfBuilder clause(Class<T> type1, ClauseCallback1Data1<T> callback) { | 140 | public <T> DnfBuilder clause(Class<T> type1, ClauseCallback1Data1<T> callback) { |
132 | return clause(callback.toLiterals(Variable.of("v1", type1))); | 141 | return clause(callback.toLiterals(Variable.of("d1", type1))); |
133 | } | 142 | } |
134 | 143 | ||
135 | public DnfBuilder clause(ClauseCallback2Data0 callback) { | 144 | public DnfBuilder clause(ClauseCallback2Data0 callback) { |
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/DeepDnfEqualityChecker.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/DeepDnfEqualityChecker.java index a212b3f5..d6171314 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/DeepDnfEqualityChecker.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/DeepDnfEqualityChecker.java | |||
@@ -14,8 +14,7 @@ import tools.refinery.store.util.CycleDetectingMapper; | |||
14 | import java.util.List; | 14 | import java.util.List; |
15 | 15 | ||
16 | public class DeepDnfEqualityChecker implements DnfEqualityChecker { | 16 | public class DeepDnfEqualityChecker implements DnfEqualityChecker { |
17 | private final CycleDetectingMapper<Pair, Boolean> mapper = new CycleDetectingMapper<>(Pair::toString, | 17 | private final CycleDetectingMapper<Pair, Boolean> mapper = new CycleDetectingMapper<>(this::doCheckEqual); |
18 | this::doCheckEqual); | ||
19 | 18 | ||
20 | @Override | 19 | @Override |
21 | public boolean dnfEqual(Dnf left, Dnf right) { | 20 | public boolean dnfEqual(Dnf left, Dnf right) { |
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/AnyDataVariable.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/AnyDataVariable.java index 192c39c5..ed6941da 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/AnyDataVariable.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/AnyDataVariable.java | |||
@@ -22,6 +22,16 @@ public abstract sealed class AnyDataVariable extends Variable implements AnyTerm | |||
22 | } | 22 | } |
23 | 23 | ||
24 | @Override | 24 | @Override |
25 | public boolean isNodeVariable() { | ||
26 | return false; | ||
27 | } | ||
28 | |||
29 | @Override | ||
30 | public boolean isDataVariable() { | ||
31 | return true; | ||
32 | } | ||
33 | |||
34 | @Override | ||
25 | public NodeVariable asNodeVariable() { | 35 | public NodeVariable asNodeVariable() { |
26 | throw new IllegalStateException("%s is a data variable".formatted(this)); | 36 | throw new IllegalStateException("%s is a data variable".formatted(this)); |
27 | } | 37 | } |
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/NodeVariable.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/NodeVariable.java index d679908a..e466f1c9 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/NodeVariable.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/NodeVariable.java | |||
@@ -37,6 +37,16 @@ public final class NodeVariable extends Variable { | |||
37 | } | 37 | } |
38 | 38 | ||
39 | @Override | 39 | @Override |
40 | public boolean isNodeVariable() { | ||
41 | return true; | ||
42 | } | ||
43 | |||
44 | @Override | ||
45 | public boolean isDataVariable() { | ||
46 | return false; | ||
47 | } | ||
48 | |||
49 | @Override | ||
40 | public NodeVariable asNodeVariable() { | 50 | public NodeVariable asNodeVariable() { |
41 | return this; | 51 | return this; |
42 | } | 52 | } |
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/Variable.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/Variable.java index 74384df3..89ef0d89 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/term/Variable.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/term/Variable.java | |||
@@ -44,6 +44,10 @@ public abstract sealed class Variable permits AnyDataVariable, NodeVariable { | |||
44 | 44 | ||
45 | public abstract Variable renew(); | 45 | public abstract Variable renew(); |
46 | 46 | ||
47 | public abstract boolean isNodeVariable(); | ||
48 | |||
49 | public abstract boolean isDataVariable(); | ||
50 | |||
47 | public abstract NodeVariable asNodeVariable(); | 51 | public abstract NodeVariable asNodeVariable(); |
48 | 52 | ||
49 | public abstract <T> DataVariable<T> asDataVariable(Class<T> type); | 53 | public abstract <T> DataVariable<T> asDataVariable(Class<T> type); |