diff --git a/include/ircd/m/dbs.h b/include/ircd/m/dbs.h index ecef256ab..4cec9dbff 100644 --- a/include/ircd/m/dbs.h +++ b/include/ircd/m/dbs.h @@ -35,6 +35,8 @@ namespace ircd::m::dbs std::tuple room_state_key(const string_view &amalgam); string_view room_origins_key(const mutable_buffer &out, const id::room &, const string_view &origin, const id::user &member); + std::tuple room_origins_key(const string_view &amalgam); + string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth, const id::event &); string_view room_events_key(const mutable_buffer &out, const id::room &, const uint64_t &depth); std::tuple room_events_key(const string_view &amalgam); @@ -85,9 +87,11 @@ namespace ircd::m::dbs::desc // Metadata columns extern const database::descriptor events__state_node; + extern const db::prefix_transform events__room_events__pfx; extern const db::comparator events__room_events__cmp; extern const database::descriptor events__room_events; + extern const db::prefix_transform events__room_origins__pfx; extern const database::descriptor events__room_origins; diff --git a/ircd/m/dbs.cc b/ircd/m/dbs.cc index e7b19c27d..bb3f30cd0 100644 --- a/ircd/m/dbs.cc +++ b/ircd/m/dbs.cc @@ -648,6 +648,10 @@ ircd::m::dbs::desc::events__room_events events__room_events__pfx, }; +// +// origins sequential +// + /// Prefix transform for the events__room_origins /// /// TODO: This needs The Grammar @@ -684,6 +688,26 @@ ircd::m::dbs::room_origins_key(const mutable_buffer &out, return { data(out), len }; } +std::tuple +ircd::m::dbs::room_origins_key(const string_view &amalgam) +{ + const auto &key + { + lstrip(amalgam, ":::") + }; + + const auto &s + { + split(key, "@") + }; + + return + { + { s.first }, + { end(s.first), end(key) } + }; +} + const ircd::database::descriptor ircd::m::dbs::desc::events__room_origins { diff --git a/ircd/m/room.cc b/ircd/m/room.cc index cec711fbd..a8d8f5c18 100644 --- a/ircd/m/room.cc +++ b/ircd/m/room.cc @@ -638,7 +638,7 @@ const { const string_view &member { - end(split(key, "@").first), end(key) + std::get<1>(dbs::room_origins_key(key)) }; bool ret{false}; @@ -745,9 +745,9 @@ const return _test_([&last, &lastbuf, &view] (const string_view &key) { - const string_view &origin //TODO: XXX + const string_view &origin { - split(key, "@").first + std::get<0>(dbs::room_origins_key(key)) }; if(origin == last)