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();
 }