package org.aksw.jena_sparql_api.concept_cache;
import org.aksw.jena_sparql_api.concept_cache.op.OpUtils;
import org.junit.Test;
import org.apache.jena.query.ARQ;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.Syntax;
import org.apache.jena.sparql.algebra.Algebra;
import org.apache.jena.sparql.algebra.Op;
import org.apache.jena.sparql.algebra.optimize.Optimize;
import org.apache.jena.sparql.algebra.optimize.Rewrite;
import org.apache.jena.sparql.util.Context;
public class MainVariousTests {
@Test
public void test1() {
String str = "Select Distinct ?s ?o { { ?s ?p ?o } Union { ?s ?p ?o } Filter(?p = <a>)}";
Query query = QueryFactory.create(str, Syntax.syntaxSPARQL_11);
Op op = Algebra.compile(query);
op = Algebra.toQuadForm(op);
Context context = new Context();
context.put(ARQ.optMergeBGPs, true);
context.put(ARQ.optMergeExtends, true);
context.put(ARQ.optExprConstantFolding, true);
//context.put(ARQ.optFilterPlacement, true);
context.put(ARQ.optFilterConjunction, true);
context.put(ARQ.optImplicitLeftJoin, true);
// It is important to keep optFilterEquality turned off!
// Otherwise it may push constants back into the quads
context.put(ARQ.optFilterEquality, false);
context.put(ARQ.optFilterInequality, false);
context.put(ARQ.optDistinctToReduced, false);
context.put(ARQ.optFilterExpandOneOf, false);
context.put(ARQ.optFilterPlacementBGP, false);
Rewrite rewriter = Optimize.getFactory().create(context);
op = rewriter.rewrite(op);// Algebra.optimize(op);
Object summary = OpUtils.summarize(op);
System.out.println("Summary: " + summary);
System.out.println("IsEquivalent: " + OpUtils.isEquivalent(op, op));
System.out.println("yay" + op);
}
}