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