summaryrefslogtreecommitdiff
path: root/src/database/database.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-11-22 14:38:52 +1100
committerjacqueline <me@jacqueline.id.au>2023-11-22 14:38:52 +1100
commit06aca259cbb84c41a002e5a93735b289cc2aa93a (patch)
tree3c3a6c09a7362ab95b0019f4bd4da56faf167187 /src/database/database.cpp
parentcd46d7bd203b69e6d163fd19e38600d9feae6e56 (diff)
downloadtangara-fw-06aca259cbb84c41a002e5a93735b289cc2aa93a.tar.gz
Add basic lua browser screen
Diffstat (limited to 'src/database/database.cpp')
-rw-r--r--src/database/database.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/database/database.cpp b/src/database/database.cpp
index 88ae7bbe..dad983d0 100644
--- a/src/database/database.cpp
+++ b/src/database/database.cpp
@@ -846,8 +846,7 @@ auto IndexRecord::Expand(std::size_t page_size) const
if (track_) {
return {};
}
- IndexKey::Header new_header = ExpandHeader(key_.header, key_.item);
- std::string new_prefix = EncodeIndexPrefix(new_header);
+ std::string new_prefix = EncodeIndexPrefix(ExpandHeader());
return Continuation{
.prefix = {new_prefix.data(), new_prefix.size()},
.start_key = {new_prefix.data(), new_prefix.size()},
@@ -857,6 +856,10 @@ auto IndexRecord::Expand(std::size_t page_size) const
};
}
+auto IndexRecord::ExpandHeader() const -> IndexKey::Header {
+ return ::database::ExpandHeader(key_.header, key_.item);
+}
+
Iterator::Iterator(std::weak_ptr<Database> db, const IndexInfo& idx)
: db_(db), pos_mutex_(), current_pos_(), prev_pos_() {
std::string prefix = EncodeIndexPrefix(
@@ -887,6 +890,11 @@ auto Iterator::Next(Callback cb) -> void {
db->dbGetPage<IndexRecord>(*current_pos_)};
prev_pos_ = current_pos_;
current_pos_ = res->next_page();
+ if (!res || res->values().empty() || !res->values()[0]) {
+ ESP_LOGI(kTag, "dropping empty result");
+ InvokeNull(cb);
+ return;
+ }
std::invoke(cb, *res->values()[0]);
});
}