package org.aksw.jena_sparql_api.cache.tests;
import java.util.LinkedHashMap;
import java.util.Map;
import org.aksw.jena_sparql_api.concept_cache.op.OpUtils;
import org.aksw.jena_sparql_api.core.FluentQueryExecutionFactory;
import org.aksw.jena_sparql_api.core.QueryExecutionFactory;
import org.aksw.jena_sparql_api.utils.Vars;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.NodeFactory;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.sparql.algebra.Algebra;
import org.apache.jena.sparql.algebra.Op;
import org.apache.jena.sparql.algebra.OpAsQuery;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.engine.binding.BindingHashMap;
import org.junit.Assert;
import org.junit.Test;
public class ProjectionRenamingTests {
public static final Node s = NodeFactory.createURI("http://ex.org/s");
public static final Node p = NodeFactory.createURI("http://ex.org/p");
public static final Node o = NodeFactory.createURI("http://ex.org/o");
public static Binding eval(Op op) {
Query q = OpAsQuery.asQuery(op);
QueryExecutionFactory qef = FluentQueryExecutionFactory.from(ModelFactory.createDefaultModel()).create();
QueryExecution qe = qef.createQueryExecution(q);
Binding result = qe.execSelect().nextBinding();
qe.close();
return result;
}
@Test
public void testVarRenamingSimple() {
Op op = Algebra.compile(QueryFactory.create(
"PREFIX ex: <http://ex.org/> SELECT * { VALUES (?s ?p ?o) { (ex:s ex:p ex:o) } }"));
Map<Var, Var> varMap = new LinkedHashMap<>();
varMap.put(Vars.s, Vars.x);
varMap.put(Vars.o, Vars.o);
varMap.put(Vars.p, Vars.z);
Op renamed = OpUtils.wrapWithProjection(op, varMap);
Binding actual = eval(renamed);
BindingHashMap expected = new BindingHashMap();
expected.add(Vars.x, s);
expected.add(Vars.o, o);
expected.add(Vars.z, p);
Assert.assertEquals(expected, actual);
}
@Test
public void testVarRenamingComplex() {
Op op = Algebra.compile(QueryFactory.create("PREFIX ex: <http://ex.org/> SELECT * { VALUES (?s ?p ?o) { (ex:s ex:p ex:o) } }"));
Map<Var, Var> varMap = new LinkedHashMap<>();
varMap.put(Vars.s, Vars.o);
varMap.put(Vars.o, Vars.s);
varMap.put(Vars.p, Vars.p);
Op renamed = OpUtils.wrapWithProjection(op, varMap);
Binding actual = eval(renamed);
BindingHashMap expected = new BindingHashMap();
expected.add(Vars.o, s);
expected.add(Vars.s, o);
expected.add(Vars.p, p);
Assert.assertEquals(expected, actual);
}
}