You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by aj...@apache.org on 2018/03/08 15:07:09 UTC
jena git commit: JENA-1499: Pruning TIM indexes on tuple deletion
Repository: jena
Updated Branches:
refs/heads/master a92048a55 -> d78be3b00
JENA-1499: Pruning TIM indexes on tuple deletion
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/d78be3b0
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/d78be3b0
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/d78be3b0
Branch: refs/heads/master
Commit: d78be3b006a83f4e9e3a83cd76c0c79ee549040c
Parents: a92048a
Author: ajs6f <aj...@apache.org>
Authored: Wed Mar 7 12:25:05 2018 -0500
Committer: ajs6f <aj...@apache.org>
Committed: Wed Mar 7 12:25:05 2018 -0500
----------------------------------------------------------------------
.../jena/sparql/core/mem/PMapQuadTable.java | 23 +++++++++++++-------
.../jena/sparql/core/mem/PMapTripleTable.java | 10 +++++++--
.../core/mem/TestDatasetGraphInMemoryBasic.java | 19 +++++++++++++++-
.../apache/jena/atlas/lib/persistent/PMap.java | 5 +++++
.../apache/jena/atlas/lib/persistent/PSet.java | 5 +++++
.../atlas/lib/persistent/PersistentMap.java | 5 +++++
.../atlas/lib/persistent/PersistentSet.java | 5 +++++
7 files changed, 61 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapQuadTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapQuadTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapQuadTable.java
index 8a31f2e..b929865 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapQuadTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapQuadTable.java
@@ -158,14 +158,21 @@ public class PMapQuadTable extends PMapTupleTable<FourTupleMap, Quad, TConsumer4
final FourTupleMap fourTuples = local().get();
fourTuples.get(first).ifPresent(threeTuples -> threeTuples.get(second)
.ifPresent(twoTuples -> twoTuples.get(third).ifPresent(oneTuples -> {
- if (oneTuples.contains(fourth)) {
- oneTuples = oneTuples.minus(fourth);
- final TwoTupleMap newTwoTuples = twoTuples.minus(third).plus(third, oneTuples);
- final ThreeTupleMap newThreeTuples = threeTuples.minus(second).plus(second, newTwoTuples);
- debug("Setting transactional index to new value.");
- local().set(fourTuples.minus(first).plus(first, newThreeTuples));
- }
- })));
+ if (oneTuples.contains(fourth)) {
+ oneTuples = oneTuples.minus(fourth);
+ final TwoTupleMap newTwoTuples = oneTuples.asSet().isEmpty()
+ ? twoTuples.minus(third)
+ : twoTuples.minus(third).plus(third, oneTuples);
+ final ThreeTupleMap newThreeTuples = newTwoTuples.asMap().isEmpty()
+ ? threeTuples.minus(second)
+ : threeTuples.minus(second).plus(second, newTwoTuples);
+ final FourTupleMap newFourTuples = newThreeTuples.asMap().isEmpty()
+ ? fourTuples.minus(first)
+ : fourTuples.minus(first).plus(first, newThreeTuples);
+ debug("Setting transactional index to new value.");
+ local().set(newFourTuples);
+ }
+ })));
};
}
}
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTripleTable.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTripleTable.java b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTripleTable.java
index 16ba258..73b16df 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTripleTable.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/mem/PMapTripleTable.java
@@ -144,9 +144,15 @@ public class PMapTripleTable extends PMapTupleTable<ThreeTupleMap, Triple, TCons
final ThreeTupleMap threeTuples = local().get();
threeTuples.get(first).ifPresent(twoTuples -> twoTuples.get(second).ifPresent(oneTuples -> {
if (oneTuples.contains(third)) {
- final TwoTupleMap newTwoTuples = twoTuples.minus(second).plus(second, oneTuples.minus(third));
+ oneTuples = oneTuples.minus(third);
+ final TwoTupleMap newTwoTuples = oneTuples.asSet().isEmpty()
+ ? twoTuples.minus(second)
+ : twoTuples.minus(second).plus(second, oneTuples);
debug("Setting transactional index to new value.");
- local().set(threeTuples.minus(first).plus(first, newTwoTuples));
+ final ThreeTupleMap newThreeTuples = twoTuples.asMap().isEmpty()
+ ? threeTuples.minus(first)
+ : threeTuples.minus(first).plus(first, newTwoTuples);
+ local().set(newThreeTuples);
}
}));
};
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemoryBasic.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemoryBasic.java b/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemoryBasic.java
index 3eff49e..7401f70 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemoryBasic.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/core/mem/TestDatasetGraphInMemoryBasic.java
@@ -101,9 +101,26 @@ public class TestDatasetGraphInMemoryBasic extends AbstractDatasetGraphTests {
// no triples from default graph should appear in union
Triple t = Triple.create(createBlankNode(), createBlankNode(), createBlankNode());
dsg.getDefaultGraph().add(t);
- assertFalse(iter(dsg.find(unionGraph, ANY, ANY, ANY)).some(Quad::isDefaultGraph)) ;
+ assertFalse(iter(dsg.find(unionGraph, ANY, ANY, ANY)).some(Quad::isDefaultGraph));
}
+ @Test
+ public void listGraphNodesHasNoPhantomEmptyGraphs() {
+ final DatasetGraph dsg = emptyDataset();
+ final Node g = createURI("http://example/g");
+ final Node s = createURI("http://example/s");
+ final Node p = createURI("http://example/p");
+ final Node o = createURI("http://example/o");
+ dsg.add(g, s, p, o);
+ Iterator<Node> graphNodes = dsg.listGraphNodes();
+ assertTrue("Missing named graph!", graphNodes.hasNext());
+ assertEquals("Wrong graph name!", g, graphNodes.next());
+ assertFalse("Too many named graphs!", graphNodes.hasNext());
+ dsg.delete(g, s, p, o);
+ graphNodes = dsg.listGraphNodes();
+ assertFalse("Too many named graphs!", graphNodes.hasNext());
+ }
+
@Override
protected DatasetGraph emptyDataset() {
return DatasetGraphFactory.createTxnMem();
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PMap.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PMap.java
index dba7160..4c72cf9 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PMap.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PMap.java
@@ -51,6 +51,11 @@ public abstract class PMap<K, V, SelfType extends PMap<K, V, SelfType>> implemen
this(Maps.of());
}
+ @Override
+ public java.util.Map<K, V> asMap() {
+ return wrappedMap.asMap();
+ }
+
/**
* @param wrapped a map that supplies the internal state to be used
* @return a new {@code SelfType} that holds the supplied internal state
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PSet.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PSet.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PSet.java
index 1653c71..a01e293 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PSet.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PSet.java
@@ -65,4 +65,9 @@ public class PSet<E> implements PersistentSet<E> {
public Stream<E> stream() {
return wrappedSet.asSet().stream();
}
+
+ @Override
+ public java.util.Set<E> asSet() {
+ return wrappedSet.asSet();
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentMap.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentMap.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentMap.java
index d3f25e3..788d6bb 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentMap.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentMap.java
@@ -76,4 +76,9 @@ public interface PersistentMap<K, V, SelfType extends PersistentMap<K, V, SelfTy
default <R> Stream<R> flatten(final BiFunction<K, V, Stream<R>> f) {
return entryStream().flatMap(e -> f.apply(e.getKey(), e.getValue()));
}
+
+ /**
+ * An immutable view of this as a {@link java.util.Map}.
+ */
+ java.util.Map<K, V> asMap();
}
http://git-wip-us.apache.org/repos/asf/jena/blob/d78be3b0/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentSet.java
----------------------------------------------------------------------
diff --git a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentSet.java b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentSet.java
index 92e799b..cfd9514 100644
--- a/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentSet.java
+++ b/jena-base/src/main/java/org/apache/jena/atlas/lib/persistent/PersistentSet.java
@@ -56,4 +56,9 @@ public interface PersistentSet<E> {
* @return a {@link Stream} of the elements in this set
*/
Stream<E> stream();
+
+ /**
+ * An immutable view of this as a {@code java.util.Set}.
+ */
+ java.util.Set<E> asSet();
}