aboutsummaryrefslogtreecommitdiffstats
path: root/include/SqliteBackend.h
diff options
context:
space:
mode:
authorMarcos Magueta <maguetamarcos@gmail.com>2026-05-10 03:36:59 -0300
committerMarcos Magueta <maguetamarcos@gmail.com>2026-05-10 03:36:59 -0300
commit2864398c7b723c1d43166d422ea7028ef33cf9e3 (patch)
treeec63cd647239612167c36e521610f69023ed9303 /include/SqliteBackend.h
parent7ffd4d99bbb8e358c6694c27c7ff859967872ece (diff)
downloadRNT-2864398c7b723c1d43166d422ea7028ef33cf9e3.tar.gz
RNT-2864398c7b723c1d43166d422ea7028ef33cf9e3.zip
sqlite backend with actual pagination
Diffstat (limited to 'include/SqliteBackend.h')
-rw-r--r--include/SqliteBackend.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/include/SqliteBackend.h b/include/SqliteBackend.h
new file mode 100644
index 0000000..0b21925
--- /dev/null
+++ b/include/SqliteBackend.h
@@ -0,0 +1,60 @@
+#pragma once
+
+#include "Api.h"
+#include "IStorageBackend.h"
+
+#include <sqlite3.h>
+#include <string>
+#include <vector>
+
+/**
+ * @file SqliteBackend.h
+ * @brief IStorageBackend implementation backed by an in-process SQLite database.
+ *
+ * SQLite schema:
+ *
+ * kv(hash TEXT PRIMARY KEY, value BLOB NOT NULL)
+ * — content-addressed store; key is the SHA256 hex digest of value.
+ *
+ * relation_index(path TEXT NOT NULL, tuple_hash TEXT NOT NULL,
+ * UNIQUE(path, tuple_hash))
+ * — maps a relation's logical path to the ordered set of tuple hashes
+ * it contains. Corresponds to Sakura's per-relation B+ tree of
+ * tuple hashes stored in the physical layer.
+ */
+
+namespace nt
+{
+ /**
+ * @class SqliteBackend
+ * @brief IStorageBackend that persists data in a SQLite database.
+ *
+ * Constructed with a file path or ":memory:" for an in-process database.
+ * All KV values are opaque blobs; callers are responsible for serialization
+ * (see TupleCodec).
+ */
+ class NT_API SqliteBackend : public IStorageBackend
+ {
+ public:
+ /**
+ * @brief Opens (or creates) a SQLite database at @p path.
+ * @param path File path, or ":memory:" for an in-process database.
+ * @throws std::runtime_error if the database cannot be opened.
+ */
+ explicit SqliteBackend(const std::string& path = ":memory:");
+ ~SqliteBackend() override;
+
+ std::string Put(std::vector<uint8_t> value) override;
+ std::optional<std::vector<uint8_t>> Get(const std::string& hash) override;
+ void LinkTuple(const std::vector<std::string>& relation_path,
+ const std::string& tuple_hash) override;
+ std::vector<std::string> TupleHashes(const std::vector<std::string>& relation_path,
+ std::size_t offset,
+ std::size_t limit) override;
+
+ private:
+ sqlite3* db_ = nullptr;
+
+ static std::string PathKey(const std::vector<std::string>& path);
+ };
+}