Skip to content
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package fr.inria.corese.core.next.query.impl.kgram.tool;
package fr.inria.corese.core.next.query.impl.engine.eval;

import fr.inria.corese.core.next.query.impl.kgram.api.core.Expr;
import fr.inria.corese.core.next.query.impl.kgram.api.core.Node;

import java.util.*;
import fr.inria.corese.core.next.query.impl.engine.model.Expr;
import fr.inria.corese.core.next.query.impl.engine.model.Node;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
* Data structure: Key -> (node -> Value)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
package fr.inria.corese.core.next.query.impl.kgram.core;
package fr.inria.corese.core.next.query.impl.engine.eval;

import fr.inria.corese.core.next.query.impl.kgram.api.core.Edge;
import fr.inria.corese.core.next.query.impl.kgram.api.core.Node;
import fr.inria.corese.core.next.query.impl.kgram.api.query.Environment;
import fr.inria.corese.core.next.query.impl.kgram.api.query.Matcher;
import fr.inria.corese.core.next.query.impl.kgram.api.query.Producer;
import fr.inria.corese.core.next.query.impl.engine.pattern.Exp;
import fr.inria.corese.core.next.query.impl.engine.pattern.Query;
import fr.inria.corese.core.next.query.impl.engine.solution.Mappings;

import fr.inria.corese.core.next.query.impl.engine.model.Edge;
import fr.inria.corese.core.next.query.impl.engine.model.Node;
import fr.inria.corese.core.next.query.impl.engine.spi.Environment;
import fr.inria.corese.core.next.query.impl.engine.spi.Matcher;
import fr.inria.corese.core.next.query.impl.engine.spi.Producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,16 @@
* and open the template in the editor.
*/

package fr.inria.corese.core.next.query.impl.kgram.core;
package fr.inria.corese.core.next.query.impl.engine.eval;

import fr.inria.corese.core.next.query.impl.kgram.api.core.Filter;
import fr.inria.corese.core.next.query.impl.kgram.api.core.Node;
import fr.inria.corese.core.next.query.impl.kgram.api.query.Producer;
import fr.inria.corese.core.next.query.impl.engine.pattern.Exp;
import fr.inria.corese.core.next.query.impl.engine.pattern.Query;
import fr.inria.corese.core.next.query.impl.engine.solution.Mapping;
import fr.inria.corese.core.next.query.impl.engine.solution.Mappings;

import fr.inria.corese.core.next.query.impl.engine.model.Filter;
import fr.inria.corese.core.next.query.impl.engine.model.Node;
import fr.inria.corese.core.next.query.impl.engine.spi.Producer;
import fr.inria.corese.core.next.data.api.model.DatatypeValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
package fr.inria.corese.core.next.query.impl.kgram.tool;

import fr.inria.corese.core.next.query.impl.kgram.api.core.BindingContext;
import fr.inria.corese.core.next.query.impl.kgram.api.core.Edge;
import fr.inria.corese.core.next.query.impl.kgram.api.core.Expr;
import fr.inria.corese.core.next.query.impl.kgram.api.core.Node;
import fr.inria.corese.core.next.query.impl.kgram.api.query.Environment;
import fr.inria.corese.core.next.query.impl.kgram.api.query.ProcessVisitor;
import fr.inria.corese.core.next.query.impl.kgram.core.*;
import fr.inria.corese.core.next.query.impl.kgram.event.KgramEventDispatcher;
import fr.inria.corese.core.next.query.impl.kgram.path.Path;
package fr.inria.corese.core.next.query.impl.engine.eval;

import fr.inria.corese.core.next.query.impl.engine.pattern.Exp;
import fr.inria.corese.core.next.query.impl.engine.pattern.Query;
import fr.inria.corese.core.next.query.impl.engine.solution.Mapping;
import fr.inria.corese.core.next.query.impl.engine.solution.Mappings;

import fr.inria.corese.core.next.query.impl.engine.model.BindingContext;
import fr.inria.corese.core.next.query.impl.engine.model.Edge;
import fr.inria.corese.core.next.query.impl.engine.model.Expr;
import fr.inria.corese.core.next.query.impl.engine.model.Node;
import fr.inria.corese.core.next.query.impl.engine.spi.Environment;
import fr.inria.corese.core.next.query.impl.engine.event.ProcessVisitor;
import fr.inria.corese.core.next.query.impl.engine.event.KgramEventDispatcher;
import fr.inria.corese.core.next.query.impl.engine.path.Path;
import fr.inria.corese.core.next.data.api.model.DatatypeValue;

import java.util.Map;

public class EnvironmentImpl implements Environment {
protected static final String NOT_SUPPORTED_YET = "Not supported yet.";
protected Query query;

public EnvironmentImpl(){
Expand Down Expand Up @@ -108,93 +113,93 @@ public Map<String, DatatypeValue> getMap() {

@Override
public Edge[] getEdges() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Node[] getNodes() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Node[] getQueryNodes() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Path getPath(Node qNode) {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Mappings getMappings() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Node get(Expr variable) {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public BindingContext getBind() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}


@Override
public boolean hasBind() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public ApproximateSearchEnv getAppxSearchEnv() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public void setBind(BindingContext b) {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Iterable<Mapping> getAggregate() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public void aggregate(Mapping m, int n) {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Mapping getMapping() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public Eval getEval() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public void setEval(Eval e) {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public ProcessVisitor getVisitor() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public void setReport(DatatypeValue dt) {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}

@Override
public DatatypeValue getReport() {
throw new UnsupportedOperationException("Not supported yet.");
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,35 @@
package fr.inria.corese.core.next.query.impl.kgram.core;
package fr.inria.corese.core.next.query.impl.engine.eval;

import fr.inria.corese.core.next.query.impl.engine.event.ProcessVisitor;
import fr.inria.corese.core.next.query.impl.engine.event.ProcessVisitorDefault;
import fr.inria.corese.core.next.query.impl.engine.model.BindingContext;
import fr.inria.corese.core.next.query.impl.engine.model.Edge;
import fr.inria.corese.core.next.query.impl.engine.model.ExpType;
import fr.inria.corese.core.next.query.impl.engine.model.Expr;
import fr.inria.corese.core.next.query.impl.engine.model.Filter;
import fr.inria.corese.core.next.query.impl.engine.model.Loopable;
import fr.inria.corese.core.next.query.impl.engine.model.Node;
import fr.inria.corese.core.next.query.impl.engine.pattern.Exp;
import fr.inria.corese.core.next.query.impl.engine.pattern.Query;
import fr.inria.corese.core.next.query.impl.engine.solution.Mapping;
import fr.inria.corese.core.next.query.impl.engine.solution.MappingSet;
import fr.inria.corese.core.next.query.impl.engine.solution.Mappings;
import fr.inria.corese.core.next.query.impl.engine.solution.Memory;
import fr.inria.corese.core.next.query.impl.engine.spi.Environment;
import fr.inria.corese.core.next.query.impl.engine.spi.Evaluator;
import fr.inria.corese.core.next.query.impl.engine.spi.Matcher;
import fr.inria.corese.core.next.query.impl.engine.spi.Plugin;
import fr.inria.corese.core.next.query.impl.engine.spi.Producer;
import fr.inria.corese.core.next.query.impl.engine.spi.Provider;
import fr.inria.corese.core.next.query.impl.engine.spi.SPARQLEngine;

import fr.inria.corese.core.next.data.Values;
import fr.inria.corese.core.next.query.impl.kgram.api.core.*;
import fr.inria.corese.core.next.query.impl.kgram.api.query.*;
import fr.inria.corese.core.next.query.impl.kgram.event.Event;
import fr.inria.corese.core.next.query.impl.kgram.event.EventImpl;
import fr.inria.corese.core.next.query.impl.kgram.event.KgramEventDispatcher;
import fr.inria.corese.core.next.query.impl.kgram.event.ResultListener;
import fr.inria.corese.core.next.query.impl.kgram.path.PathFinder;
import fr.inria.corese.core.next.query.impl.kgram.tool.NodeImpl;
import fr.inria.corese.core.next.query.impl.engine.event.Event;
import fr.inria.corese.core.next.query.impl.engine.event.EventImpl;
import fr.inria.corese.core.next.query.impl.engine.event.KgramEventDispatcher;
import fr.inria.corese.core.next.query.impl.engine.event.ResultListener;
import fr.inria.corese.core.next.query.impl.engine.path.PathFinder;
import fr.inria.corese.core.next.query.impl.engine.model.NodeImpl;
import fr.inria.corese.core.next.data.api.model.DatatypeValue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -17,7 +38,7 @@
import java.util.HashMap;
import java.util.List;

import static fr.inria.corese.core.next.query.impl.kgram.api.core.ExprType.UNNEST;
import static fr.inria.corese.core.next.query.impl.engine.model.ExprType.UNNEST;

/**
* KGRAM Knowledge Graph Abstract Machine Compute graph homomorphism and
Expand Down Expand Up @@ -88,7 +109,7 @@ public final class Eval implements ExpType, Plugin {
// Edge and Node producer
private Producer producer;
private Stack current;
private static final boolean HAS_LISTENER = false;
private boolean hasListener = false;
private int nbResult;
private boolean hasCandidate = false;
private boolean hasStatement = false;
Expand Down Expand Up @@ -591,7 +612,7 @@ public BindingContext getBind() {
return getEnvironment().getBind();
}

Query getQuery() {
public Query getQuery() {
return query;
}

Expand Down Expand Up @@ -845,7 +866,7 @@ int eval(Producer p, Node graphNode, Stack stack, Mappings map, int n) throws Sp
}

Exp exp = stack.get(n);
if (HAS_LISTENER) {
if (hasListener) {
// rule engine may have a ResultWatcher listener
exp = getListener().listen(exp, n);
}
Expand Down Expand Up @@ -1301,7 +1322,7 @@ boolean isTrue(DatatypeValue dt) {
return dt.isTrue();
}

Node eval(Node graphNode, Filter f, Environment env, Producer p) {
public Node eval(Node graphNode, Filter f, Environment env, Producer p) {
try {
env.setGraphNode(graphNode);
return p.getNode(eval(f.getExp(), env, p));
Expand All @@ -1311,26 +1332,26 @@ Node eval(Node graphNode, Filter f, Environment env, Producer p) {
}


DatatypeValue eval(Filter f, Environment env, Producer p) {
public DatatypeValue eval(Filter f, Environment env, Producer p) {
return f.getExp().evalWE(getEvaluator(), env.getBind(), env, p);
}

DatatypeValue eval(Expr e, Environment env, Producer p) {
public DatatypeValue eval(Expr e, Environment env, Producer p) {
return e.evalWE(getEvaluator(), env.getBind(), env, p);
}

// values var ( unnext(exp) )
// Note: Producer is not current producer but global producer
Mappings eval(Filter f, Environment env, List<Node> nodes) {
public Mappings eval(Filter f, Environment env, List<Node> nodes) {
return eval(f, env, getProducer(), nodes);
}

Mappings eval(Filter f, Environment env, Producer p, List<Node> nodes) {
public Mappings eval(Filter f, Environment env, Producer p, List<Node> nodes) {

int n = 1;
Expr exp = f.getExp();
if (exp.oper() == UNNEST) {
if (HAS_LISTENER) {
if (hasListener) {
listener.listen(exp);
}
if (exp.arity() == 2) {
Expand Down Expand Up @@ -1360,8 +1381,8 @@ Mappings eval(Filter f, Environment env, Producer p, List<Node> nodes) {
* in this case graphNode = g_i and from is useless here
* from named has been used in named graph pattern evaluator
* data is possible relevant bindings coming from preceding statement evaluation
* data may be null
*/
@SuppressWarnings("java:S3776") // Core KGRAM property path evaluation loop managing automaton candidate matching and backtracking
private int path(Producer p, Node graphNode, Exp exp, Mappings data, Stack stack, int n) throws SparqlException {
int backtrack = n - 1;
int evENUM = Event.ENUM;
Expand All @@ -1372,8 +1393,10 @@ private int path(Producer p, Node graphNode, Exp exp, Mappings data, Stack stack

if (data != null && data.getNodeList() != null && isPushEdgeMappings()) {
// push values(data) before edge in stack
logger.info("Push path mappings:\nvalue {}\n{}",
data.getNodeList(), data.toString(false, false, DISPLAY_RESULT_LIMIT));
if (logger.isInfoEnabled()) {
logger.info("Push path mappings:\nvalue {}\n{}",
data.getNodeList(), data.toString(false, false, DISPLAY_RESULT_LIMIT));
}
return eval(p, graphNode, stack.addCopy(n, exp.getValues(data)), n);
}

Expand Down Expand Up @@ -1569,7 +1592,7 @@ private int edge(Producer p, Node graphNode, Exp exp, Mappings data, Stack stack

if (entity != null) {
nbEdge++;
if (HAS_LISTENER && !listener.listen(exp, qEdge, entity)) {
if (hasListener && !listener.listen(exp, qEdge, entity)) {
continue;
}

Expand Down Expand Up @@ -2095,7 +2118,7 @@ Iterable<Edge> produce(Node gNode, Edge edge) {
@Deprecated(since = "4.0.0")
@SuppressWarnings("java:S1133")
public void exec(Exp exp, Environment env, int n) {
if (exp.getObject() instanceof String label && env.getNode(label) != null) {
if (exp.getObject() instanceof String label && env.getNode(label) != null && logger.isDebugEnabled()) {
logger.debug("{}: {} {}", n, label, env.getNode(label).getLabel());
}
}
Expand All @@ -2110,6 +2133,7 @@ public ResultListener getListener() {

public void setListener(ResultListener listener) {
this.listener = listener;
this.hasListener = listener != null;
}

}
Loading
Loading