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>
