AC_CHECK_LIB([snappy], [snappy_compress], [], [AC_MSG_FAILURE([libsnappy not found])])
# use system leveldb
AC_CHECK_LIB([leveldb], [leveldb_open], [], [AC_MSG_FAILURE([libleveldb not found])], [-lsnappy -lpthread])
+# see if we can use bloom filters with leveldb
+AC_LANG_PUSH([C++])
+AC_CHECK_HEADER([leveldb/filter_policy.h], [AC_DEFINE([HAVE_LEVELDB_FILTER_POLICY], [1], [Defined if LevelDB supports bloom filters ])])
+AC_LANG_POP([C++])
# use system libs3?
AC_ARG_WITH([system-libs3],
if (options.block_size)
ldoptions.block_size = options.block_size;
if (options.bloom_size) {
+#ifdef HAVE_LEVELDB_FILTER_POLICY
const leveldb::FilterPolicy *_filterpolicy =
leveldb::NewBloomFilterPolicy(options.bloom_size);
filterpolicy.reset(_filterpolicy);
ldoptions.filter_policy = filterpolicy.get();
+#else
+ assert(0 == "bloom size set but installed leveldb doesn't support bloom filters");
+#endif
}
if (!options.compression_enabled)
ldoptions.compression = leveldb::kNoCompression;
#include "leveldb/write_batch.h"
#include "leveldb/slice.h"
#include "leveldb/cache.h"
+#ifdef HAVE_LEVELDB_FILTER_POLICY
#include "leveldb/filter_policy.h"
+#endif
/**
* Uses LevelDB to implement the KeyValueDB interface
string path;
boost::scoped_ptr<leveldb::DB> db;
boost::scoped_ptr<leveldb::Cache> db_cache;
+#ifdef HAVE_LEVELDB_FILTER_POLICY
boost::scoped_ptr<const leveldb::FilterPolicy> filterpolicy;
+#endif
int init(ostream &out, bool create_if_missing);
LevelDBStore(const string &path) :
path(path),
db_cache(NULL),
+#ifdef HAVE_LEVELDB_FILTER_POLICY
filterpolicy(NULL),
+#endif
options()
{}