You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marmotta.apache.org by ss...@apache.org on 2015/12/19 17:12:15 UTC

marmotta git commit: code cleanups

Repository: marmotta
Updated Branches:
  refs/heads/develop 54873330a -> 0064d3358


code cleanups


Project: http://git-wip-us.apache.org/repos/asf/marmotta/repo
Commit: http://git-wip-us.apache.org/repos/asf/marmotta/commit/0064d335
Tree: http://git-wip-us.apache.org/repos/asf/marmotta/tree/0064d335
Diff: http://git-wip-us.apache.org/repos/asf/marmotta/diff/0064d335

Branch: refs/heads/develop
Commit: 0064d3358325a9fcf7d6dcf7b717107fea1356d8
Parents: 5487333
Author: Sebastian Schaffert <ss...@apache.org>
Authored: Sat Dec 19 17:13:49 2015 +0100
Committer: Sebastian Schaffert <ss...@apache.org>
Committed: Sat Dec 19 17:13:49 2015 +0100

----------------------------------------------------------------------
 libraries/ostrich/backend/CMakeLists.txt        |  2 +
 .../backend/persistence/leveldb_persistence.cc  |  4 +-
 libraries/ostrich/backend/test/CMakeLists.txt   |  1 -
 .../ostrich/backend/test/PersistenceTest.cc     | 45 +++++++++++++++++++-
 libraries/ostrich/backend/util/iterator.h       |  2 +-
 5 files changed, 49 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/marmotta/blob/0064d335/libraries/ostrich/backend/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/libraries/ostrich/backend/CMakeLists.txt b/libraries/ostrich/backend/CMakeLists.txt
index e05c28b..5a8f110 100644
--- a/libraries/ostrich/backend/CMakeLists.txt
+++ b/libraries/ostrich/backend/CMakeLists.txt
@@ -28,6 +28,8 @@ if (Tcmalloc_FOUND)
     message(STATUS "Enabling profiling support (Tcmalloc found)")
 endif (Tcmalloc_FOUND)
 
+enable_testing()
+
 add_subdirectory(util)
 add_subdirectory(model)
 add_subdirectory(sparql)

http://git-wip-us.apache.org/repos/asf/marmotta/blob/0064d335/libraries/ostrich/backend/persistence/leveldb_persistence.cc
----------------------------------------------------------------------
diff --git a/libraries/ostrich/backend/persistence/leveldb_persistence.cc b/libraries/ostrich/backend/persistence/leveldb_persistence.cc
index f29895c..852f152 100644
--- a/libraries/ostrich/backend/persistence/leveldb_persistence.cc
+++ b/libraries/ostrich/backend/persistence/leveldb_persistence.cc
@@ -170,6 +170,7 @@ class PatternQuery {
         return *this;
     }
 
+    // Returns true in case this query pattern cannot be answered by the index alone.
     bool NeedsFilter() const {
         return needsFilter;
     }
@@ -260,7 +261,8 @@ class StatementRangeIterator : public LevelDBIterator<Statement> {
     char *hiKey;
 };
 
-
+// Return true if the statement matches the pattern. Wildcards (empty fields)
+// in the pattern are ignored.
 bool Matches(const Statement& pattern, const Statement& stmt) {
     // equality operators defined in rdf_model.h
     if (pattern.has_context() && stmt.context() != pattern.context()) {

http://git-wip-us.apache.org/repos/asf/marmotta/blob/0064d335/libraries/ostrich/backend/test/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/libraries/ostrich/backend/test/CMakeLists.txt b/libraries/ostrich/backend/test/CMakeLists.txt
index 660f40f..29491ba 100644
--- a/libraries/ostrich/backend/test/CMakeLists.txt
+++ b/libraries/ostrich/backend/test/CMakeLists.txt
@@ -1,4 +1,3 @@
-enable_testing()
 include_directories(${GTEST_INCLUDE_DIRS})
 include_directories(..)
 include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)

http://git-wip-us.apache.org/repos/asf/marmotta/blob/0064d335/libraries/ostrich/backend/test/PersistenceTest.cc
----------------------------------------------------------------------
diff --git a/libraries/ostrich/backend/test/PersistenceTest.cc b/libraries/ostrich/backend/test/PersistenceTest.cc
index 1b2cfb2..301692e 100644
--- a/libraries/ostrich/backend/test/PersistenceTest.cc
+++ b/libraries/ostrich/backend/test/PersistenceTest.cc
@@ -73,8 +73,8 @@ TEST_F(PersistenceTest, TestAddStatements) {
     }
 }
 
-
-TEST_F(PersistenceTest, TestGetStatements) {
+// Test pattern queries that can be answered directly by the index.
+TEST_F(PersistenceTest, TestGetStatementsIndexed) {
     std::vector<rdf::proto::Statement> stmts = {
             rdf::Statement(rdf::URI("http://example.com/s1"), rdf::URI("http://example.com/p1"),
                            rdf::URI("http://example.com/o1")).getMessage(),
@@ -121,6 +121,47 @@ TEST_F(PersistenceTest, TestGetStatements) {
     EXPECT_FALSE(it3->hasNext());
 }
 
+// Test pattern queries that trigger filtering because the index alone cannot answer these queries.
+TEST_F(PersistenceTest, TestGetStatementsFiltered) {
+    std::vector<rdf::proto::Statement> stmts = {
+            rdf::Statement(rdf::URI("http://example.com/s1"), rdf::URI("http://example.com/p1"),
+                           rdf::URI("http://example.com/o1")).getMessage(),
+            rdf::Statement(rdf::URI("http://example.com/s1"), rdf::URI("http://example.com/p2"),
+                           rdf::URI("http://example.com/o1")).getMessage(),
+            rdf::Statement(rdf::URI("http://example.com/s1"), rdf::URI("http://example.com/p3"),
+                           rdf::URI("http://example.com/o1")).getMessage(),
+            rdf::Statement(rdf::URI("http://example.com/s2"), rdf::URI("http://example.com/p1"),
+                           rdf::URI("http://example.com/o2")).getMessage(),
+            rdf::Statement(rdf::URI("http://example.com/s2"), rdf::URI("http://example.com/p2"),
+                           rdf::URI("http://example.com/o2")).getMessage(),
+    };
+
+    util::CollectionIterator<rdf::proto::Statement> it(stmts);
+    db->AddStatements(it);
+
+    EXPECT_EQ(5, db->Size());
+
+    rdf::Statement pattern1;
+    pattern1.setSubject(rdf::URI("http://example.com/s1"));
+    pattern1.setObject(rdf::URI("http://example.com/o1"));
+    auto it1 = db->GetStatements(pattern1.getMessage());
+    for (int i=0; i<3; i++) {
+        ASSERT_TRUE(it1->hasNext());
+        EXPECT_THAT(stmts, Contains(it1->next()));
+    }
+    EXPECT_FALSE(it1->hasNext());
+
+    rdf::Statement pattern2;
+    pattern2.setSubject(rdf::URI("http://example.com/s2"));
+    pattern2.setObject(rdf::URI("http://example.com/o2"));
+    auto it2 = db->GetStatements(pattern2.getMessage());
+    for (int i=0; i<2; i++) {
+        ASSERT_TRUE(it2->hasNext());
+        EXPECT_THAT(stmts, Contains(it2->next()));
+    }
+    EXPECT_FALSE(it2->hasNext());
+}
+
 
 }
 }

http://git-wip-us.apache.org/repos/asf/marmotta/blob/0064d335/libraries/ostrich/backend/util/iterator.h
----------------------------------------------------------------------
diff --git a/libraries/ostrich/backend/util/iterator.h b/libraries/ostrich/backend/util/iterator.h
index 0d34a4b..8ba1497 100644
--- a/libraries/ostrich/backend/util/iterator.h
+++ b/libraries/ostrich/backend/util/iterator.h
@@ -194,7 +194,7 @@ class FilteringIterator : public CloseableIterator<T> {
     bool nextExists;
 
     void findNext() {
-        current_ = next_;
+        current_ = std::move(next_);
         nextExists = false;
 
         while (it->hasNext()) {