diff --git a/src/main/java/se/liu/ida/hefquin/engine/data/impl/VocabularyMappingImpl.java b/src/main/java/se/liu/ida/hefquin/engine/data/impl/VocabularyMappingImpl.java index 72cec7fe7..337dacf9a 100644 --- a/src/main/java/se/liu/ida/hefquin/engine/data/impl/VocabularyMappingImpl.java +++ b/src/main/java/se/liu/ida/hefquin/engine/data/impl/VocabularyMappingImpl.java @@ -339,7 +339,7 @@ public Graph getVocabularyMappingAsGraph() { } @Override - public Set translateSolutionMapping( final SolutionMapping sm) { + public Set translateSolutionMapping( final SolutionMapping sm ) { Set bbs = new HashSet<>(); bbs.add( BindingBuilder.create() ); @@ -384,7 +384,8 @@ public Set translateSolutionMapping( final SolutionMapping sm) final Set results = new HashSet<>(); for (final BindingBuilder b : bbs) { - results.add(new SolutionMappingImpl(b.build())); + final SolutionMapping translatedSM = new SolutionMappingImpl( b.build() ); + results.add(translatedSM); } return results; } diff --git a/src/main/java/se/liu/ida/hefquin/engine/data/mappings/VocabularyMappingUtils.java b/src/main/java/se/liu/ida/hefquin/engine/data/mappings/VocabularyMappingUtils.java index 9096692ca..37e6dce80 100644 --- a/src/main/java/se/liu/ida/hefquin/engine/data/mappings/VocabularyMappingUtils.java +++ b/src/main/java/se/liu/ida/hefquin/engine/data/mappings/VocabularyMappingUtils.java @@ -8,9 +8,11 @@ import org.apache.jena.graph.Triple; import org.apache.jena.sparql.algebra.Op; import org.apache.jena.sparql.algebra.op.OpBGP; +import org.apache.jena.sparql.algebra.op.OpFilter; import org.apache.jena.sparql.algebra.op.OpJoin; import org.apache.jena.sparql.algebra.op.OpSequence; import org.apache.jena.sparql.algebra.op.OpUnion; +import org.apache.jena.sparql.expr.ExprList; import se.liu.ida.hefquin.engine.data.VocabularyMapping; import se.liu.ida.hefquin.engine.query.BGP; @@ -21,6 +23,7 @@ import se.liu.ida.hefquin.engine.query.impl.BGPImpl; import se.liu.ida.hefquin.engine.query.impl.GenericSPARQLGraphPatternImpl1; import se.liu.ida.hefquin.engine.query.impl.GenericSPARQLGraphPatternImpl2; +import se.liu.ida.hefquin.engine.query.impl.QueryPatternUtils; import se.liu.ida.hefquin.engine.query.impl.SPARQLGroupPatternImpl; import se.liu.ida.hefquin.engine.query.impl.SPARQLUnionPatternImpl; import se.liu.ida.hefquin.engine.query.impl.TriplePatternImpl; @@ -113,11 +116,9 @@ public static SPARQLGraphPattern translateGraphPattern( final Op op, else if ( op instanceof OpUnion ) { return translateGraphPattern( (OpUnion) op, vm ); } -/* TODO else if ( op instanceof OpFilter ) { return translateGraphPattern( (OpFilter) op, vm ); } -*/ else if ( op instanceof OpBGP ) { return translateGraphPattern( (OpBGP) op, vm ); } @@ -191,4 +192,19 @@ public static SPARQLGraphPattern translateGraphPattern( final OpSequence op, return new SPARQLGroupPatternImpl(subPatterns); } + public static SPARQLGraphPattern translateGraphPattern( final OpFilter op, + final VocabularyMapping vm ) { + final Op subOp = op.getSubOp(); + final SPARQLGraphPattern translatedSubPlan = translateGraphPattern(subOp, vm); + final ExprList translatedExprs = translateExpressions( op.getExprs(), vm ); + return QueryPatternUtils.merge(translatedExprs, translatedSubPlan); + } + + public static ExprList translateExpressions( final ExprList exprs, + final VocabularyMapping vm ) { + // TODO: translate the filter expressions + + return exprs; + } + } diff --git a/src/main/java/se/liu/ida/hefquin/engine/queryproc/impl/loptimizer/ApplyVocabularyMappings.java b/src/main/java/se/liu/ida/hefquin/engine/queryproc/impl/loptimizer/ApplyVocabularyMappings.java index 50a54bb7e..a832d0135 100644 --- a/src/main/java/se/liu/ida/hefquin/engine/queryproc/impl/loptimizer/ApplyVocabularyMappings.java +++ b/src/main/java/se/liu/ida/hefquin/engine/queryproc/impl/loptimizer/ApplyVocabularyMappings.java @@ -94,6 +94,7 @@ public LogicalPlan apply( final LogicalPlan inputPlan ) { } else if (inputPlan.getRootOperator() instanceof LogicalOpFilter){ final LogicalOpFilter filterOp = (LogicalOpFilter) inputPlan.getRootOperator(); final LogicalPlan rw = rewriteToUseLocalVocabulary(inputPlan.getSubPlan(0)); + // TODO: the expressions of 'filterOp' should be rewritten too return new LogicalPlanWithUnaryRootImpl(filterOp,rw); } else { throw new IllegalArgumentException("The given logical plan is not supported by this function because it has a root operator of type: " + inputPlan.getRootOperator().getClass().getName() );