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 2011/10/08 18:38:34 UTC

svn commit: r1180405 - in /incubator/jena: Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/ Jena2/TDB/trunk/src-dev/dev/ Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/

Author: andy
Date: Sat Oct  8 16:38:33 2011
New Revision: 1180405

URL: http://svn.apache.org/viewvc?rev=1180405&view=rev
Log:
JENA-97- Fix multiple rporting of a variable in a binding.

Modified:
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingNodeId.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/QueryEngineTDB.java
    incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java
    incubator/jena/Jena2/TDB/trunk/src-dev/dev/DevTDB.java
    incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingNodeId.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingNodeId.java?rev=1180405&r1=1180404&r2=1180405&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingNodeId.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingNodeId.java Sat Oct  8 16:38:33 2011
@@ -60,14 +60,13 @@ public class BindingNodeId extends Map2<
     
     public Binding getParentBinding()    { return parentBinding ; } 
     
-    @Override public NodeId get(Var v)    { return super.get(v) ; } 
+    //@Override public NodeId get(Var v)    { return super.get(v) ; } 
     
     @Override public void put(Var v, NodeId n)
     {
         if ( v == null || n == null )
             throw new IllegalArgumentException("("+v+","+n+")") ;
         super.put(v, n) ;
-        
     }
     
     @Override

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java?rev=1180405&r1=1180404&r2=1180405&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java Sat Oct  8 16:38:33 2011
@@ -18,19 +18,17 @@
 
 package com.hp.hpl.jena.tdb.solver;
 
-import java.util.HashMap ;
-import java.util.Iterator ;
-import java.util.Map ;
-
-import org.openjena.atlas.logging.Log ;
-
-
-import com.hp.hpl.jena.graph.Node ;
-import com.hp.hpl.jena.sparql.core.Var ;
-import com.hp.hpl.jena.sparql.engine.binding.BindingBase ;
-import com.hp.hpl.jena.tdb.lib.NodeFmtLib ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.store.NodeId ;
+import java.util.* ;
+
+import org.openjena.atlas.logging.Log ;
+
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.core.Var ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
+import com.hp.hpl.jena.sparql.engine.binding.BindingBase ;
+import com.hp.hpl.jena.tdb.lib.NodeFmtLib ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
+import com.hp.hpl.jena.tdb.store.NodeId ;
 
 /** Bind that delays turning a NodeId into a Node until explicitly needed by get() */
 
@@ -44,7 +42,8 @@ public class BindingTDB extends BindingB
     private final Map<Var,Node> cache = ( caching ? new HashMap<Var, Node>() : null ) ;
 
     public BindingTDB(BindingNodeId idBinding, NodeTable nodeTable)
-    {
+    {
+        // BindingNodeId contains the bindings actually used  copied down when created. 
         super(idBinding.getParentBinding()) ;
         this.idBinding = idBinding ;
         this.nodeTable = nodeTable ;
@@ -52,14 +51,35 @@ public class BindingTDB extends BindingB
 
     @Override
     protected int size1() { return idBinding.size(); }
+    
+    private List<Var> vars = null ;
     
     /** Iterate over all the names of variables. */
     @Override
     protected Iterator<Var> vars1() 
-    {
-        return idBinding.iterator() ;
+    {
+        if ( vars == null )
+            vars = calcVars() ;
+        return vars.iterator() ;
     }
-
+
+    private List<Var> calcVars()
+    {
+        List<Var> vars = new ArrayList<Var>(4) ;
+        // Only if not in parent.
+        // A (var/value) binding may have been copied down to record it's NodeId.  
+        
+        Binding b = idBinding.getParentBinding() ;
+        
+        Iterator<Var> iter = idBinding.iterator() ;
+        for ( Var v : idBinding )
+        {
+            if ( b == null || ! b.contains(v) )
+                vars.add(v) ;
+        }
+        return vars ;
+    }
+    
     @Override
     protected boolean isEmpty1()
     {
@@ -76,7 +96,6 @@ public class BindingTDB extends BindingB
     
     public NodeId getNodeId(Var var)
     {
-        
         NodeId id = idBinding.get(var) ;
         if ( id != null )
             return id ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/QueryEngineTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/QueryEngineTDB.java?rev=1180405&r1=1180404&r2=1180405&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/QueryEngineTDB.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/QueryEngineTDB.java Sat Oct  8 16:38:33 2011
@@ -33,6 +33,7 @@ import com.hp.hpl.jena.sparql.engine.Que
 import com.hp.hpl.jena.sparql.engine.QueryIterator ;
 import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.engine.main.QueryEngineMain ;
+import com.hp.hpl.jena.sparql.mgt.Explain ;
 import com.hp.hpl.jena.sparql.util.Context ;
 import com.hp.hpl.jena.tdb.TDB ;
 import com.hp.hpl.jena.tdb.migrate.A2 ;
@@ -156,11 +157,12 @@ public class QueryEngineTDB extends Quer
         if ( context.isTrue(TDB.symUnionDefaultGraph) && ! doingDynamicDatasetBySpecialDataset ) 
         {
             // doingDynamicDatasetBySpecialDataset => done earlier.
-            op = A2.unionDefaultGraphQuads(op) ;
+            op = A2.unionDefaultGraphQuads(op) ;
             // Rewrite so that any explicitly named "default graph" is union graph.
             // And set the default graph to be the union graph as well.
             DatasetGraphTDB ds = ((DatasetGraphTDB)dsg).duplicate() ;
             ds.setEffectiveDefaultGraph(new GraphNamedTDB(ds, Quad.unionGraph)) ;
+            Explain.explain("REWRITE(Union default graph)", op, context) ;
             dsg = ds ;
         }
         return super.eval(op, dsg, input, context) ;

Modified: incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java?rev=1180405&r1=1180404&r2=1180405&view=diff
==============================================================================
--- incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java (original)
+++ incubator/jena/Experimental/TxTDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java Sat Oct  8 16:38:33 2011
@@ -219,7 +219,6 @@ public class SolverLib
                     // repeatedly looking up the same node in different bindings.
                     NodeId id = nodeTable.getNodeIdForNode(n) ;
                     // Even put in "does not exist" for a node now known not to be in the DB.
-                    // Removed at TDB 0.8.7: if ( ! NodeId.doesNotExist(id) )
                     b.put(v, id) ;
                 }
                 return b ;

Modified: incubator/jena/Jena2/TDB/trunk/src-dev/dev/DevTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/TDB/trunk/src-dev/dev/DevTDB.java?rev=1180405&r1=1180404&r2=1180405&view=diff
==============================================================================
--- incubator/jena/Jena2/TDB/trunk/src-dev/dev/DevTDB.java (original)
+++ incubator/jena/Jena2/TDB/trunk/src-dev/dev/DevTDB.java Sat Oct  8 16:38:33 2011
@@ -3,6 +3,10 @@ package dev ;
 
 public class DevTDB
 {
+    // BindingNodeId - reduce footprint by:
+    //   making extensible across a whole BGP.
+    //   don't use maps.
+    
     // DatasetGraphTDB - wrapper to ignore close in cache.
     
     // New builder - does it work for memory?  Non-std block sizes?

Modified: incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java?rev=1180405&r1=1180404&r2=1180405&view=diff
==============================================================================
--- incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java (original)
+++ incubator/jena/Jena2/TDB/trunk/src/main/java/com/hp/hpl/jena/tdb/solver/BindingTDB.java Sat Oct  8 16:38:33 2011
@@ -6,15 +6,14 @@
 
 package com.hp.hpl.jena.tdb.solver;
 
-import java.util.HashMap ;
-import java.util.Iterator ;
-import java.util.Map ;
+import java.util.* ;
 
 import org.openjena.atlas.logging.Log ;
 
 
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.sparql.core.Var ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.engine.binding.BindingBase ;
 import com.hp.hpl.jena.tdb.lib.NodeFmtLib ;
 import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
@@ -40,12 +39,33 @@ public class BindingTDB extends BindingB
 
     @Override
     protected int size1() { return idBinding.size(); }
-    
+
+    private List<Var> vars = null ;
+
     /** Iterate over all the names of variables. */
     @Override
     protected Iterator<Var> vars1() 
     {
-        return idBinding.iterator() ;
+        if ( vars == null )
+            vars = calcVars() ;
+        return vars.iterator() ;
+    }
+
+    private List<Var> calcVars()
+    {
+        List<Var> vars = new ArrayList<Var>(4) ;
+        // Only if not in parent.
+        // A (var/value) binding may have been copied down to record it's NodeId.  
+        
+        Binding b = idBinding.getParentBinding() ;
+        
+        Iterator<Var> iter = idBinding.iterator() ;
+        for ( Var v : idBinding )
+        {
+            if ( b == null || ! b.contains(v) )
+                vars.add(v) ;
+        }
+        return vars ;
     }
 
     @Override