Skip to content

Commit 0f8d4d6

Browse files
author
James Leigh
committed
issue #781: Use hashCode of PathIteration to identify intermediate variables
Signed-off-by: James Leigh <james.leigh@ontotext.com>
1 parent 38cfddf commit 0f8d4d6

2 files changed

Lines changed: 39 additions & 8 deletions

File tree

compliance/sparql/src/test/java/org/eclipse/rdf4j/query/parser/sparql/ArbitraryLengthPathTest.java

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
*******************************************************************************/
88
package org.eclipse.rdf4j.query.parser.sparql;
99

10-
import junit.framework.TestCase;
11-
1210
import org.eclipse.rdf4j.model.ValueFactory;
11+
import org.eclipse.rdf4j.model.vocabulary.RDF;
12+
import org.eclipse.rdf4j.model.vocabulary.RDFS;
1313
import org.eclipse.rdf4j.query.QueryLanguage;
1414
import org.eclipse.rdf4j.repository.Repository;
1515
import org.eclipse.rdf4j.repository.RepositoryConnection;
@@ -20,6 +20,8 @@
2020
import org.junit.Before;
2121
import org.junit.Test;
2222

23+
import junit.framework.TestCase;
24+
2325
/**
2426
* @author james
2527
*/
@@ -91,6 +93,35 @@ public void test100000()
9193
assertTrue(con.prepareBooleanQuery(QueryLanguage.SPARQL, sparql).evaluate());
9294
}
9395

96+
@Test
97+
public void testDirection()
98+
throws Exception
99+
{
100+
ValueFactory vf = con.getValueFactory();
101+
con.add(vf.createIRI("urn:test:a"), vf.createIRI("urn:test:rel"), vf.createIRI("urn:test:b"));
102+
con.add(vf.createIRI("urn:test:b"), vf.createIRI("urn:test:rel"), vf.createIRI("urn:test:a"));
103+
String sparql = "ASK { <urn:test:a> <urn:test:rel>* <urn:test:b> . <urn:test:b> <urn:test:rel>* <urn:test:a> }";
104+
assertTrue(con.prepareBooleanQuery(QueryLanguage.SPARQL, sparql).evaluate());
105+
}
106+
107+
@Test
108+
public void testSimilarPatterns()
109+
throws Exception
110+
{
111+
ValueFactory vf = con.getValueFactory();
112+
con.add(vf.createIRI("urn:test:a"), RDF.TYPE, vf.createIRI("urn:test:c"));
113+
con.add(vf.createIRI("urn:test:b"), RDF.TYPE, vf.createIRI("urn:test:d"));
114+
con.add(vf.createIRI("urn:test:c"), RDFS.SUBCLASSOF, vf.createIRI("urn:test:e"));
115+
con.add(vf.createIRI("urn:test:d"), RDFS.SUBCLASSOF, vf.createIRI("urn:test:f"));
116+
String sparql = "ASK { \n"
117+
+ " values (?expectedTargetClass55555 ?expectedTargetClass5544T) {(<urn:test:e> <urn:test:f>)}.\n"
118+
+ " <urn:test:a> a ?linkTargetClass55555 .\n"
119+
+ " ?linkTargetClass55555 rdfs:subClassOf* ?expectedTargetClass55555 .\n"
120+
+ " <urn:test:b> a ?linkTargetClass55556 .\n"
121+
+ " ?linkTargetClass55556 rdfs:subClassOf* ?expectedTargetClass5544T . }";
122+
assertTrue(con.prepareBooleanQuery(QueryLanguage.SPARQL, sparql).evaluate());
123+
}
124+
94125
private void populate(int n)
95126
throws RepositoryException
96127
{

core/queryalgebra/evaluation/src/main/java/org/eclipse/rdf4j/query/algebra/evaluation/iterator/PathIteration.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -120,12 +120,12 @@ protected BindingSet getNextElement()
120120

121121
if (startVarFixed && endVarFixed && currentLength > 2) {
122122
v1 = getVarValue(startVar, startVarFixed, nextElement);
123-
v2 = nextElement.getValue("END_" + JOINVAR_PREFIX + pathExpression.hashCode());
123+
v2 = nextElement.getValue("END_" + JOINVAR_PREFIX + this.hashCode());
124124
}
125125
else if (startVarFixed && endVarFixed && currentLength == 2) {
126126
v1 = getVarValue(startVar, startVarFixed, nextElement);
127127
v2 = nextElement.getValue(
128-
JOINVAR_PREFIX + (currentLength - 1) + "-" + pathExpression.hashCode());
128+
JOINVAR_PREFIX + (currentLength - 1) + "-" + this.hashCode());
129129
}
130130
else {
131131
v1 = getVarValue(startVar, startVarFixed, nextElement);
@@ -271,7 +271,7 @@ else if (currentLength == 1) {
271271

272272
if (startVarFixed && endVarFixed) {
273273
Var replacement = createAnonVar(
274-
JOINVAR_PREFIX + currentLength + "-" + pathExpression.hashCode());
274+
JOINVAR_PREFIX + currentLength + "-" + this.hashCode());
275275

276276
VarReplacer replacer = new VarReplacer(endVar, replacement, 0, false);
277277
pathExprClone.visit(replacer);
@@ -290,8 +290,8 @@ else if (currentLength == 1) {
290290
if (startVarFixed && endVarFixed) {
291291

292292
Var startReplacement = createAnonVar(
293-
JOINVAR_PREFIX + currentLength + "-" + pathExpression.hashCode());
294-
Var endReplacement = createAnonVar("END_" + JOINVAR_PREFIX + pathExpression.hashCode());
293+
JOINVAR_PREFIX + currentLength + "-" + this.hashCode());
294+
Var endReplacement = createAnonVar("END_" + JOINVAR_PREFIX + this.hashCode());
295295
startReplacement.setAnonymous(false);
296296
endReplacement.setAnonymous(false);
297297

@@ -317,7 +317,7 @@ else if (currentLength == 1) {
317317
}
318318

319319
Var replacement = createAnonVar(
320-
JOINVAR_PREFIX + currentLength + "-" + pathExpression.hashCode());
320+
JOINVAR_PREFIX + currentLength + "-" + this.hashCode());
321321
replacement.setValue(v);
322322

323323
VarReplacer replacer = new VarReplacer(toBeReplaced, replacement, 0, false);

0 commit comments

Comments
 (0)