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 2015/06/02 09:44:29 UTC

[1/5] jena git commit: TS_Binding included twice.

Repository: jena
Updated Branches:
  refs/heads/master 86e0dd85e -> cb18f7482


TS_Binding included twice.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/cc6df922
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/cc6df922
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/cc6df922

Branch: refs/heads/master
Commit: cc6df92263fdb3b13693f11d66664e8a8c3e155d
Parents: 7a8130d
Author: Andy Seaborne <an...@apache.org>
Authored: Mon Jun 1 18:32:17 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Mon Jun 1 18:32:17 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/sparql/TC_General.java |  2 --
 .../jena/sparql/engine/binding/TS_Binding.java  | 32 --------------------
 .../engine/iterator/TestQueryIterSort.java      |  3 +-
 3 files changed, 1 insertion(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/cc6df922/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java b/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
index cccf5e7..643401f 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/TC_General.java
@@ -25,7 +25,6 @@ import org.apache.jena.sparql.algebra.optimize.TS_Optimization ;
 import org.apache.jena.sparql.api.TS_API ;
 import org.apache.jena.sparql.core.TS_Core ;
 import org.apache.jena.sparql.engine.TS_Engine ;
-import org.apache.jena.sparql.engine.binding.TS_Binding ;
 import org.apache.jena.sparql.expr.E_Function ;
 import org.apache.jena.sparql.expr.NodeValue ;
 import org.apache.jena.sparql.expr.TS_Expr ;
@@ -58,7 +57,6 @@ import org.junit.runners.Suite ;
     , TS_UserFunctions.class
     
     , TS_ResultSet.class
-    , TS_Binding.class
     , TS_Engine.class
     , TS_Negation.class
     , TS_Solver.class

http://git-wip-us.apache.org/repos/asf/jena/blob/cc6df922/jena-arq/src/test/java/org/apache/jena/sparql/engine/binding/TS_Binding.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/binding/TS_Binding.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/binding/TS_Binding.java
deleted file mode 100644
index ca08d78..0000000
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/binding/TS_Binding.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * 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 org.apache.jena.sparql.engine.binding;
-
-import org.junit.runner.RunWith ;
-import org.junit.runners.Suite ;
-
-@RunWith(Suite.class)
-@Suite.SuiteClasses( {
-   TestBindingStreams.class
-})
-public class TS_Binding
-{
-
-}
-

http://git-wip-us.apache.org/repos/asf/jena/blob/cc6df922/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
index aaea114..cee1fae 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
@@ -113,8 +113,7 @@ public class TestQueryIterSort {
     @Test
     public void testCleanAfterClose()
     {
-        iterator.setCallback(new Callback() { @Override
-        public void call() { /* do nothing */ } });
+        iterator.setCallback(()->{});   // Do nothing.
         assertEquals(0, iterator.getReturnedElementCount());
         Context context = new Context() ;
         context.set(ARQ.spillToDiskThreshold, 10L) ;


[4/5] jena git commit: JENA-949 : Reimplement QueryIterDistinct

Posted by an...@apache.org.
JENA-949 : Reimplement QueryIterDistinct


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/40f1c8be
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/40f1c8be
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/40f1c8be

Branch: refs/heads/master
Commit: 40f1c8bea1dce836970922867e930fbf8f696baf
Parents: 8b2ed19
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jun 2 08:43:12 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jun 2 08:43:12 2015 +0100

----------------------------------------------------------------------
 .../iterator/AbstractTestDistinctReduced.java   | 108 +++++++++++++++++++
 .../engine/iterator/TS_QueryIterators.java      |  33 ++++++
 .../engine/iterator/TestDistinctDataBag.java    |  40 +++++++
 .../sparql/engine/iterator/TestDistinctMem.java |  37 +++++++
 4 files changed, 218 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/40f1c8be/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/AbstractTestDistinctReduced.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/AbstractTestDistinctReduced.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/AbstractTestDistinctReduced.java
new file mode 100644
index 0000000..d9b5ec3
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/AbstractTestDistinctReduced.java
@@ -0,0 +1,108 @@
+/**
+ * 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 org.apache.jena.sparql.engine.iterator;
+
+import java.util.Arrays ;
+import java.util.HashSet ;
+import java.util.List ;
+import java.util.Set ;
+import java.util.stream.Collectors ;
+
+import org.apache.jena.atlas.iterator.Iter ;
+import org.apache.jena.atlas.junit.BaseTest ;
+import org.apache.jena.atlas.lib.DS ;
+import org.apache.jena.graph.NodeFactory ;
+import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.engine.QueryIterator ;
+import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.engine.binding.BindingFactory ;
+import org.apache.jena.sparql.engine.binding.BindingMap ;
+import org.junit.Test ;
+
+public abstract class AbstractTestDistinctReduced extends BaseTest {
+    
+    static List<String> data1 =     Arrays.asList("0","1","1","3","9","5","6","8","9","0") ;
+    static List<String> results1 =  Arrays.asList("0","1",    "3","9","5","6","8"        ) ;
+    static List<String> data2 =     Arrays.asList("0","0","0","0") ;
+    static List<String> results2 =  Arrays.asList("0","0","0","0") ;
+    
+    static Var var_a = Var.alloc("a") ;
+    static Var var_b = Var.alloc("b") ;
+    
+    private static List<Binding> build(List<String> items) {
+        return items.stream().sequential().map((s)->{
+            BindingMap b = BindingFactory.create() ;
+            b.add(var_a, NodeFactory.createLiteral(s)) ;
+            return b ;
+        }).collect(Collectors.toList()) ;
+    }
+    
+    protected abstract QueryIterator createQueryIter(List<Binding> data) ;
+    
+    @Test public void distinct0() {
+        distinct(DS.list(), DS.list()) ;
+    }
+
+    @Test public void distinct1() {
+        List<String> data =     Arrays.asList("0","1","1","3","9","5","6","8","9","0") ;
+        List<String> results =  Arrays.asList("0","1",    "3","9","5","6","8"        ) ;
+        distinct(data, results) ;
+    }
+
+    @Test public void distinct2() {
+        List<String> data =     Arrays.asList("0","0","0","0") ;
+        List<String> results =  Arrays.asList("0") ;
+        distinct(data, results) ;
+    }
+
+    @Test public void distinct3() {
+        List<String> data =     Arrays.asList("0","1","1","A","2","2","2","B","2","3","3","C","4","4","5") ; 
+        List<String> results =  Arrays.asList("0","1","A","2","B","3","C","4","5") ;
+        distinct(data, results) ;
+    }
+
+
+    private void distinct(List<String> data, List<String> results) {
+        // Distinct Iterators are not required to preserve order.
+        List<Binding> input = build(data) ;
+        List<Binding> output = build(results) ;
+        
+        QueryIterator qIter = createQueryIter(input) ;
+        
+        List<Binding> iterList = Iter.toList(qIter) ;
+        assertEquals(output+" :: "+iterList,
+                     output.size() , iterList.size()) ;
+        // Assume results has no duplicates so same size, same members => order dependent same.
+        Set<Binding> testExpected = new HashSet<>(output) ;
+        Set<Binding> testResult = new HashSet<>(iterList) ;
+        assertEquals(testExpected , testResult) ;
+        
+    }
+
+    private void testSame(QueryIterator qIter, List<Binding> data) {
+        List<Binding> iterList = Iter.toList(qIter) ;
+        assertEquals(data, iterList) ;
+        
+        
+    }
+
+    
+    
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/40f1c8be/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TS_QueryIterators.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TS_QueryIterators.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TS_QueryIterators.java
new file mode 100644
index 0000000..2d3148c
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TS_QueryIterators.java
@@ -0,0 +1,33 @@
+/**
+ * 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 org.apache.jena.sparql.engine.iterator;
+
+import org.junit.runner.RunWith ;
+import org.junit.runners.Suite ;
+
+@RunWith(Suite.class)
+@Suite.SuiteClasses( {
+    TestQueryIterSort.class
+    , TestDistinctMem.class
+    , TestDistinctDataBag.class 
+})
+public class TS_QueryIterators {
+
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/40f1c8be/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctDataBag.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctDataBag.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctDataBag.java
new file mode 100644
index 0000000..1b70334
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctDataBag.java
@@ -0,0 +1,40 @@
+/**
+ * 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 org.apache.jena.sparql.engine.iterator;
+
+import java.util.List ;
+
+import org.apache.jena.query.ARQ ;
+import org.apache.jena.sparql.engine.ExecutionContext ;
+import org.apache.jena.sparql.engine.QueryIterator ;
+import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.util.Context ;
+
+public class TestDistinctDataBag extends AbstractTestDistinctReduced {
+
+    @Override
+    protected QueryIterator createQueryIter(List<Binding> data) {
+        QueryIterator qIter = new QueryIterPlainWrapper(data.iterator()) ;
+        Context cxt = new Context() ;
+        cxt.set(ARQ.spillToDiskThreshold, 2L);
+        return new QueryIterDistinct(qIter, new ExecutionContext(cxt, null, null, null)) ;
+    }
+
+}
+

http://git-wip-us.apache.org/repos/asf/jena/blob/40f1c8be/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctMem.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctMem.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctMem.java
new file mode 100644
index 0000000..a9c90ed
--- /dev/null
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestDistinctMem.java
@@ -0,0 +1,37 @@
+/**
+ * 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 org.apache.jena.sparql.engine.iterator;
+
+import java.util.List ;
+
+import org.apache.jena.sparql.engine.ExecutionContext ;
+import org.apache.jena.sparql.engine.QueryIterator ;
+import org.apache.jena.sparql.engine.binding.Binding ;
+import org.apache.jena.sparql.util.Context ;
+
+public class TestDistinctMem extends AbstractTestDistinctReduced {
+
+    @Override
+    protected QueryIterator createQueryIter(List<Binding> data) {
+        QueryIterator qIter = new QueryIterPlainWrapper(data.iterator()) ;
+        return new QueryIterDistinctMem(qIter, new ExecutionContext(new Context(), null, null, null)) ;
+    }
+
+}
+


[2/5] jena git commit: JENA-949 : Reimplement QueryIterDistinct

Posted by an...@apache.org.
JENA-949 : Reimplement QueryIterDistinct


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/8b2ed199
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/8b2ed199
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/8b2ed199

Branch: refs/heads/master
Commit: 8b2ed19979b06028c635a68945509b069e455e07
Parents: cc6df92
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jun 2 08:38:29 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jun 2 08:38:29 2015 +0100

----------------------------------------------------------------------
 .../engine/iterator/QueryIterDistinct.java      | 116 ++++++++++++++++---
 .../engine/iterator/QueryIterDistinctMem.java   |   5 +-
 .../apache/jena/sparql/engine/TS_Engine.java    |   4 +-
 3 files changed, 104 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/8b2ed199/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinct.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinct.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinct.java
index b026cc0..a88cb39 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinct.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinct.java
@@ -18,50 +18,130 @@
 
 package org.apache.jena.sparql.engine.iterator ;
 
-import java.util.ArrayList ;
-import java.util.Comparator ;
+import java.util.* ;
 
 import org.apache.jena.atlas.data.BagFactory ;
 import org.apache.jena.atlas.data.DistinctDataNet ;
 import org.apache.jena.atlas.data.ThresholdPolicy ;
 import org.apache.jena.atlas.data.ThresholdPolicyFactory ;
+import org.apache.jena.atlas.lib.InternalErrorException ;
 import org.apache.jena.query.SortCondition ;
 import org.apache.jena.riot.system.SerializationFactoryFinder ;
 import org.apache.jena.sparql.engine.ExecutionContext ;
 import org.apache.jena.sparql.engine.QueryIterator ;
 import org.apache.jena.sparql.engine.binding.Binding ;
 import org.apache.jena.sparql.engine.binding.BindingComparator ;
+import org.apache.jena.sparql.engine.binding.BindingProjectNamed ;
 
 /**
  * A QueryIterator that suppresses items already seen. This will stream results
- * until the spill to disk threshold is passed. At that point, it will not
- * return any results until the input iterator has been exhausted.
+ * until a threshold is passed. At that point, it will fill a disk-backed
+ * {@link DistinctDataNet}, then yield   
+ * not  return any results until the input iterator has been exhausted.
  * 
  * @see DistinctDataNet
  */
-public class QueryIterDistinct extends QueryIterDistinctReduced
+public class QueryIterDistinct extends QueryIter1
 {
-    final DistinctDataNet<Binding> db ;
+    private int Threshold1 = 3 ;
+    private DistinctDataNet<Binding> db = null ;
+    private Iterator<Binding> iterator = null ;
+    private Set<Binding> seen = new HashSet<>() ;
+    private Binding slot = null ;
 
-    public QueryIterDistinct(QueryIterator qIter, ExecutionContext context)
-    {
+    public QueryIterDistinct(QueryIterator qIter, ExecutionContext context) {
         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) ;
+    }
+    
+    public QueryIterDistinct(QueryIterator qIter, ExecutionContext context, int threshold1) {
+        super(qIter, context) ;
+        this.Threshold1 = threshold1 ;
     }
     
     @Override
-    protected void closeSubIterator()
-    { db.close() ; }
+    protected boolean hasNextBinding() {
+        if ( slot != null )
+            return true ;
+        if ( iterator != null )
+            // Databag active.
+            return iterator.hasNext() ;
+       
+        // At this point, we are currently in the initial pre-threshold mode.
+        if ( seen.size() >= Threshold1 ) {
+            Binding b = getInputNextUnseen() ;
+            if ( b == null )
+                return false ;
+            seen.add(b) ;
+            slot = b ;
+            return true ;
+        }
+        
+        // Hit the threashold.
+        loadDataBag() ;
+        // Switch to iterating from the databad.  
+        iterator = db.iterator() ;
+        // Leave slot null.
+        return iterator.hasNext() ;
+    }
+    
+    private void loadDataBag() {
+        ThresholdPolicy<Binding> policy = ThresholdPolicyFactory.policyFromContext(super.getExecContext().getContext()) ;
+        Comparator<Binding> comparator = new BindingComparator(new ArrayList<SortCondition>(), super.getExecContext()) ;
+        this.db = BagFactory.newDistinctNet(policy, SerializationFactoryFinder.bindingSerializationFactory(), comparator) ;
+        for(;;) {
+            Binding b = getInputNextUnseen() ;
+            if ( b == null )
+                break ;
+            db.add(b) ;
+        }
+    }
+    
+    // Return the next binding from the input filtered by seen.
+    // This does not update seen.
+    // Returns null on end of input.
+    private Binding getInputNextUnseen() {
+        while( getInput().hasNext() ) {
+            Binding b = getInputNext() ;
+            if ( seen.contains(b) )
+                continue ;
+            return b ;
+        }
+        return null ;
+    }
+
+    // Return the next wrapped binding from the input.
+    private Binding getInputNext() {
+        Binding b = getInput().next() ;
+        // Hide unnamed and internal variables.
+        b = new BindingProjectNamed(b) ;
+        return b ;
+    }
 
     @Override
-    protected void requestSubCancel()
-    { db.close() ; }
+    protected Binding moveToNextBinding() {
+        if ( slot != null ) {
+            Binding b = slot ;
+            slot = null ;
+            return b ;
+        }
+        if ( iterator != null ) {
+            Binding b = iterator.next() ;
+            return b ;
+        }
+        throw new InternalErrorException() ;
+    }
 
     @Override
-    protected boolean isFreshSighting(Binding binding)
-    {
-        return db.netAdd(binding) ;
+    protected void closeSubIterator() {
+        if ( db != null ) {
+            iterator = null ;
+            db.close() ;
+        }
+        db = null ;
     }
+
+    @Override
+    protected void requestSubCancel()
+    { super.close(); }
+
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/8b2ed199/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinctMem.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinctMem.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinctMem.java
index 1b09108..78929b4 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinctMem.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterDistinctMem.java
@@ -45,6 +45,9 @@ public class QueryIterDistinctMem extends QueryIterDistinctReduced
     @Override
     protected boolean isFreshSighting(Binding binding)
     {
-        return seen.contains(binding) ;
+        if ( seen.contains(binding) )
+            return false ;
+        seen.add(binding) ;
+        return true ;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/8b2ed199/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
index d607c9a..889acf9 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/TS_Engine.java
@@ -21,7 +21,7 @@ package org.apache.jena.sparql.engine;
 import org.apache.jena.sparql.engine.binding.TestBindingStreams ;
 import org.apache.jena.sparql.engine.http.TestQueryEngineHTTP ;
 import org.apache.jena.sparql.engine.http.TestService ;
-import org.apache.jena.sparql.engine.iterator.TestQueryIterSort ;
+import org.apache.jena.sparql.engine.iterator.TS_QueryIterators ;
 import org.junit.runner.RunWith ;
 import org.junit.runners.Suite ;
 
@@ -29,7 +29,7 @@ import org.junit.runners.Suite ;
 @Suite.SuiteClasses( {
         TestBindingStreams.class
       , TestTableLib.class
-      , TestQueryIterSort.class
+      , TS_QueryIterators.class
       , TestService.class
       , TestQueryEngineHTTP.class
       , TestQueryEngineMultiThreaded.class


[3/5] jena git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena

Posted by an...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/jena


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/dba79753
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/dba79753
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/dba79753

Branch: refs/heads/master
Commit: dba79753228776099b23e70bcccb481666f5f9c0
Parents: cc6df92 86e0dd8
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jun 2 08:40:46 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jun 2 08:40:46 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/org/apache/jena/vocabulary/DC_10.java      | 5 ++++-
 jena-core/src/main/java/org/apache/jena/vocabulary/RDF.java  | 5 ++++-
 jena-core/src/main/java/org/apache/jena/vocabulary/RDFS.java | 5 ++++-
 .../src/main/java/org/apache/jena/vocabulary/RDFSyntax.java  | 6 ++++--
 jena-core/src/main/java/org/apache/jena/vocabulary/RSS.java  | 5 ++++-
 jena-core/src/main/java/org/apache/jena/vocabulary/SKOS.java | 2 +-
 .../src/main/java/org/apache/jena/vocabulary/SKOSXL.java     | 2 +-
 .../src/main/java/org/apache/jena/vocabulary/VCARD.java      | 5 ++++-
 jena-core/src/main/java/org/apache/jena/vocabulary/XSD.java  | 8 ++++++--
 9 files changed, 32 insertions(+), 11 deletions(-)
----------------------------------------------------------------------



[5/5] jena git commit: Merge branch 'jena949-distinct'

Posted by an...@apache.org.
Merge branch 'jena949-distinct'


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/cb18f748
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/cb18f748
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/cb18f748

Branch: refs/heads/master
Commit: cb18f7482309dd457c669ee47fba2d0127573a2f
Parents: dba7975 40f1c8b
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Jun 2 08:43:37 2015 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Jun 2 08:43:37 2015 +0100

----------------------------------------------------------------------
 .../engine/iterator/QueryIterDistinct.java      | 116 ++++++++++++++++---
 .../engine/iterator/QueryIterDistinctMem.java   |   5 +-
 .../apache/jena/sparql/engine/TS_Engine.java    |   4 +-
 .../iterator/AbstractTestDistinctReduced.java   | 108 +++++++++++++++++
 .../engine/iterator/TS_QueryIterators.java      |  33 ++++++
 .../engine/iterator/TestDistinctDataBag.java    |  40 +++++++
 .../sparql/engine/iterator/TestDistinctMem.java |  37 ++++++
 7 files changed, 322 insertions(+), 21 deletions(-)
----------------------------------------------------------------------