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()) {