File indexing completed on 2024-05-12 05:26:00
0001 #pragma once 0002 0003 #include "sink_export.h" 0004 #include <string> 0005 #include <functional> 0006 #include <QString> 0007 #include "storage.h" 0008 #include "log.h" 0009 #include "storage/key.h" 0010 0011 /** 0012 * An index for value pairs. 0013 */ 0014 class SINK_EXPORT Index 0015 { 0016 public: 0017 enum ErrorCodes 0018 { 0019 IndexNotAvailable = -1 0020 }; 0021 0022 class Error 0023 { 0024 public: 0025 Error(const QByteArray &s, int c, const QByteArray &m) : store(s), message(m), code(c) 0026 { 0027 } 0028 QByteArray store; 0029 QByteArray message; 0030 int code; 0031 }; 0032 0033 Index(const QString &storageRoot, const QString &dbName, const QString &indexName, Sink::Storage::DataStore::AccessMode mode = Sink::Storage::DataStore::ReadOnly); 0034 Index(const QString &storageRoot, const QString &name, Sink::Storage::DataStore::AccessMode mode = Sink::Storage::DataStore::ReadOnly); 0035 Index(const QString &storageRoot, const Sink::Storage::DbLayout &layout, Sink::Storage::DataStore::AccessMode mode = Sink::Storage::DataStore::ReadOnly); 0036 Index(const QByteArray &name, Sink::Storage::DataStore::Transaction &); 0037 0038 void add(const QByteArray &key, const QByteArray &value); 0039 void add(const Sink::Storage::Identifier &key, const QByteArray &value); 0040 void remove(const QByteArray &key, const QByteArray &value, bool ignoreRemovalFailure = false); 0041 void remove(const Sink::Storage::Identifier &key, const QByteArray &value, bool ignoreRemovalFailure = false); 0042 0043 void lookup(const QByteArray &key, const std::function<bool(const QByteArray &value)> &resultHandler, const std::function<void(const Error &error)> &errorHandler, 0044 bool matchSubStringKeys = false); 0045 QByteArray lookup(const QByteArray &key); 0046 0047 void rangeLookup(const QByteArray &lowerBound, const QByteArray &upperBound, 0048 const std::function<void(const QByteArray &value)> &resultHandler, 0049 const std::function<void(const Error &error)> &errorHandler); 0050 0051 private: 0052 Q_DISABLE_COPY(Index); 0053 Sink::Storage::DataStore::Transaction mTransaction; 0054 Sink::Storage::DataStore::NamedDatabase mDb; 0055 QString mName; 0056 Sink::Log::Context mLogCtx; 0057 };