From c42d391998eca46704c8699c90efd3c357442fb0 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 26 Jun 2023 19:38:03 +0200 Subject: feat: Dnf lifting Support for count and aggregation is still missing. --- .../main/java/tools/refinery/store/query/dnf/Dnf.java | 2 +- .../tools/refinery/store/query/dnf/DnfBuilder.java | 19 ++++++++++++++----- .../store/query/equality/DeepDnfEqualityChecker.java | 3 +-- .../refinery/store/query/term/AnyDataVariable.java | 10 ++++++++++ .../tools/refinery/store/query/term/NodeVariable.java | 10 ++++++++++ .../tools/refinery/store/query/term/Variable.java | 4 ++++ 6 files changed, 40 insertions(+), 8 deletions(-) (limited to 'subprojects/store-query') 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 { } public boolean isExplicitlyNamed() { - return name == null; + return name != null; } 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; import tools.refinery.store.query.dnf.callback.*; import tools.refinery.store.query.literal.Literal; -import tools.refinery.store.query.term.DataVariable; -import tools.refinery.store.query.term.NodeVariable; -import tools.refinery.store.query.term.ParameterDirection; -import tools.refinery.store.query.term.Variable; +import tools.refinery.store.query.term.*; import java.util.*; @@ -62,6 +59,18 @@ public final class DnfBuilder { return variable; } + public Variable parameter(Parameter parameter) { + return parameter(null, parameter); + } + + public Variable parameter(String name, Parameter parameter) { + var type = parameter.tryGetType(); + if (type.isPresent()) { + return parameter(name, type.get(), parameter.getDirection()); + } + return parameter(name, parameter.getDirection()); + } + public DnfBuilder parameter(Variable variable) { return parameter(variable, ParameterDirection.OUT); } @@ -129,7 +138,7 @@ public final class DnfBuilder { } public DnfBuilder clause(Class type1, ClauseCallback1Data1 callback) { - return clause(callback.toLiterals(Variable.of("v1", type1))); + return clause(callback.toLiterals(Variable.of("d1", type1))); } 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; import java.util.List; public class DeepDnfEqualityChecker implements DnfEqualityChecker { - private final CycleDetectingMapper mapper = new CycleDetectingMapper<>(Pair::toString, - this::doCheckEqual); + private final CycleDetectingMapper mapper = new CycleDetectingMapper<>(this::doCheckEqual); @Override 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 @@ -21,6 +21,16 @@ public abstract sealed class AnyDataVariable extends Variable implements AnyTerm return Optional.of(getType()); } + @Override + public boolean isNodeVariable() { + return false; + } + + @Override + public boolean isDataVariable() { + return true; + } + @Override public NodeVariable asNodeVariable() { throw new IllegalStateException("%s is a data variable".formatted(this)); 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 @@ -36,6 +36,16 @@ public final class NodeVariable extends Variable { return renew(getExplicitName()); } + @Override + public boolean isNodeVariable() { + return true; + } + + @Override + public boolean isDataVariable() { + return false; + } + @Override public NodeVariable asNodeVariable() { return this; 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 { public abstract Variable renew(); + public abstract boolean isNodeVariable(); + + public abstract boolean isDataVariable(); + public abstract NodeVariable asNodeVariable(); public abstract DataVariable asDataVariable(Class type); -- cgit v1.2.3-54-g00ecf