0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-29 10:12:39 +01:00

ircd:Ⓜ️:dbs: Add db::op to write_opts; support SET and DELETE write() via opts.

This commit is contained in:
Jason Volk 2018-03-24 22:46:43 -07:00
parent daed99e94e
commit 2a8f31c89c
2 changed files with 13 additions and 6 deletions

View file

@ -55,6 +55,7 @@ struct ircd::m::dbs::write_opts
{
string_view root_in;
mutable_buffer root_out;
db::op op {db::op::SET};
bool present {true};
bool history {true};
};

View file

@ -106,7 +106,7 @@ ircd::m::dbs::write(db::txn &txn,
{
db::txn::append
{
txn, at<"event_id"_>(event), event, event_column
txn, at<"event_id"_>(event), event, event_column, opts.op
};
if(defined(json::get<"state_key"_>(event)))
@ -193,7 +193,7 @@ try
const string_view &new_root
{
opts.history?
opts.op == db::op::SET && opts.history?
state::insert(txn, opts.root_out, opts.root_in, event):
opts.root_in
};
@ -232,6 +232,7 @@ ircd::m::dbs::_index__room_events(db::txn &txn,
{
txn, room_events,
{
opts.op, // db::op
key, // key
new_root // val
}
@ -265,7 +266,8 @@ ircd::m::dbs::_index__room_origins(db::txn &txn,
assert(!empty(membership));
db::op op; switch(hash(membership))
db::op op;
if(opts.op == db::op::SET) switch(hash(membership))
{
case hash("join"):
op = db::op::SET;
@ -278,7 +280,11 @@ ircd::m::dbs::_index__room_origins(db::txn &txn,
default:
return;
};
}
else if(opts.op == db::op::DELETE)
op = opts.op;
else
return;
db::txn::append
{
@ -314,7 +320,7 @@ ircd::m::dbs::_index__room_state(db::txn &txn,
const db::op op
{
at<"type"_>(event) != "m.room.redaction"?
opts.op == db::op::SET && at<"type"_>(event) != "m.room.redaction"?
db::op::SET:
db::op::DELETE
};
@ -325,7 +331,7 @@ ircd::m::dbs::_index__room_state(db::txn &txn,
{
op,
key,
val, // should be ignored on DELETE
value_required(op)? val : string_view{},
}
};
}