Modified: 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/MalformedIDNException.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/MalformedIDNException.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/MalformedIDNException.java
 (original)
+++ 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/MalformedIDNException.java
 Tue Jan 29 20:27:24 2013
@@ -23,8 +23,6 @@ import java.net.MalformedURLException;
 /**
  * The underlying IDN library detected an error
  * in the Internationalized Domain Name in an IRI.
- * @author Jeremy J. Carroll
- *
  */
 public final class MalformedIDNException extends MalformedURLException {
 

Modified: 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/Violation.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/Violation.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/Violation.java
 (original)
+++ 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/Violation.java
 Tue Jan 29 20:27:24 2013
@@ -28,8 +28,6 @@ package org.apache.jena.iri;
  * result in errors and warnings
  * depends on the setting of the related
  * {@link IRIFactory}.
- * @author Jeremy J. Carroll
- *
  */
 public abstract class  Violation implements ViolationCodes, IRIComponents {
 

Modified: 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/impl/IDNP.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/impl/IDNP.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/impl/IDNP.java
 (original)
+++ 
jena/branches/streaming-update/jena-iri/src/main/java/org/apache/jena/iri/impl/IDNP.java
 Tue Jan 29 20:27:24 2013
@@ -23,8 +23,6 @@ import java.net.IDN;
  * A wrapper around java.net.IDN to avoid a bug when checking result.
  * It looks like the IDN is apply checks before fully converting, so this 
defers
  * a similar check until the end.
- * 
- * @author Damian Steer <[email protected]>
  */
 public class IDNP {
     

Modified: 
jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/MoreTests.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/MoreTests.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/MoreTests.java
 (original)
+++ 
jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/MoreTests.java
 Tue Jan 29 20:27:24 2013
@@ -28,17 +28,11 @@ import org.apache.jena.iri.IRI ;
 import org.apache.jena.iri.IRIFactory ;
 import org.apache.jena.iri.Violation ;
 
-
-/**
- * @author jjc
- *  
- */
 public class MoreTests extends TestCase {
        
        static public Test suite() {
                TestSuite suite = new TestSuite("Additional IRI Tests");
 
-               
                suite.addTest(new MoreTests("testRelativizeFrag1"));
                suite.addTest(new MoreTests("testRelativizeFrag2"));
                suite.addTest(new MoreTests("testXPointer"));

Modified: 
jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/test/MoreTests.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/test/MoreTests.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/test/MoreTests.java
 (original)
+++ 
jena/branches/streaming-update/jena-iri/src/test/java/org/apache/jena/iri/test/MoreTests.java
 Tue Jan 29 20:27:24 2013
@@ -28,11 +28,6 @@ import org.apache.jena.iri.IRI ;
 import org.apache.jena.iri.IRIFactory ;
 import org.apache.jena.iri.Violation ;
 
-
-/**
- * @author jjc
- *  
- */
 public class MoreTests extends TestCase {
        
        static public Test suite() {

Modified: jena/branches/streaming-update/jena-tdb/ReleaseNotes.txt
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/ReleaseNotes.txt?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- jena/branches/streaming-update/jena-tdb/ReleaseNotes.txt (original)
+++ jena/branches/streaming-update/jena-tdb/ReleaseNotes.txt Tue Jan 29 
20:27:24 2013
@@ -5,6 +5,8 @@ ChangeLog for TDB
 
 ** TDB 0.10.0 depends on Jena 2.10.0 (ARQ 2.10.0)
 
++ Improve the performance of union default graph by efficiently handling 
potential duplicates.  
++ Command line tdbquery: --mem (or --data) reads into an in-memory dadaset and 
executes the query.
 + JENA-289 : QueryExecution timeouts now cause TDB BGPs to timeout even if 
they produce no output. 
 + JENA-363 : Fix to handling of integers with absolute values between 2^56 and 
2^63.  
 + JENA-346 : Further fixes for default union graph + write transactions.
@@ -14,7 +16,7 @@ ChangeLog for TDB
 ==== TDB 0.9.4
 
 + Enable batching of flushing commits to the main database - 
-  The improves transactional write performance.
+  This improves transactional write performance.
 + Extensive testing and fixing for recovery due to abrupt termination of the 
JVM.  
 + JENA-318 : Fix rejection of bad language tags.
 + JENA_317 : Fix to handling decimal numbers.  Decimals of around 15 digits 
could be corrupted.  

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/TupleTable.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/TupleTable.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/TupleTable.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/index/TupleTable.java
 Tue Jan 29 20:27:24 2013
@@ -25,11 +25,13 @@ import java.util.Iterator ;
 import org.apache.jena.atlas.lib.Closeable ;
 import org.apache.jena.atlas.lib.Sync ;
 import org.apache.jena.atlas.lib.Tuple ;
+import org.apache.jena.atlas.logging.Log ;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
 
 import com.hp.hpl.jena.tdb.TDBException ;
 import com.hp.hpl.jena.tdb.store.NodeId ;
+import com.hp.hpl.jena.tdb.sys.SystemTDB ;
 
 /** A TupleTable is a set of TupleIndexes.  The first TupleIndex is the 
"primary" index and must exist */
 public class TupleTable implements Sync, Closeable
@@ -37,6 +39,7 @@ public class TupleTable implements Sync,
     private static Logger log = LoggerFactory.getLogger(TupleTable.class) ;
     
     private final TupleIndex[] indexes ;
+    private final TupleIndex   scanAllIndex ;   // Use this index if a 
complete scan is needed.
     private final int tupleLen ;
     private boolean syncNeeded = false ;
     
@@ -51,12 +54,35 @@ public class TupleTable implements Sync,
             if ( index != null && index.getTupleLength() != tupleLen )
                 throw new TDBException("Incompatible index: 
"+index.getMapping()) ;
         }
-        
+        scanAllIndex = chooseScanAllIndex(tupleLen, indexes) ;
     }
     
-    int x = 0 ;
-    int added = 0 ;
-    
+    /** Choose an index to scan in case we are asked for everything
+     * This needs to be ???G for the distinctAdjacent filter in union query to 
work.
+     */
+    private static TupleIndex chooseScanAllIndex(int tupleLen, TupleIndex[] 
indexes)
+    {
+        if ( tupleLen != 4 )
+            return indexes[0] ;
+        
+        for ( TupleIndex index : indexes )
+        {
+            // First look for SPOG
+            if ( index.getName().equals("SPOG") )
+                return index ;
+        }
+        
+        for ( TupleIndex index : indexes )
+        {
+            // Then look for any ???G
+            if ( index.getName().endsWith("G") )
+                return index ;
+        }
+        
+        Log.warn(SystemTDB.errlog, "Did not find a ???G index for full scans") 
;
+        return indexes[0] ;
+    }
+
     /** Insert a tuple - return true if it was really added, false if it was a 
duplicate */
     public boolean add(Tuple<NodeId> t) 
     { 
@@ -147,7 +173,7 @@ public class TupleTable implements Sync,
         }
 
         if ( numSlots == 0 )
-            return indexes[0].all() ;
+            return scanAllIndex.all() ;
         
         int indexNumSlots = 0 ;
         TupleIndex index = null ;
@@ -168,7 +194,6 @@ public class TupleTable implements Sync,
         if ( index == null )
             // No index at all.  Scan.
             index = indexes[0] ;
-
         return index.find(pattern) ;
     }
     

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/lib/NodeFmtLib.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/lib/NodeFmtLib.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/lib/NodeFmtLib.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/lib/NodeFmtLib.java
 Tue Jan 29 20:27:24 2013
@@ -19,7 +19,7 @@
 package com.hp.hpl.jena.tdb.lib;
 
 import org.apache.jena.atlas.lib.Chars ;
-import org.apache.jena.riot.system.PrefixMap ;
+import org.apache.jena.riot.system.PrefixMap;
 import org.apache.jena.riot.system.Prologue ;
 import org.apache.jena.riot.system.RiotChars ;
 

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/nodetable/NodeTupleTableConcrete.java
 Tue Jan 29 20:27:24 2013
@@ -42,8 +42,8 @@ public class NodeTupleTableConcrete impl
     private final DatasetControl dsPolicy ;
 
     /*
-     * Concurrency checking: Everything goes through one of addRow, deleteRow 
or
-     * find*
+     * Concurrency checking: Everything goes through one of 
+     * addRow, deleteRow or find*
      */
 
     public NodeTupleTableConcrete(int N, TupleIndex[] indexes, NodeTable 
nodeTable, DatasetControl dsControl)

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/OpExecutorTDB.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/OpExecutorTDB.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/OpExecutorTDB.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/OpExecutorTDB.java
 Tue Jan 29 20:27:24 2013
@@ -229,15 +229,17 @@ public class OpExecutorTDB extends OpExe
             return optimizeExecuteTriples(ds.getEffectiveDefaultGraph(), 
input, bgp, exprs, execCxt) ;
         
         // ---- Execute quads+filters
-        ReorderTransformation transform = ds.getReorderTransform() ;
-
-        if ( transform != null )
+        if ( bgp.size() >= 2 )
         {
-            QueryIterPeek peek = QueryIterPeek.create(input, execCxt) ;
-            input = peek ; // Original input now invalid.
-            bgp = reorder(bgp, peek, transform) ;
+            ReorderTransformation transform = ds.getReorderTransform() ;
+    
+            if ( transform != null )
+            {
+                QueryIterPeek peek = QueryIterPeek.create(input, execCxt) ;
+                input = peek ; // Original input now invalid.
+                bgp = reorder(bgp, peek, transform) ;
+            }
         }
-
         // -- Filter placement
         Op op = null ;
         if ( exprs != null )

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/SolverLib.java
 Tue Jan 29 20:27:24 2013
@@ -152,7 +152,7 @@ public class SolverLib
         Iterator<Binding> iterBinding = converter.convert(nodeTable, chain) ;
         
         // "input" will be closed by QueryIterTDB but is otherwise unused.
-        // "killList" wil be aborted on timeout.
+        // "killList" will be aborted on timeout.
         return new QueryIterTDB(iterBinding, killList, input, execCxt) ;
     }
     

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/StageMatchTuple.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/StageMatchTuple.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/StageMatchTuple.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/solver/StageMatchTuple.java
 Tue Jan 29 20:27:24 2013
@@ -88,9 +88,6 @@ public class StageMatchTuple extends Rep
 
         prepare(nodeTupleTable.getNodeTable(), patternTuple, input, ids, var) ;
         
-        // Go directly to the tuple table
-        //Iterator<Tuple<NodeId>> iterMatches = 
nodeTupleTable.getTupleTable().find(Tuple.create(ids)) ;
-        
         Iterator<Tuple<NodeId>> iterMatches = 
nodeTupleTable.find(Tuple.create(ids)) ;
         
         // ** Allow a triple or quad filter here.
@@ -106,10 +103,23 @@ public class StageMatchTuple extends Rep
         if ( anyGraphs )
         {
             iterMatches = Iter.operate(iterMatches, quadsToTriples) ;
-            // If any slots were set, then the inde would be ???G and we can 
use distinctAdjacent.
+            // If any slots were set, then the index would be ???G and we can 
use distinctAdjacent.
             // If all slots are unset, the index is probably GSPO (SPOG would 
be better in this one case). 
             // This is a safe, if potentially costly, choice. 
-            iterMatches = Iter.distinct(iterMatches) ;  // WRT only three 
varying slots.
+            
+            //Guaranteed 
+            //iterMatches = Iter.distinct(iterMatches) ;
+            
+            // This depends on the way indexes are choose and
+            // the indexing pattern. It assumes that the index 
+            // chosen ends in G so same triples are adjacent 
+            // in a union query.
+            // If any slot is defined, then the index will be X??G.
+            // if no slot is defined, then the index will be ???G.
+            //  See TupleTable.scanAllIndex that ensures the latter.
+            //  The former assumes indexes are either G... or ...G.
+            //  No G part way through.
+            iterMatches = Iter.distinctAdjacent(iterMatches) ;
         }
         
         // Map Tuple<NodeId> to BindingNodeId

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/com/hp/hpl/jena/tdb/transaction/NodeTableTrans.java
 Tue Jan 29 20:27:24 2013
@@ -219,6 +219,7 @@ public class NodeTableTrans implements N
         throw new TDBException(msg) ;
     }
     
+    // Debugging only
     private void dump()
     {
         System.err.println(">>>>>>>>>>") ;
@@ -328,8 +329,11 @@ public class NodeTableTrans implements N
         // Ensure the cache does not flush.
         nodeTableJournal = null ;
         // then make sure the journal file is empty.
-        journalObjFile.truncate(journalObjFileStartOffset) ;
-        journalObjFile.sync() ;
+        if ( journalObjFile != null )
+        {
+            journalObjFile.truncate(journalObjFileStartOffset) ;
+            journalObjFile.sync() ;
+        }
         finish() ;
     }
     

Modified: 
jena/branches/streaming-update/jena-tdb/src/main/java/tdb/cmdline/ModTDBDataset.java
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/jena-tdb/src/main/java/tdb/cmdline/ModTDBDataset.java?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- 
jena/branches/streaming-update/jena-tdb/src/main/java/tdb/cmdline/ModTDBDataset.java
 (original)
+++ 
jena/branches/streaming-update/jena-tdb/src/main/java/tdb/cmdline/ModTDBDataset.java
 Tue Jan 29 20:27:24 2013
@@ -22,6 +22,7 @@ import java.util.ArrayList ;
 import java.util.List ;
 
 import org.apache.jena.atlas.logging.Log ;
+import org.apache.jena.riot.RDFDataMgr ;
 import arq.cmd.CmdException ;
 import arq.cmdline.ArgDecl ;
 import arq.cmdline.CmdArgModule ;
@@ -45,29 +46,37 @@ public class ModTDBDataset extends ModDa
     // Mixes assembler, location and "tdb"
     // Can make a single model or a dataset
     
-    private ArgDecl argMem                  = new ArgDecl(ArgDecl.NoValue, 
"mem") ;
+    private ArgDecl argMem                  = new ArgDecl(ArgDecl.HasValue, 
"mem", "data") ;
     private ModTDBAssembler modAssembler    = new ModTDBAssembler() ;
-    private boolean useMemory               = false ;
+    private String inMemFile                = null ;
     
     public ModTDBDataset() {}
     
     @Override
     public void registerWith(CmdGeneral cmdLine)
     {
-        cmdLine.add(argMem) ; //, "mem", "Memory graph") ;
+        cmdLine.add(argMem, "--mem=FILE", "Execute on an in-memory TDB 
database (for testing)") ;
         cmdLine.addModule(modAssembler) ;
     }
 
     @Override
     public void processArgs(CmdArgModule cmdLine)
     {
-        useMemory = cmdLine.contains(argMem) ;
+        inMemFile = cmdLine.getValue(argMem) ;
         modAssembler.processArgs(cmdLine) ;
     }        
 
     @Override
     public Dataset createDataset()
     {
+        if ( inMemFile != null )
+        {
+            Dataset ds = TDBFactory.createDataset() ;
+            RDFDataMgr.read(ds, inMemFile) ;
+            return ds ;
+            
+        }
+        
         if (  modAssembler.getAssemblerFile() != null )
         {
             Dataset thing = null ;

Modified: jena/branches/streaming-update/pom.xml
URL: 
http://svn.apache.org/viewvc/jena/branches/streaming-update/pom.xml?rev=1440101&r1=1440100&r2=1440101&view=diff
==============================================================================
--- jena/branches/streaming-update/pom.xml (original)
+++ jena/branches/streaming-update/pom.xml Tue Jan 29 20:27:24 2013
@@ -61,6 +61,8 @@
     <module>jena-sdb</module>
     <module>jena-larq</module>
     -->
+    <!-- Convenience modules -->
+    <module>apache-jena-libs</module>
     <!-- Delivery modules - after build modules --> 
     <module>apache-jena</module>
   </modules>


Reply via email to