aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-06-26 19:38:03 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-06-29 02:23:01 +0200
commitc42d391998eca46704c8699c90efd3c357442fb0 (patch)
treea82e7dd884b010936470111ec1be3e5aea19a213 /subprojects/store-query
parentfeat: remove contradictory calls in Dnf builder (diff)
downloadrefinery-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')
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java2
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java19
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/equality/DeepDnfEqualityChecker.java3
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/term/AnyDataVariable.java10
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/term/NodeVariable.java10
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/term/Variable.java4
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
8import tools.refinery.store.query.dnf.callback.*; 8import tools.refinery.store.query.dnf.callback.*;
9import tools.refinery.store.query.literal.Literal; 9import tools.refinery.store.query.literal.Literal;
10import tools.refinery.store.query.term.DataVariable; 10import tools.refinery.store.query.term.*;
11import tools.refinery.store.query.term.NodeVariable;
12import tools.refinery.store.query.term.ParameterDirection;
13import tools.refinery.store.query.term.Variable;
14 11
15import java.util.*; 12import 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;
14import java.util.List; 14import java.util.List;
15 15
16public class DeepDnfEqualityChecker implements DnfEqualityChecker { 16public 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);