From 7792de4f61ec7fc4a68d8b98dc515cb9e5f1f75c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Tue, 19 Nov 2024 10:07:06 +0100 Subject: [PATCH] GH-526 update VariableToIdSubstitution to optimize at the StatementPattern level --- .../utils/VariableToIdSubstitution.java | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/qendpoint-store/src/main/java/com/the_qa_company/qendpoint/utils/VariableToIdSubstitution.java b/qendpoint-store/src/main/java/com/the_qa_company/qendpoint/utils/VariableToIdSubstitution.java index 28c5b32b9..b003c87b5 100644 --- a/qendpoint-store/src/main/java/com/the_qa_company/qendpoint/utils/VariableToIdSubstitution.java +++ b/qendpoint-store/src/main/java/com/the_qa_company/qendpoint/utils/VariableToIdSubstitution.java @@ -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 @@ -41,6 +44,52 @@ public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) protected class Substituor extends AbstractQueryModelVisitor { + @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()) {