summaryrefslogtreecommitdiff
path: root/src/database/records.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-03-21 12:57:11 +1100
committerjacqueline <me@jacqueline.id.au>2024-03-21 12:57:11 +1100
commit3dc0989c7fd6d3d508fa9c5e5269dc45396c09e9 (patch)
tree3e7ddaecaea99d3afb906ad22092dbd796a1abb6 /src/database/records.cpp
parentdadac304dd930ddf4c5aebcc069c5d9f881b2b60 (diff)
downloadtangara-fw-3dc0989c7fd6d3d508fa9c5e5269dc45396c09e9.tar.gz
fix db key prefix format, and use per-file modification times
Diffstat (limited to 'src/database/records.cpp')
-rw-r--r--src/database/records.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/database/records.cpp b/src/database/records.cpp
index af81dc5c..a1efb568 100644
--- a/src/database/records.cpp
+++ b/src/database/records.cpp
@@ -47,15 +47,30 @@ namespace database {
[[maybe_unused]] static const char* kTag = "RECORDS";
+static const char kPathPrefix = 'P';
static const char kDataPrefix = 'D';
static const char kHashPrefix = 'H';
-[[maybe_unused]] static const char kTagHashPrefix = 'T';
+static const char kTagHashPrefix = 'T';
static const char kIndexPrefix = 'I';
static const char kFieldSeparator = '\0';
+static constexpr auto makePrefix(char p) -> std::string {
+ std::string str;
+ str += p;
+ str += kFieldSeparator;
+ return str;
+}
+
+auto EncodePathKey(std::string_view path) -> std::string {
+ std::stringstream out{};
+ out << makePrefix(kPathPrefix);
+ out << path;
+ return out.str();
+}
+
/* 'D/' */
auto EncodeDataPrefix() -> std::string {
- return {kDataPrefix, kFieldSeparator};
+ return makePrefix(kDataPrefix);
}
/* 'D/ 0xACAB' */
@@ -116,8 +131,7 @@ auto ParseDataValue(const leveldb::Slice& slice) -> std::shared_ptr<TrackData> {
/* 'H/ 0xBEEF' */
auto EncodeHashKey(const uint64_t& hash) -> std::string {
- return std::string{kHashPrefix, kFieldSeparator} +
- cppbor::Uint{hash}.toString();
+ return makePrefix(kHashPrefix) + cppbor::Uint{hash}.toString();
}
auto ParseHashValue(const leveldb::Slice& slice) -> std::optional<TrackId> {
@@ -130,18 +144,17 @@ auto EncodeHashValue(TrackId id) -> std::string {
/* 'T/ 0xBEEF' */
auto EncodeTagHashKey(const uint64_t& hash) -> std::string {
- return std::string{kTagHashPrefix, kFieldSeparator} +
- cppbor::Uint{hash}.toString();
+ return makePrefix(kTagHashPrefix) + cppbor::Uint{hash}.toString();
}
/* 'I/' */
auto EncodeAllIndexesPrefix() -> std::string {
- return {kIndexPrefix, kFieldSeparator};
+ return makePrefix(kIndexPrefix);
}
auto EncodeIndexPrefix(const IndexKey::Header& header) -> std::string {
std::ostringstream out;
- out.put(kIndexPrefix).put(kFieldSeparator);
+ out << makePrefix(kIndexPrefix);
cppbor::Array val{
cppbor::Uint{header.id},
cppbor::Uint{header.depth},