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