use of fr.lirmm.graphik.graal.api.homomorphism.HomomorphismWithCompilation in project graal by graphik-team.
the class ConjunctiveQueryWithCompilation method backtrackHomomorphismBootstrapperTest2.
@Theory
public void backtrackHomomorphismBootstrapperTest2(Homomorphism<ConjunctiveQuery, AtomSet> hh, RulesCompilationFactory factory, AtomSet store) throws Exception {
Assume.assumeFalse(store instanceof TripleStore);
Assume.assumeTrue(hh instanceof HomomorphismWithCompilation);
HomomorphismWithCompilation<ConjunctiveQuery, AtomSet> h = (HomomorphismWithCompilation<ConjunctiveQuery, AtomSet>) hh;
store.addAll(DlgpParser.parseAtomSet("<P>(b,a)."));
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("<Q>(X,Y) :- <P>(X,Y)."));
RulesCompilation comp = factory.create();
comp.compile(rules.iterator());
StaticChase.executeChase(store, rules);
ConjunctiveQuery query = DlgpParser.parseQuery("?(X) :- <Q>(X,a).");
CloseableIterator<Substitution> subReader;
Substitution sub;
subReader = h.execute(query, store, comp);
Assert.assertTrue(subReader.hasNext());
sub = subReader.next();
Assert.assertEquals(DefaultTermFactory.instance().createConstant("b"), sub.createImageOf(DefaultTermFactory.instance().createVariable("X")));
Assert.assertFalse(subReader.hasNext());
subReader.close();
}
use of fr.lirmm.graphik.graal.api.homomorphism.HomomorphismWithCompilation in project graal by graphik-team.
the class ConjunctiveQueryWithCompilation method backtrackHomomorphismBootstrapperTest1.
@Theory
public void backtrackHomomorphismBootstrapperTest1(Homomorphism<ConjunctiveQuery, AtomSet> hh, RulesCompilationFactory factory, AtomSet store) throws Exception {
Assume.assumeFalse(store instanceof TripleStore);
Assume.assumeTrue(hh instanceof HomomorphismWithCompilation);
HomomorphismWithCompilation<ConjunctiveQuery, AtomSet> h = (HomomorphismWithCompilation<ConjunctiveQuery, AtomSet>) hh;
store.addAll(DlgpParser.parseAtomSet("<P>(b,a)."));
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("<Q>(X,Y) :- <P>(X,Y)."));
RulesCompilation comp = factory.create();
comp.compile(rules.iterator());
StaticChase.executeChase(store, rules);
ConjunctiveQuery query = DlgpParser.parseQuery("?(X) :- <Q>(b,X).");
CloseableIterator<Substitution> subReader;
Substitution sub;
subReader = h.execute(query, store, comp);
Assert.assertTrue(subReader.hasNext());
sub = subReader.next();
Assert.assertEquals(DefaultTermFactory.instance().createConstant("a"), sub.createImageOf(DefaultTermFactory.instance().createVariable("X")));
Assert.assertFalse(subReader.hasNext());
subReader.close();
}
use of fr.lirmm.graphik.graal.api.homomorphism.HomomorphismWithCompilation in project graal by graphik-team.
the class ConjunctiveQueryWithCompilation method test1.
// /////////////////////////////////////////////////////////////////////////
// TEST CASES
// /////////////////////////////////////////////////////////////////////////
@Theory
public void test1(Homomorphism<ConjunctiveQuery, AtomSet> hh, RulesCompilationFactory factory, AtomSet store) throws Exception {
Assume.assumeFalse(store instanceof TripleStore);
Assume.assumeTrue(hh instanceof HomomorphismWithCompilation);
HomomorphismWithCompilation<ConjunctiveQuery, AtomSet> h = (HomomorphismWithCompilation<ConjunctiveQuery, AtomSet>) hh;
store.add(DlgpParser.parseAtom("<P>(a)."));
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("<Q>(X) :- <P>(X)."));
RulesCompilation comp = factory.create();
comp.compile(rules.iterator());
StaticChase.executeChase(store, rules);
CloseableIterator<Substitution> results = h.execute(DlgpParser.parseQuery("?(X) :- <Q>(X)."), store, comp);
Assert.assertTrue(results.hasNext());
Substitution next = results.next();
Assert.assertEquals(DefaultTermFactory.instance().createConstant("a"), next.createImageOf(DefaultTermFactory.instance().createVariable("X")));
Assert.assertFalse(results.hasNext());
results.close();
}
use of fr.lirmm.graphik.graal.api.homomorphism.HomomorphismWithCompilation in project graal by graphik-team.
the class UnionConjunctiveQueriesSubstitutionIterator method hasNext.
@Override
public boolean hasNext() throws IteratorException {
if (!this.hasNextCallDone) {
this.hasNextCallDone = true;
if (this.tmpIt != null && !this.tmpIt.hasNext()) {
this.tmpIt.close();
this.tmpIt = null;
this.getProfiler().stop("SubQuery" + i++);
}
while ((this.tmpIt == null || !this.tmpIt.hasNext()) && this.cqueryIterator.hasNext()) {
ConjunctiveQuery q = this.cqueryIterator.next();
this.getProfiler().start("SubQuery" + i);
try {
if (this.homomorphism == null) {
this.tmpIt = SmartHomomorphism.instance().execute(q, this.atomSet, this.compilation);
} else {
if (this.compilation != null && !(this.compilation instanceof NoCompilation)) {
if (this.homomorphism instanceof HomomorphismWithCompilation) {
this.tmpIt = ((HomomorphismWithCompilation<ConjunctiveQuery, AtomSet>) this.homomorphism).execute(q, this.atomSet, this.compilation);
} else {
throw new IteratorException("There is a compilation and selected homomorphism can't handle it : " + this.homomorphism.getClass());
}
} else {
this.tmpIt = this.homomorphism.execute(q, this.atomSet);
}
}
if (this.isBooleanQuery && this.tmpIt.hasNext()) {
this.cqueryIterator.close();
}
} catch (HomomorphismException e) {
return false;
}
}
}
return this.tmpIt != null && this.tmpIt.hasNext();
}
use of fr.lirmm.graphik.graal.api.homomorphism.HomomorphismWithCompilation in project graal by graphik-team.
the class ConjunctiveQueryWithCompilation method test2.
@Theory
public void test2(Homomorphism<ConjunctiveQuery, AtomSet> hh, RulesCompilationFactory factory, AtomSet store) throws Exception {
Assume.assumeTrue(hh instanceof HomomorphismWithCompilation);
HomomorphismWithCompilation<ConjunctiveQuery, AtomSet> h = (HomomorphismWithCompilation<ConjunctiveQuery, AtomSet>) hh;
store.add(DlgpParser.parseAtom("<P>(a,b)."));
RuleSet rules = new LinkedListRuleSet();
rules.add(DlgpParser.parseRule("<Q>(X,Y) :- <P>(Y,X)."));
RulesCompilation comp = factory.create();
comp.compile(rules.iterator());
StaticChase.executeChase(store, rules);
CloseableIterator<Substitution> results = h.execute(DlgpParser.parseQuery("?(X,Y) :- <Q>(X,Y)."), store, comp);
Assert.assertTrue(results.hasNext());
Substitution next = results.next();
Assert.assertEquals(DefaultTermFactory.instance().createConstant("a"), next.createImageOf(DefaultTermFactory.instance().createVariable("Y")));
Assert.assertEquals(DefaultTermFactory.instance().createConstant("b"), next.createImageOf(DefaultTermFactory.instance().createVariable("X")));
Assert.assertFalse(results.hasNext());
results.close();
}
Aggregations