Short cut MINUS evaluation when the RHS is empty.

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

Branch: refs/heads/JENA-507
Commit: 7c8ba91980ec7a130e3b79f3a60b7ba6ad5d8ad7
Parents: 9230bbd
Author: Andy Seaborne <[email protected]>
Authored: Fri Jan 22 16:16:12 2016 +0000
Committer: Andy Seaborne <[email protected]>
Committed: Fri Jan 22 16:16:12 2016 +0000

----------------------------------------------------------------------
 .../sparql/engine/iterator/QueryIterMinus.java  | 91 +++++++++-----------
 .../jena/sparql/engine/main/OpExecutor.java     |  2 +-
 2 files changed, 44 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/7c8ba919/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterMinus.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterMinus.java
 
b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterMinus.java
index fe47d89..2ae1ce1 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterMinus.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterMinus.java
@@ -18,72 +18,67 @@
 
 package org.apache.jena.sparql.engine.iterator;
 
-import java.util.Map;
-import java.util.Set ;
+import java.util.Set;
 
-import org.apache.jena.graph.Node ;
-import org.apache.jena.sparql.core.Var ;
-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.index.IndexFactory ;
-import org.apache.jena.sparql.engine.index.IndexTable ;
+import org.apache.jena.sparql.core.Var;
+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.index.IndexFactory;
+import org.apache.jena.sparql.engine.index.IndexTable;
 
 /** Minus by materializing the RHS - this is not streamed on the right */
-public class QueryIterMinus extends QueryIter2
-{
-       private IndexTable tableRight;
-       private Map<Var, Integer> varColumns ;
-       private Set<Node[]> rightTable;
-    Binding slot = null ;
+public class QueryIterMinus extends QueryIter2 {
+    private final IndexTable tableRight;
+    private Binding          slot = null;
 
-       public QueryIterMinus(QueryIterator left, QueryIterator right, Set<Var> 
commonVars, ExecutionContext qCxt)
-    {
-        super(left, right, qCxt) ;
-        tableRight = IndexFactory.createIndex(commonVars, right) ;
+    public static QueryIterator create(QueryIterator left, QueryIterator 
right, Set<Var> commonVars, ExecutionContext qCxt) {
+        if ( ! right.hasNext() )
+            // Empty MINUS left 
+            return left ;
+        return new QueryIterMinus(left, right, commonVars, qCxt) ;
+    }
+    
+    private QueryIterMinus(QueryIterator left, QueryIterator right, Set<Var> 
commonVars, ExecutionContext qCxt) {
+        super(left, right, qCxt);
+        tableRight = IndexFactory.createIndex(commonVars, right);
     }
 
-    protected Binding getNextSlot(Binding bindingLeft)
-    {
+    protected Binding getNextSlot(Binding bindingLeft) {
         if ( tableRight.containsCompatibleWithSharedDomain(bindingLeft) )
-               return null ;
-        
+            return null;
         return bindingLeft;
     }
 
     @Override
-    protected final void closeSubIterator() { }
-    
+    protected final void closeSubIterator() {}
+
     @Override
-    protected void requestSubCancel() { }
-   
+    protected void requestSubCancel() {}
+
     @Override
-    protected final boolean hasNextBinding()
-    {
+    protected final boolean hasNextBinding() {
         if ( slot != null )
-            return true ;
-        
-        while ( getLeft().hasNext() )
-        {
-            Binding bindingLeft = getLeft().nextBinding() ;
-            slot = getNextSlot(bindingLeft) ;
-            if ( slot != null )
-            {
-                slot = bindingLeft ; 
-                return true ;
+            return true;
+
+        while (getLeft().hasNext()) {
+            Binding bindingLeft = getLeft().nextBinding();
+            slot = getNextSlot(bindingLeft);
+            if ( slot != null ) {
+                slot = bindingLeft;
+                return true;
             }
         }
-        getLeft().close() ;
-        return false ;
+        getLeft().close();
+        return false;
     }
 
     @Override
-    protected final Binding moveToNextBinding()
-    {
-        if ( ! hasNextBinding() )
-            return null ;
-        Binding x = slot ;
-        slot = null ;
-        return x ;
+    protected final Binding moveToNextBinding() {
+        if ( !hasNextBinding() )
+            return null;
+        Binding x = slot;
+        slot = null;
+        return x;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/7c8ba919/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
index 3929975..d301a38 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/main/OpExecutor.java
@@ -263,7 +263,7 @@ public class OpExecutor
         Set<Var> commonVars = OpVars.visibleVars(lhsOp) ;
         commonVars.retainAll(OpVars.visibleVars(rhsOp)) ;
 
-        return new QueryIterMinus(left, right, commonVars, execCxt) ;
+        return QueryIterMinus.create(left, right, commonVars, execCxt) ;
     }
 
     protected QueryIterator execute(OpDisjunction opDisjunction, QueryIterator 
input) {

Reply via email to