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 2013/03/27 18:09:44 UTC

svn commit: r1461713 - in /jena/trunk/jena-tdb/src/main/java: com/hp/hpl/jena/tdb/solver/stats/ com/hp/hpl/jena/tdb/store/bulkloader/ com/hp/hpl/jena/tdb/store/bulkloader2/ tdb/ tdb/cmdline/

Author: andy
Date: Wed Mar 27 17:09:44 2013
New Revision: 1461713

URL: http://svn.apache.org/r1461713
Log:
JENA-426 : Apply patch for collecting (?x rdf:type <TYPE>) stats

Added:
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsResults.java
Modified:
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/Stats.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollector.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorBase.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorNodeId.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader/BulkLoader.java
    jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader2/CmdNodeTableBuilder.java
    jena/trunk/jena-tdb/src/main/java/tdb/cmdline/CmdTDBGraph.java
    jena/trunk/jena-tdb/src/main/java/tdb/tdbconfig.java
    jena/trunk/jena-tdb/src/main/java/tdb/tdbstats.java

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/Stats.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/Stats.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/Stats.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/Stats.java Wed Mar 27 17:09:44 2013
@@ -24,70 +24,53 @@ import static com.hp.hpl.jena.sparql.sse
 import java.io.FileOutputStream ;
 import java.io.IOException ;
 import java.io.OutputStream ;
-import java.util.HashMap ;
 import java.util.Iterator ;
 import java.util.Map ;
 import java.util.Map.Entry ;
 
-import org.apache.jena.atlas.lib.Tuple ;
 import org.apache.jena.atlas.logging.Log ;
 
 import com.hp.hpl.jena.graph.Graph ;
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.graph.Triple ;
 import com.hp.hpl.jena.sparql.engine.optimizer.StatsMatcher ;
+import com.hp.hpl.jena.sparql.graph.NodeConst ;
 import com.hp.hpl.jena.sparql.sse.Item ;
 import com.hp.hpl.jena.sparql.sse.ItemList ;
 import com.hp.hpl.jena.sparql.sse.ItemWriter ;
 import com.hp.hpl.jena.sparql.util.NodeFactoryExtra ;
 import com.hp.hpl.jena.sparql.util.Utils ;
-import com.hp.hpl.jena.tdb.index.TupleIndex ;
-import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
-import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
-import com.hp.hpl.jena.tdb.store.GraphTDB ;
-import com.hp.hpl.jena.tdb.store.NodeId ;
-import com.hp.hpl.jena.tdb.sys.Names ;
 
 public class Stats
 {
     static Item ZERO = Item.createNode(NodeFactoryExtra.intToNode(0)) ;
 
     /** Write statistics */
-    static public void write(String filename, StatsCollector stats)
+    static public void write(String filename, StatsResults stats)
     {
-        write(filename, stats.getPredicates(), stats.getCount()) ;
+        write(filename, stats.getPredicates(), stats.getTypes(), stats.getCount()) ;
     }
     
     /** Write statistics */
-    static public void write(OutputStream output, StatsCollector stats)
+    static public void write(OutputStream output, StatsResults stats)
     {
-        write(output, stats.getPredicates(), stats.getCount()) ;
+        write(output, stats.getPredicates(), stats.getTypes(), stats.getCount()) ;
     }
     
-    /** Write statistics */
-    static public void write(DatasetGraphTDB dsg, StatsCollectorNodeId statsById)
-    {
-        long statsTotal = statsById.getCount() ;
-        Map<Node, Integer> stats = statsById.asNodeStats(dsg.getTripleTable().getNodeTupleTable().getNodeTable()) ;
-        Item item = format(stats, statsTotal) ; 
-        String filename = dsg.getLocation().getPath(Names.optStats) ;
-        write(filename, stats, statsTotal) ;
-    }
-
-    static private void write(String filename, Map<Node, Integer> stats, long statsTotal)
+    static private void write(String filename, Map<Node, Integer> predicateStats, Map<Node, Integer> typeStats, long statsTotal)
     {
         // Write out the stats
         try {
             OutputStream statsOut = new FileOutputStream(filename) ;
-            write(statsOut, stats, statsTotal) ;
+            write(statsOut, predicateStats, typeStats, statsTotal) ;
             statsOut.close() ;
         } catch (IOException ex)
         { Log.warn(Stats.class, "Problem when writing stats file", ex) ; }
     }
     
-    static private void write(OutputStream output, Map<Node, Integer> stats, long statsTotal)
+    static private void write(OutputStream output, Map<Node, Integer> predicateStats, Map<Node, Integer> typeStats, long statsTotal)
     {
-        Item item = format(stats, statsTotal) ;
+        Item item = format(predicateStats, typeStats, statsTotal) ;
         ItemWriter.write(output, item) ;
     }
     
@@ -107,78 +90,17 @@ public class Stats
         return stats ;
     }
 
-    /** Gather statistics - faster for TDB */
-    public static StatsCollector gatherTDB(GraphTDB graph)
-    {
-        long count = 0 ;
-        Map<NodeId, Integer> predicateIds = new HashMap<NodeId, Integer>(1000) ;
-        
-        TupleIndex index = graph.getNodeTupleTable().getTupleTable().getIndex(0) ;
-        if ( ! index.getName().equals("SPO") &&
-             ! index.getName().equals("GSPO") )
-            Log.warn(StatsCollector.class, "May not be the right index: "+index.getName()+" mapping="+index.getColumnMap().getLabel()) ;
-        boolean quads = (index.getTupleLength()==4)  ;
-        
-        Iterator<Tuple<NodeId>> iter = graph.getNodeTupleTable().findAll() ;
-        StatsCollectorNodeId collector = new StatsCollectorNodeId() ;
-        
-        for ( ; iter.hasNext() ; )
-        {
-            Tuple<NodeId> tuple = iter.next(); 
-            count++ ;
-            if ( quads )
-                collector.record(tuple.get(0), tuple.get(1), tuple.get(2), tuple.get(3)) ;
-            else
-                collector.record(null, tuple.get(0), tuple.get(1), tuple.get(2)) ;
-        }
-        
-        Map<Node, Integer> predicates = collector.asNodeStats(graph.getNodeTupleTable().getNodeTable()) ;
-        return new StatsCollector(count, predicates) ;
-    }
-
-    private static Item statsOutput(NodeTable nodeTable, Map<NodeId, Integer> predicateIds, long total)
-    {
-        Map<Node, Integer> predicates = new HashMap<Node, Integer>(1000) ;
-        for ( NodeId p : predicateIds.keySet() )
-        {
-            Node n = nodeTable.getNodeForNodeId(p) ;
-            
-            // Skip these - they just clog things up!
-            if ( n.getURI().startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#_") )
-                continue ;
-            
-            predicates.put(n, predicateIds.get(p)) ;
-        }
-        
-        return format(predicates, total) ;
-    }
-
-    public static Item format(StatsCollector stats)
+    public static Item format(StatsResults stats)
     {
-        return format(stats.getPredicates(), stats.getCount()) ;
+        return format(stats.getPredicates(), stats.getTypes(), stats.getCount()) ;
     }
     
-    /*
-     *             
-            // Skip these - they just clog things up!
-            if ( n.getURI().startsWith("http://www.w3.org/1999/02/22-rdf-syntax-ns#_") )
-                continue ;
-
-     */
-    
-    private static Item format(Map<Node, Integer> predicates, long count)
+    private static Item format(Map<Node, Integer> predicates, Map<Node, Integer> types, long count)
     {
         Item stats = Item.createList() ;
         ItemList statsList = stats.getList() ;
         statsList.add("stats") ;
 
-//        System.out.printf("Triples  %d\n", count) ;
-//        System.out.println("NodeIds") ;
-//        for ( NodeId p : predicateIds.keySet() )
-//            System.out.printf("%s : %d\n",p, predicateIds.get(p) ) ;
-
-//        System.out.println("Nodes") ;
-        
         Item meta = createTagged(StatsMatcher.META) ;
         addPair(meta.getList(), "timestamp", NodeFactoryExtra.nowAsDateTime()) ;
         addPair(meta.getList(), "run@",  Utils.nowAsString()) ;
@@ -186,6 +108,12 @@ public class Stats
             addPair(meta.getList(), StatsMatcher.COUNT, NodeFactoryExtra.intToNode((int)count)) ;
         statsList.add(meta) ;
         
+        for ( Entry<Node, Integer> entry : types.entrySet() )
+        {
+            Node type = entry.getKey() ;
+            addTypeTriple(statsList, type, NodeFactoryExtra.intToNode(entry.getValue()) ) ;
+        }
+        
         for ( Entry<Node, Integer> entry : predicates.entrySet() )
         {
             Node node = entry.getKey() ;
@@ -200,4 +128,13 @@ public class Stats
         
         return stats ;
     }
+
+    private static void addTypeTriple(ItemList statsList, Node type, Node intCount)
+    {
+        ItemList triple = new ItemList() ;
+        triple.add("VAR") ;
+        triple.add(NodeConst.nodeRDFType) ;
+        triple.add(type) ;
+        addPair(statsList, Item.createList(triple), Item.createNode(intCount)) ;
+    }
 }

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollector.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollector.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollector.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollector.java Wed Mar 27 17:09:44 2013
@@ -21,14 +21,16 @@ package com.hp.hpl.jena.tdb.solver.stats
 import java.util.Map ;
 
 import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.graph.NodeConst ;
 
 /** Statistics collector, general purpose, uses Nodes */
 public class StatsCollector extends StatsCollectorBase<Node>
 {
-    public StatsCollector() { super() ; }
-    
-    public StatsCollector(long count, Map<Node, Integer> predicates)
+    public StatsCollector() { super(NodeConst.nodeRDFType) ; }
+
+    @Override
+    protected Map<Node, Integer> convert(Map<Node, Integer> map)
     {
-        super(count, predicates) ;
+        return map ;
     }
 }

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorBase.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorBase.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorBase.java Wed Mar 27 17:09:44 2013
@@ -22,38 +22,35 @@ package com.hp.hpl.jena.tdb.solver.stats
 import java.util.HashMap ;
 import java.util.Map ;
 
+import com.hp.hpl.jena.graph.Node ;
+
 import org.apache.jena.atlas.lib.MapUtils ;
 
 /** Statistics collector, general purpose */
-public class StatsCollectorBase<T>
+abstract class StatsCollectorBase<T>
 {
     private long count = 0 ;
     private Map<T, Integer> predicates = new HashMap<T, Integer>(10000) ;
+    private Map<T, Integer> types = new HashMap<T, Integer>(10000) ;
+    private T typeTrigger ;
     
-    protected StatsCollectorBase(long count, Map<T, Integer> predicates)
-    {
-        this.count = count ;
-        this.predicates = predicates ;
-    }
-    
-    public StatsCollectorBase()
+    protected StatsCollectorBase(T typeTrigger)
     {
-        this(0, new HashMap<T, Integer>(10000)) ;
+        this.typeTrigger = typeTrigger ;
     }
 
     public void record(T g, T s, T p, T o)
     {
         count++ ;
         MapUtils.increment(predicates, p) ;
+        if ( typeTrigger != null && typeTrigger.equals(p) )
+            MapUtils.increment(types, o) ;
     }
 
-    public long getCount()
-    {
-        return count ;
-    }
-
-    public Map<T, Integer> getPredicates()
+    protected abstract Map<Node, Integer> convert(Map<T, Integer> map) ;
+    
+    public StatsResults results()
     {
-        return predicates ;
+        return new StatsResults(convert(predicates), convert(types), count) ;
     }
 }

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorNodeId.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorNodeId.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorNodeId.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsCollectorNodeId.java Wed Mar 27 17:09:44 2013
@@ -22,21 +22,35 @@ import java.util.HashMap ;
 import java.util.Map ;
 
 import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.sparql.graph.NodeConst ;
 import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
 import com.hp.hpl.jena.tdb.store.NodeId ;
 
 /** Statistics collector, aggregates based on NodeId */
 public class StatsCollectorNodeId extends StatsCollectorBase<NodeId>
 {
-    public Map<Node, Integer> asNodeStats(NodeTable nodeTable)
+    private NodeTable nodeTable ;
+    
+    public StatsCollectorNodeId(NodeTable nodeTable)
     {
-        Map<NodeId, Integer> predicateIds = super.getPredicates() ;
-        Map<Node, Integer> predicates2 = new HashMap<Node, Integer>(1000) ;
-        for ( NodeId p : predicateIds.keySet() )
+        super(findRDFType(nodeTable)) ;
+        this.nodeTable = nodeTable ;
+    }
+    
+    private static NodeId findRDFType(NodeTable nodeTable2)
+    {
+        return nodeTable2.getAllocateNodeId(NodeConst.nodeRDFType) ;
+    }
+
+    @Override
+    protected Map<Node, Integer> convert(Map<NodeId, Integer> stats)
+    {
+        Map<Node, Integer> statsNodes = new HashMap<Node, Integer>(1000) ;
+        for ( NodeId p : stats.keySet() )
         {
             Node n = nodeTable.getNodeForNodeId(p) ;
-            predicates2.put(n, predicateIds.get(p)) ;
+            statsNodes.put(n, stats.get(p)) ;
         }
-        return predicates2 ;
+        return statsNodes ;
     }
 }

Added: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsResults.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsResults.java?rev=1461713&view=auto
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsResults.java (added)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/stats/StatsResults.java Wed Mar 27 17:09:44 2013
@@ -0,0 +1,53 @@
+/*
+ * 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.tdb.solver.stats;
+
+import java.util.Map ;
+
+import com.hp.hpl.jena.graph.Node ;
+
+/** Statistics collector */
+public class StatsResults 
+{
+    private final Map<Node, Integer> predicates ;
+    private final Map<Node, Integer> types ;
+    private final long count ;
+
+    StatsResults(Map<Node, Integer> predicates, Map<Node, Integer> types, long count)
+    {
+        this.count = count ;
+        this.predicates = predicates ;
+        this.types = types ;
+    }
+
+    public Map<Node, Integer> getPredicates()
+    {
+        return predicates ;
+    }
+
+    public Map<Node, Integer> getTypes()
+    {
+        return types ;
+    }
+
+    public long getCount()
+    {
+        return count ;
+    }
+}

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader/BulkLoader.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader/BulkLoader.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader/BulkLoader.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader/BulkLoader.java Wed Mar 27 17:09:44 2013
@@ -284,7 +284,7 @@ public class BulkLoader
             if ( ! dsg.getLocation().isMem() && startedEmpty )
             {
                 String filename = dsg.getLocation().getPath(Names.optStats) ;
-                Stats.write(filename, stats) ;
+                Stats.write(filename, stats.results()) ;
             }
             forceSync(dsg) ;
         }
@@ -350,7 +350,7 @@ public class BulkLoader
             if ( ! dsg.getLocation().isMem() && startedEmpty )
             {
                 String filename = dsg.getLocation().getPath(Names.optStats) ;
-                Stats.write(filename, stats) ;
+                Stats.write(filename, stats.results()) ;
             }
             forceSync(dsg) ;
         }

Modified: jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader2/CmdNodeTableBuilder.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader2/CmdNodeTableBuilder.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader2/CmdNodeTableBuilder.java (original)
+++ jena/trunk/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/store/bulkloader2/CmdNodeTableBuilder.java Wed Mar 27 17:09:44 2013
@@ -57,6 +57,7 @@ import com.hp.hpl.jena.tdb.store.Dataset
 import com.hp.hpl.jena.tdb.store.NodeId ;
 import com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader ;
 import com.hp.hpl.jena.tdb.store.bulkloader.BulkStreamRDF ;
+import com.hp.hpl.jena.tdb.sys.Names ;
 
 /** Build node table - write triples/quads as text file */
 public class CmdNodeTableBuilder extends CmdGeneral
@@ -169,7 +170,7 @@ public class CmdNodeTableBuilder extends
         
         // See Stats class.
         if ( ! location.isMem() )
-            Stats.write(dsg, sink.getCollector()) ;
+            Stats.write(dsg.getLocation().getPath(Names.optStats), sink.getCollector().results()) ;
         
         // ---- Monitor
         long time = monitor.finish() ;
@@ -198,7 +199,7 @@ public class CmdNodeTableBuilder extends
             this.nodeTable = ntt.getNodeTable() ;
             this.writerTriples = new WriteRows(outputTriples, 3, 20000) ; 
             this.writerQuads = new WriteRows(outputQuads, 4, 20000) ; 
-            this.stats = new StatsCollectorNodeId() ;
+            this.stats = new StatsCollectorNodeId(nodeTable) ;
         }
         
         @Override

Modified: jena/trunk/jena-tdb/src/main/java/tdb/cmdline/CmdTDBGraph.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/tdb/cmdline/CmdTDBGraph.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/tdb/cmdline/CmdTDBGraph.java (original)
+++ jena/trunk/jena-tdb/src/main/java/tdb/cmdline/CmdTDBGraph.java Wed Mar 27 17:09:44 2013
@@ -21,6 +21,8 @@ package tdb.cmdline;
 import arq.cmd.CmdException ;
 import arq.cmdline.ArgDecl ;
 
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.graph.NodeFactory ;
 import com.hp.hpl.jena.query.Dataset ;
 import com.hp.hpl.jena.rdf.model.Model ;
 import com.hp.hpl.jena.sparql.util.Utils ;
@@ -60,6 +62,8 @@ public abstract class CmdTDBGraph extend
             return ds.getDefaultModel() ;
     }
     
+    public Node getGraphName()  { return graphName == null ? null : NodeFactory.createURI(graphName) ; } 
+    
     protected GraphTDB getGraph()
     {
         if ( graphName != null )

Modified: jena/trunk/jena-tdb/src/main/java/tdb/tdbconfig.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/tdb/tdbconfig.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/tdb/tdbconfig.java (original)
+++ jena/trunk/jena-tdb/src/main/java/tdb/tdbconfig.java Wed Mar 27 17:09:44 2013
@@ -29,6 +29,7 @@ import tdb.cmdline.CmdTDBGraph ;
 import arq.cmdline.CmdARQ ;
 import arq.cmdline.ModVersion ;
 
+import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.shared.PrefixMapping ;
 import com.hp.hpl.jena.sparql.core.DatasetPrefixStorage ;
 import com.hp.hpl.jena.sparql.util.Utils ;
@@ -37,8 +38,8 @@ import com.hp.hpl.jena.tdb.base.file.Fil
 import com.hp.hpl.jena.tdb.base.file.Location ;
 import com.hp.hpl.jena.tdb.base.objectfile.StringFile ;
 import com.hp.hpl.jena.tdb.solver.stats.Stats ;
-import com.hp.hpl.jena.tdb.solver.stats.StatsCollector ;
-import com.hp.hpl.jena.tdb.store.GraphTDB ;
+import com.hp.hpl.jena.tdb.solver.stats.StatsResults ;
+import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
 import com.hp.hpl.jena.tdb.sys.DatasetControlNone ;
 import com.hp.hpl.jena.tdb.sys.SetupTDB ;
 
@@ -171,9 +172,10 @@ public class tdbconfig extends CmdSub
         @Override
         protected void exec()
         {
-            GraphTDB graph = getGraph() ;
-            StatsCollector stats = Stats.gatherTDB(graph) ;
-            Stats.write(System.out, stats) ;
+            DatasetGraphTDB dsg = getDatasetGraphTDB() ;
+            Node gn = getGraphName() ;
+            StatsResults results = tdbstats.stats(dsg, gn) ;
+            Stats.write(System.out, results) ;
         }
 
         @Override

Modified: jena/trunk/jena-tdb/src/main/java/tdb/tdbstats.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-tdb/src/main/java/tdb/tdbstats.java?rev=1461713&r1=1461712&r2=1461713&view=diff
==============================================================================
--- jena/trunk/jena-tdb/src/main/java/tdb/tdbstats.java (original)
+++ jena/trunk/jena-tdb/src/main/java/tdb/tdbstats.java Wed Mar 27 17:09:44 2013
@@ -18,13 +18,19 @@
 
 package tdb;
 
+import java.util.Iterator ;
+
+import org.apache.jena.atlas.lib.Tuple ;
 import tdb.cmdline.CmdTDB ;
 import tdb.cmdline.CmdTDBGraph ;
 
+import com.hp.hpl.jena.graph.Node ;
+import com.hp.hpl.jena.tdb.nodetable.NodeTable ;
 import com.hp.hpl.jena.tdb.solver.stats.Stats ;
-import com.hp.hpl.jena.tdb.solver.stats.StatsCollector ;
-import com.hp.hpl.jena.tdb.store.GraphTDB ;
-
+import com.hp.hpl.jena.tdb.solver.stats.StatsCollectorNodeId ;
+import com.hp.hpl.jena.tdb.solver.stats.StatsResults ;
+import com.hp.hpl.jena.tdb.store.DatasetGraphTDB ;
+import com.hp.hpl.jena.tdb.store.NodeId ;
 
 public class tdbstats extends CmdTDBGraph
 {
@@ -45,12 +51,43 @@ public class tdbstats extends CmdTDBGrap
     {
         return null ;
     }
+    
+    public static StatsResults stats(DatasetGraphTDB dsg, Node gn)
+    {
+        NodeTable nt = dsg.getTripleTable().getNodeTupleTable().getNodeTable() ;
+        StatsCollectorNodeId stats = new StatsCollectorNodeId(nt) ;
+        
+        if ( gn == null )
+        {
+            Iterator<Tuple<NodeId>> iter = dsg.getTripleTable().getNodeTupleTable().findAll() ;
+            for ( ; iter.hasNext(); )
+            {
+                Tuple<NodeId> t = iter.next() ;
+                stats.record(null, t.get(0), t.get(1), t.get(2)) ;
+            }
+        }
+        else
+        {
+            NodeId gnid = nt.getNodeIdForNode(gn) ;
+            if ( gnid == null )
+            {}
+            Iterator<Tuple<NodeId>> iter = dsg.getQuadTable().getNodeTupleTable().find(gnid, null, null, null) ;
+            
+            for ( ; iter.hasNext(); )
+            {
+                Tuple<NodeId> t = iter.next() ;
+                stats.record(t.get(0), t.get(1), t.get(2), t.get(3)) ;
+            }
+        }
+        return stats.results() ;
+    }
 
     @Override
     protected void exec()
     {
-        GraphTDB graph = getGraph() ;
-        StatsCollector stats = Stats.gatherTDB(graph) ;
-        Stats.write(System.out, stats) ;
+        DatasetGraphTDB dsg = getDatasetGraphTDB() ;
+        Node gn = getGraphName() ;
+        StatsResults results = stats(dsg, gn) ;
+        Stats.write(System.out, results) ;
     }
 }