You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2012/02/16 22:21:40 UTC

svn commit: r1245179 - in /incubator/jena/Jena2/ARQ/trunk: src/main/java/com/hp/hpl/jena/sparql/core/ src/main/java/com/hp/hpl/jena/sparql/engine/iterator/ testing/ARQ/Distinct/

Author: andy
Date: Thu Feb 16 21:21:39 2012
New Revision: 1245179

URL: http://svn.apache.org/viewvc?rev=1245179&view=rev
Log:
JENA-211 : DISTINCT * does not see hidden variables.

Added:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctMem.java
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/data-multipath.ttl
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.srj
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.rq
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.srj
Modified:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/Var.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinct.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctReduced.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterReduced.java
    incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/manifest.ttl

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/Var.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/Var.java?rev=1245179&r1=1245178&r2=1245179&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/Var.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/Var.java Thu Feb 16 21:21:39 2012
@@ -39,7 +39,7 @@ public class Var extends Node_Variable
     
     // Legal SPARQL variable name but note it must be exactly this
     // object, not just the same name, to be anonymous.
-    public static Var ANON = new Var("_") ; 
+    public static Var ANON = new Var("?_") ; 
     
     public static Var alloc(String varName)
     {
@@ -144,6 +144,12 @@ public class Var extends Node_Variable
         return false ;
     }
     
+    public static boolean isRenamedVar(Node node)
+    { return node.isVariable() && isRenamedVar(node.getName()) ; }
+    
+    public static boolean isRenamedVar(String x)
+    { return x.startsWith(ARQConstants.allocVarScopeHiding) ; }
+    
     public static boolean isNamedVar(Node node)
     { return node.isVariable() && isNamedVarName(node.getName()) ; }
 

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinct.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinct.java?rev=1245179&r1=1245178&r2=1245179&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinct.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinct.java Thu Feb 16 21:21:39 2012
@@ -20,14 +20,11 @@ package com.hp.hpl.jena.sparql.engine.it
 
 import java.util.ArrayList ;
 import java.util.Comparator ;
-import java.util.Iterator ;
-import java.util.NoSuchElementException ;
 
 import org.openjena.atlas.data.BagFactory ;
 import org.openjena.atlas.data.DistinctDataNet ;
 import org.openjena.atlas.data.ThresholdPolicy ;
 import org.openjena.atlas.data.ThresholdPolicyFactory ;
-import org.openjena.atlas.iterator.Iter ;
 import org.openjena.riot.SerializationFactoryFinder ;
 
 import com.hp.hpl.jena.query.SortCondition ;
@@ -35,7 +32,6 @@ import com.hp.hpl.jena.sparql.engine.Exe
 import com.hp.hpl.jena.sparql.engine.QueryIterator ;
 import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.engine.binding.BindingComparator ;
-import com.hp.hpl.jena.util.iterator.NiceIterator ;
 
 /**
  * A QueryIterator that suppresses items already seen. This will stream results
@@ -44,97 +40,29 @@ import com.hp.hpl.jena.util.iterator.Nic
  * 
  * @see DistinctDataNet
  */
-public class QueryIterDistinct extends QueryIter
+public class QueryIterDistinct extends QueryIterDistinctReduced
 {
-    private final QueryIterator inputIterator ;
     final DistinctDataNet<Binding> db ;
 
-    boolean initialized = false ;
-    boolean finished = false ;
-    Binding slot ;
-    Iterator<Binding> dbIter ;
-
     public QueryIterDistinct(QueryIterator qIter, ExecutionContext context)
     {
-        super(context) ;
-        this.inputIterator = qIter ;
-
+        super(qIter, context) ;
         ThresholdPolicy<Binding> policy = ThresholdPolicyFactory.policyFromContext(context.getContext()) ;
         Comparator<Binding> comparator = new BindingComparator(new ArrayList<SortCondition>(), context) ;
         this.db = BagFactory.newDistinctNet(policy, SerializationFactoryFinder.bindingSerializationFactory(), comparator) ;
     }
-
-    @Override
-    public void requestCancel()
-    {
-        inputIterator.cancel() ;
-    }
     
-    private void init()
-    {
-        if ( !initialized )
-        {
-            fill() ;
-            initialized = true ;
-        }
-    }
-
-    private void fill()
-    {
-        while ( inputIterator.hasNext() )
-        {
-            slot = inputIterator.next() ;
-            if ( db.netAdd(slot) )
-            {
-                return ;
-            }
-        }
-        if ( null == dbIter )
-        {
-            dbIter = db.netIterator() ;
-        }
-        if ( dbIter.hasNext() )
-        {
-            slot = dbIter.next() ;
-            return ;
-        }
-        close() ;
-    }
-
     @Override
-    protected boolean hasNextBinding()
-    {
-        init() ;
-        return !finished ;
-    }
+    protected void closeSubIterator()
+    { db.close() ; }
 
     @Override
-    protected Binding moveToNextBinding()
-    {
-        if ( finished )
-            throw new NoSuchElementException() ;
-        init() ;
-        Binding toReturn = slot ;
-        fill() ;
-        return toReturn ;
-    }
+    protected void requestSubCancel()
+    { db.close() ; }
 
     @Override
-    protected void closeIterator()
+    protected boolean isFreshSighting(Binding binding)
     {
-        if ( inputIterator != null )
-        {
-            NiceIterator.close(inputIterator) ;
-            // In case we wrapped, for example, another QueryIterator.
-            Iter.close(inputIterator) ;
-        }
-        if ( dbIter != null )
-        {
-            Iter.close(dbIter) ;
-        }
-        finished = true ;
-        slot = null ;
-        dbIter = null ;
-        db.close() ;
+        return db.netAdd(binding) ;
     }
 }

Added: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctMem.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctMem.java?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctMem.java (added)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctMem.java Thu Feb 16 21:21:39 2012
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.sparql.engine.iterator ;
+
+import java.util.HashSet ;
+import java.util.Set ;
+
+import com.hp.hpl.jena.sparql.engine.ExecutionContext ;
+import com.hp.hpl.jena.sparql.engine.QueryIterator ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
+
+/** Memory limited QueryIterDistinct */
+public class QueryIterDistinctMem extends QueryIterDistinctReduced
+{
+    private Set<Binding> seen = new HashSet<Binding>() ;
+    
+    public QueryIterDistinctMem(QueryIterator iter, ExecutionContext context)
+    {
+        super(iter, context)  ;
+    }
+
+    @Override
+    protected void closeSubIterator()
+    {
+        seen = null ;
+        super.closeSubIterator() ;
+    }
+
+    @Override
+    protected boolean isFreshSighting(Binding binding)
+    {
+        return seen.contains(binding) ;
+    }
+}
\ No newline at end of file

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctReduced.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctReduced.java?rev=1245179&r1=1245178&r2=1245179&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctReduced.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterDistinctReduced.java Thu Feb 16 21:21:39 2012
@@ -21,12 +21,13 @@ package com.hp.hpl.jena.sparql.engine.it
 import com.hp.hpl.jena.sparql.engine.ExecutionContext ;
 import com.hp.hpl.jena.sparql.engine.QueryIterator ;
 import com.hp.hpl.jena.sparql.engine.binding.Binding ;
+import com.hp.hpl.jena.sparql.engine.binding.BindingProjectNamed ;
 
 /** Implementation skeleton for DISTINCT and REDUCED. */
 
 public abstract class QueryIterDistinctReduced extends QueryIter1
 {
-    Binding slot = null ;       // ready to go.
+    private Binding slot = null ;       // ready to go.
     
     public QueryIterDistinctReduced(QueryIterator iter, ExecutionContext context)
     { super(iter, context)  ; }
@@ -36,10 +37,10 @@ public abstract class QueryIterDistinctR
     protected void closeSubIterator()
     { slot = null ; }
 
-    // Subclasses will want to implement this as well. 
+    // Subclasses may want to implement this as well. 
     @Override
     protected void requestSubCancel()
-    { }
+    { closeSubIterator() ; }
     
     @Override
     final
@@ -53,10 +54,12 @@ public abstract class QueryIterDistinctR
         for ( ; getInput().hasNext() ; )
         {
             Binding b = getInput().nextBinding() ;
-            if ( ! isDuplicate(b) )
+            // Hide unnamed and internal variables.
+            // Don't need to worry about rename scope vars 
+            // (they are projected away in sub-SELECT ?var { ... }  
+            b = new BindingProjectNamed(b) ;
+            if ( isFreshSighting(b) )
             {
-                // new - remember and return
-                remember(b) ;
                 slot = b ;
                 return true ;
             }
@@ -73,7 +76,5 @@ public abstract class QueryIterDistinctR
         return r ;
     }
     
-    protected abstract boolean isDuplicate(Binding binding) ;
-    
-    protected abstract void remember(Binding binding) ;
+    protected abstract boolean isFreshSighting(Binding binding) ;
 }

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterReduced.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterReduced.java?rev=1245179&r1=1245178&r2=1245179&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterReduced.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/engine/iterator/QueryIterReduced.java Thu Feb 16 21:21:39 2012
@@ -41,17 +41,13 @@ public class QueryIterReduced extends Qu
     }
 
     @Override
-    protected boolean isDuplicate(Binding b)
-    {
-        return window.contains(b) ; 
-    }
-    
-    @Override
-    protected void remember(Binding b)
+    protected boolean isFreshSighting(Binding b)
     {
+        if ( window.contains(b) )
+            return false ;
         if ( window.size() >= N )
             window.remove(window.size()-1) ;
         window.add(0, b) ;
+        return true ;
     }
-    
 }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/data-multipath.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/data-multipath.ttl?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/data-multipath.ttl (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/data-multipath.ttl Thu Feb 16 21:21:39 2012
@@ -0,0 +1,9 @@
+@prefix : <http://example/> .
+
+:a :p :x1 .
+:a :p :x2 .
+:a :p :x3 .
+
+:x1 :p :b .
+:x2 :p :b .
+:x3 :p :b .

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT DISTINCT * { :a :p [ :p  ?x ] }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-1.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,12 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT DISTINCT * { :a :p{2} ?x }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-2.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,12 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT DISTINCT * { :a :p/:p ?x }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/distinct-multi-3.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,12 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Modified: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/manifest.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/manifest.ttl?rev=1245179&r1=1245178&r2=1245179&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/manifest.ttl (original)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/manifest.ttl Thu Feb 16 21:21:39 2012
@@ -33,6 +33,16 @@
       <#distinct-4>
       <#no-distinct-9>
       <#distinct-9>
+
+      <#no-distinct-multi-1>
+      <#no-distinct-multi-2>
+      <#no-distinct-multi-3>
+      <#distinct-multi-1>
+      <#distinct-multi-2>
+      <#distinct-multi-3>
+      <#reduced-multi-1>
+      <#reduced-multi-2>
+      <#reduced-multi-3>
     ) .
 
 
@@ -117,3 +127,84 @@
             [ qt:query  <distinct-1.rq> ;
               qt:data   <data-num.ttl> , <data-str.ttl> , <data-node.ttl> ] ;
     mf:result  <distinct-all.srx> .
+
+<#distinct-path-1>
+    mf:name    "Multipath / bnode variables" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <distinct-all.srx> .
+
+<#no-distinct-multi-1>
+    mf:name    "Multipath / bnode variables / not distinct" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <no-distinct-multi-1.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <no-distinct-multi-1.srj> .
+
+<#no-distinct-multi-2>
+    mf:name    "Multipath / path{2} / not distinct" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <no-distinct-multi-2.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <no-distinct-multi-2.srj> .
+
+
+<#no-distinct-multi-3>
+    mf:name    "Multipath / sequence / not distinct" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <no-distinct-multi-3.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <no-distinct-multi-3.srj> .
+
+<#distinct-multi-1>
+    mf:name    "Multipath / bnode variables / distinct" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <distinct-multi-1.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <distinct-multi-1.srj> .
+
+<#distinct-multi-2>
+    mf:name    "Multipath / path{2} / distinct" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <distinct-multi-2.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <distinct-multi-2.srj> .
+
+<#distinct-multi-3>
+    mf:name    "Multipath / seq path / distinct" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <distinct-multi-3.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <distinct-multi-3.srj> .
+
+<#reduced-multi-1>
+    mf:name    "Multipath / bnode variables / reduced" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <reduced-multi-1.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <reduced-multi-1.srj> .
+
+<#reduced-multi-2>
+    mf:name    "Multipath / path{2} / reduced" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <reduced-multi-2.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <reduced-multi-2.srj> .
+
+<#reduced-multi-3>
+    mf:name    "Multipath / seq path / reduced" ;
+    rdf:type   mfx:TestQuery ; 
+    mf:action
+            [ qt:query  <reduced-multi-3.rq> ;
+              qt:data   <data-multipath.ttl> ] ;
+    mf:result  <reduced-multi-3.srj> .

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT  * { :a :p [ :p  ?x ] }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-1.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,18 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      } ,
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      } ,
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT  * { :a :p{2} ?x }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-2.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,18 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      } ,
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      } ,
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT * { :a :p/:p ?x }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/no-distinct-multi-3.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,18 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      } ,
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      } ,
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT REDUCED * { :a :p [ :p  ?x ] }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-1.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,12 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT REDUCED * { :a :p{2} ?x }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-2.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,12 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.rq?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.rq (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.rq Thu Feb 16 21:21:39 2012
@@ -0,0 +1,3 @@
+PREFIX : <http://example/> 
+
+SELECT REDUCED * { :a :p/:p ?x }

Added: incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.srj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.srj?rev=1245179&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.srj (added)
+++ incubator/jena/Jena2/ARQ/trunk/testing/ARQ/Distinct/reduced-multi-3.srj Thu Feb 16 21:21:39 2012
@@ -0,0 +1,12 @@
+{
+  "head": {
+    "vars": [ "x" ]
+  } ,
+  "results": {
+    "bindings": [
+      {
+        "x": { "type": "uri" , "value": "http://example/b" }
+      }
+    ]
+  }
+}