Skip to content

Commit

Permalink
the-qa-companyGH-526 update VariableToIdSubstitution to optimize at t…
Browse files Browse the repository at this point in the history
…he StatementPattern level
  • Loading branch information
hmottestad committed Nov 28, 2024
1 parent 3621402 commit 7792de4
Showing 1 changed file with 51 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
package com.the_qa_company.qendpoint.utils;

import com.the_qa_company.qendpoint.core.enums.TripleComponentRole;
import com.the_qa_company.qendpoint.core.hdt.HDT;
import com.the_qa_company.qendpoint.model.SimpleIRIHDT;
import com.the_qa_company.qendpoint.store.EndpointStore;
import com.the_qa_company.qendpoint.store.HDTConverter;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.Resource;
import org.eclipse.rdf4j.query.BindingSet;
import org.eclipse.rdf4j.query.Dataset;
import org.eclipse.rdf4j.query.algebra.BindingSetAssignment;
import org.eclipse.rdf4j.query.algebra.StatementPattern;
import org.eclipse.rdf4j.query.algebra.TupleExpr;
import org.eclipse.rdf4j.query.algebra.Var;
import org.eclipse.rdf4j.query.algebra.evaluation.QueryOptimizer;
import org.eclipse.rdf4j.query.algebra.helpers.AbstractQueryModelVisitor;
import com.the_qa_company.qendpoint.core.enums.TripleComponentRole;
import com.the_qa_company.qendpoint.core.hdt.HDT;

/**
* QueryOptimizer to replace Var by IRIHDT Var in a query
Expand Down Expand Up @@ -41,6 +44,52 @@ public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings)

protected class Substituor extends AbstractQueryModelVisitor<RuntimeException> {

@Override
public void meet(StatementPattern node) throws RuntimeException {
Var subjectVar = node.getSubjectVar();
if (subjectVar != null && subjectVar.isAnonymous() && subjectVar.hasValue()) {
long id = converter.subjectToID(((Resource) subjectVar.getValue()));
if (id != -1) {
Var var1 = new Var(subjectVar.getName(), converter.idToSubjectHDTResource(id), true,
subjectVar.isConstant());
node.replaceChildNode(subjectVar, var1);
}
}

Var predicateVar = node.getPredicateVar();
if (predicateVar != null && predicateVar.isAnonymous() && predicateVar.hasValue()) {
long id = converter.predicateToID(((IRI) predicateVar.getValue()));
if (id != -1) {
Var var1 = new Var(predicateVar.getName(), converter.idToPredicateHDTResource(id), true,
predicateVar.isConstant());
node.replaceChildNode(predicateVar, var1);
}
}

Var objectVar = node.getObjectVar();
if (objectVar != null && objectVar.isAnonymous() && objectVar.hasValue()) {
long id = converter.objectToID((objectVar.getValue()));
if (id != -1) {
Var var1 = new Var(objectVar.getName(), converter.idToObjectHDTResource(id), true,
objectVar.isConstant());
node.replaceChildNode(objectVar, var1);
}
}

// TripleComponentRole.GRAPH is not supported!
//
// Var contextVar = node.getContextVar();
// if (contextVar != null && contextVar.isAnonymous() && contextVar.hasValue()) {
// long id = converter.contextToID((((Resource) contextVar.getValue())));
// if (id != -1) {
// Var var1 = new Var(contextVar.getName(), converter.idToGraphHDTResource(id), true,
// contextVar.isConstant());
// node.replaceChildNode(contextVar, var1);
// }
// }

}

@Override
public void meet(Var var) {
if (var.isAnonymous() && var.hasValue()) {
Expand Down

0 comments on commit 7792de4

Please sign in to comment.