Skip to content

Commit 6941a45

Browse files
committed
Support deletion from database messages by sender_dialog_id.
1 parent 5232774 commit 6941a45

7 files changed

Lines changed: 43 additions & 41 deletions

File tree

‎benchmark/bench_tddb.cpp‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ class MessagesDbBench final : public td::Benchmark {
5454
for (int j = 0; j < 20; j++) {
5555
auto message_id = td::MessageId{td::ServerMessageId{message_id_raw + j}};
5656
auto unique_message_id = td::ServerMessageId{i + 1};
57-
auto sender_user_id = td::UserId(static_cast<td::int64>(td::Random::fast(1, 1000)));
57+
auto sender_dialog_id = td::DialogId(td::UserId(static_cast<td::int64>(td::Random::fast(1, 1000))));
5858
auto random_id = i + 1;
5959
auto ttl_expires_at = 0;
6060
auto data = td::BufferSlice(td::Random::fast(100, 299));
6161

6262
// use async on same thread.
63-
messages_db_async_->add_message({dialog_id, message_id}, unique_message_id, sender_user_id, random_id,
63+
messages_db_async_->add_message({dialog_id, message_id}, unique_message_id, sender_dialog_id, random_id,
6464
ttl_expires_at, 0, 0, "", td::NotificationId(), td::MessageId(),
6565
std::move(data), td::Promise<>());
6666
}

‎td/telegram/MessagesDb.cpp‎

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ class MessagesDbImpl final : public MessagesDbSyncInterface {
191191
db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND message_id = ?2"));
192192
TRY_RESULT_ASSIGN(delete_all_dialog_messages_stmt_,
193193
db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND message_id <= ?2"));
194-
TRY_RESULT_ASSIGN(delete_dialog_messages_from_user_stmt_,
194+
TRY_RESULT_ASSIGN(delete_dialog_messages_by_sender_stmt_,
195195
db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND sender_user_id == ?2"));
196196

197197
TRY_RESULT_ASSIGN(
@@ -292,7 +292,7 @@ class MessagesDbImpl final : public MessagesDbSyncInterface {
292292
return Status::OK();
293293
}
294294

295-
Status add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id,
295+
Status add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, DialogId sender_dialog_id,
296296
int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text,
297297
NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data) final {
298298
LOG(INFO) << "Add " << full_message_id << " to database";
@@ -312,8 +312,8 @@ class MessagesDbImpl final : public MessagesDbSyncInterface {
312312
add_message_stmt_.bind_null(3).ensure();
313313
}
314314

315-
if (sender_user_id.is_valid()) {
316-
add_message_stmt_.bind_int64(4, sender_user_id.get()).ensure();
315+
if (sender_dialog_id.is_valid()) {
316+
add_message_stmt_.bind_int64(4, sender_dialog_id.get()).ensure();
317317
} else {
318318
add_message_stmt_.bind_null(4).ensure();
319319
}
@@ -438,16 +438,16 @@ class MessagesDbImpl final : public MessagesDbSyncInterface {
438438
return status;
439439
}
440440

441-
Status delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id) final {
442-
LOG(INFO) << "Delete all messages in " << dialog_id << " sent by " << sender_user_id << " from database";
441+
Status delete_dialog_messages_by_sender(DialogId dialog_id, DialogId sender_dialog_id) final {
442+
LOG(INFO) << "Delete all messages in " << dialog_id << " sent by " << sender_dialog_id << " from database";
443443
CHECK(dialog_id.is_valid());
444-
CHECK(sender_user_id.is_valid());
444+
CHECK(sender_dialog_id.is_valid());
445445
SCOPE_EXIT {
446-
delete_dialog_messages_from_user_stmt_.reset();
446+
delete_dialog_messages_by_sender_stmt_.reset();
447447
};
448-
delete_dialog_messages_from_user_stmt_.bind_int64(1, dialog_id.get()).ensure();
449-
delete_dialog_messages_from_user_stmt_.bind_int64(2, sender_user_id.get()).ensure();
450-
delete_dialog_messages_from_user_stmt_.step().ensure();
448+
delete_dialog_messages_by_sender_stmt_.bind_int64(1, dialog_id.get()).ensure();
449+
delete_dialog_messages_by_sender_stmt_.bind_int64(2, sender_dialog_id.get()).ensure();
450+
delete_dialog_messages_by_sender_stmt_.step().ensure();
451451
return Status::OK();
452452
}
453453

@@ -857,7 +857,7 @@ class MessagesDbImpl final : public MessagesDbSyncInterface {
857857

858858
SqliteStatement delete_message_stmt_;
859859
SqliteStatement delete_all_dialog_messages_stmt_;
860-
SqliteStatement delete_dialog_messages_from_user_stmt_;
860+
SqliteStatement delete_dialog_messages_by_sender_stmt_;
861861

862862
SqliteStatement get_message_stmt_;
863863
SqliteStatement get_message_by_random_id_stmt_;
@@ -1017,11 +1017,11 @@ class MessagesDbAsync final : public MessagesDbAsyncInterface {
10171017
impl_ = create_actor_on_scheduler<Impl>("MessagesDbActor", scheduler_id, std::move(sync_db));
10181018
}
10191019

1020-
void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id,
1020+
void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, DialogId sender_dialog_id,
10211021
int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text,
10221022
NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data,
10231023
Promise<> promise) final {
1024-
send_closure_later(impl_, &Impl::add_message, full_message_id, unique_message_id, sender_user_id, random_id,
1024+
send_closure_later(impl_, &Impl::add_message, full_message_id, unique_message_id, sender_dialog_id, random_id,
10251025
ttl_expires_at, index_mask, search_id, std::move(text), notification_id, top_thread_message_id,
10261026
std::move(data), std::move(promise));
10271027
}
@@ -1035,8 +1035,8 @@ class MessagesDbAsync final : public MessagesDbAsyncInterface {
10351035
void delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id, Promise<> promise) final {
10361036
send_closure_later(impl_, &Impl::delete_all_dialog_messages, dialog_id, from_message_id, std::move(promise));
10371037
}
1038-
void delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id, Promise<> promise) final {
1039-
send_closure_later(impl_, &Impl::delete_dialog_messages_from_user, dialog_id, sender_user_id, std::move(promise));
1038+
void delete_dialog_messages_by_sender(DialogId dialog_id, DialogId sender_dialog_id, Promise<> promise) final {
1039+
send_closure_later(impl_, &Impl::delete_dialog_messages_by_sender, dialog_id, sender_dialog_id, std::move(promise));
10401040
}
10411041

10421042
void get_message(FullMessageId full_message_id, Promise<MessagesDbDialogMessage> promise) final {
@@ -1098,15 +1098,15 @@ class MessagesDbAsync final : public MessagesDbAsyncInterface {
10981098
public:
10991099
explicit Impl(std::shared_ptr<MessagesDbSyncSafeInterface> sync_db_safe) : sync_db_safe_(std::move(sync_db_safe)) {
11001100
}
1101-
void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id,
1101+
void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, DialogId sender_dialog_id,
11021102
int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text,
11031103
NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data,
11041104
Promise<> promise) {
1105-
add_write_query([this, full_message_id, unique_message_id, sender_user_id, random_id, ttl_expires_at, index_mask,
1106-
search_id, text = std::move(text), notification_id, top_thread_message_id,
1105+
add_write_query([this, full_message_id, unique_message_id, sender_dialog_id, random_id, ttl_expires_at,
1106+
index_mask, search_id, text = std::move(text), notification_id, top_thread_message_id,
11071107
data = std::move(data), promise = std::move(promise)](Unit) mutable {
11081108
on_write_result(std::move(promise),
1109-
sync_db_->add_message(full_message_id, unique_message_id, sender_user_id, random_id,
1109+
sync_db_->add_message(full_message_id, unique_message_id, sender_dialog_id, random_id,
11101110
ttl_expires_at, index_mask, search_id, std::move(text), notification_id,
11111111
top_thread_message_id, std::move(data)));
11121112
});
@@ -1131,9 +1131,9 @@ class MessagesDbAsync final : public MessagesDbAsyncInterface {
11311131
add_read_query();
11321132
promise.set_result(sync_db_->delete_all_dialog_messages(dialog_id, from_message_id));
11331133
}
1134-
void delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id, Promise<> promise) {
1134+
void delete_dialog_messages_by_sender(DialogId dialog_id, DialogId sender_dialog_id, Promise<> promise) {
11351135
add_read_query();
1136-
promise.set_result(sync_db_->delete_dialog_messages_from_user(dialog_id, sender_user_id));
1136+
promise.set_result(sync_db_->delete_dialog_messages_by_sender(dialog_id, sender_dialog_id));
11371137
}
11381138

11391139
void get_message(FullMessageId full_message_id, Promise<MessagesDbDialogMessage> promise) {

‎td/telegram/MessagesDb.h‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,15 @@ class MessagesDbSyncInterface {
105105
MessagesDbSyncInterface &operator=(const MessagesDbSyncInterface &) = delete;
106106
virtual ~MessagesDbSyncInterface() = default;
107107

108-
virtual Status add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id,
109-
int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text,
110-
NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data) = 0;
108+
virtual Status add_message(FullMessageId full_message_id, ServerMessageId unique_message_id,
109+
DialogId sender_dialog_id, int64 random_id, int32 ttl_expires_at, int32 index_mask,
110+
int64 search_id, string text, NotificationId notification_id,
111+
MessageId top_thread_message_id, BufferSlice data) = 0;
111112
virtual Status add_scheduled_message(FullMessageId full_message_id, BufferSlice data) = 0;
112113

113114
virtual Status delete_message(FullMessageId full_message_id) = 0;
114115
virtual Status delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id) = 0;
115-
virtual Status delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id) = 0;
116+
virtual Status delete_dialog_messages_by_sender(DialogId dialog_id, DialogId sender_dialog_id) = 0;
116117

117118
virtual Result<MessagesDbDialogMessage> get_message(FullMessageId full_message_id) = 0;
118119
virtual Result<MessagesDbMessage> get_message_by_unique_message_id(ServerMessageId unique_message_id) = 0;
@@ -158,15 +159,15 @@ class MessagesDbAsyncInterface {
158159
MessagesDbAsyncInterface &operator=(const MessagesDbAsyncInterface &) = delete;
159160
virtual ~MessagesDbAsyncInterface() = default;
160161

161-
virtual void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id,
162+
virtual void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, DialogId sender_dialog_id,
162163
int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text,
163164
NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data,
164165
Promise<> promise) = 0;
165166
virtual void add_scheduled_message(FullMessageId full_message_id, BufferSlice data, Promise<> promise) = 0;
166167

167168
virtual void delete_message(FullMessageId full_message_id, Promise<> promise) = 0;
168169
virtual void delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id, Promise<> promise) = 0;
169-
virtual void delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id, Promise<> promise) = 0;
170+
virtual void delete_dialog_messages_by_sender(DialogId dialog_id, DialogId sender_dialog_id, Promise<> promise) = 0;
170171

171172
virtual void get_message(FullMessageId full_message_id, Promise<MessagesDbDialogMessage> promise) = 0;
172173
virtual void get_message_by_unique_message_id(ServerMessageId unique_message_id,

‎td/telegram/MessagesManager.cpp‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10810,9 +10810,9 @@ void MessagesManager::delete_dialog_messages_by_sender(DialogId dialog_id, Dialo
1081010810
return promise.set_value(Unit());
1081110811
}
1081210812

10813-
if (G()->parameters().use_message_db && sender_dialog_id.get_type() == DialogType::User) {
10813+
if (G()->parameters().use_message_db) {
1081410814
LOG(INFO) << "Delete all messages from " << sender_dialog_id << " in " << dialog_id << " from database";
10815-
G()->td_db()->get_messages_db_async()->delete_dialog_messages_from_user(dialog_id, sender_dialog_id.get_user_id(),
10815+
G()->td_db()->get_messages_db_async()->delete_dialog_messages_by_sender(dialog_id, sender_dialog_id,
1081610816
Auto()); // TODO Promise
1081710817
}
1081810818

@@ -10843,7 +10843,7 @@ void MessagesManager::delete_dialog_messages_by_sender(DialogId dialog_id, Dialo
1084310843
delete_all_channel_messages_by_sender_on_server(channel_id, sender_dialog_id, 0, std::move(promise));
1084410844
}
1084510845

10846-
class MessagesManager::DeleteAllChannelMessagesFromUserOnServerLogEvent {
10846+
class MessagesManager::DeleteAllChannelMessagesFromSenderOnServerLogEvent {
1084710847
public:
1084810848
ChannelId channel_id_;
1084910849
DialogId sender_dialog_id_;
@@ -10869,8 +10869,8 @@ class MessagesManager::DeleteAllChannelMessagesFromUserOnServerLogEvent {
1086910869

1087010870
uint64 MessagesManager::save_delete_all_channel_messages_by_sender_on_server_log_event(ChannelId channel_id,
1087110871
DialogId sender_dialog_id) {
10872-
DeleteAllChannelMessagesFromUserOnServerLogEvent log_event{channel_id, sender_dialog_id};
10873-
return binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::DeleteAllChannelMessagesFromUserOnServer,
10872+
DeleteAllChannelMessagesFromSenderOnServerLogEvent log_event{channel_id, sender_dialog_id};
10873+
return binlog_add(G()->td_db()->get_binlog(), LogEvent::HandlerType::DeleteAllChannelMessagesFromSenderOnServer,
1087410874
get_log_event_storer(log_event));
1087510875
}
1087610876

@@ -33447,7 +33447,8 @@ void MessagesManager::add_message_to_database(const Dialog *d, const Message *m,
3344733447
if (m->ttl_period != 0 && (ttl_expires_at == 0 || m->date + m->ttl_period < ttl_expires_at)) {
3344833448
ttl_expires_at = m->date + m->ttl_period;
3344933449
}
33450-
G()->td_db()->get_messages_db_async()->add_message({d->dialog_id, message_id}, unique_message_id, m->sender_user_id,
33450+
auto sender_dialog_id = m->sender_dialog_id.is_valid() ? m->sender_dialog_id : DialogId(m->sender_user_id);
33451+
G()->td_db()->get_messages_db_async()->add_message({d->dialog_id, message_id}, unique_message_id, sender_dialog_id,
3345133452
random_id, ttl_expires_at, get_message_index_mask(d->dialog_id, m),
3345233453
search_id, text, m->notification_id, m->top_thread_message_id,
3345333454
log_event_store(*m),
@@ -37389,13 +37390,13 @@ void MessagesManager::on_binlog_events(vector<BinlogEvent> &&events) {
3738937390
Auto());
3739037391
break;
3739137392
}
37392-
case LogEvent::HandlerType::DeleteAllChannelMessagesFromUserOnServer: {
37393+
case LogEvent::HandlerType::DeleteAllChannelMessagesFromSenderOnServer: {
3739337394
if (!G()->parameters().use_chat_info_db) {
3739437395
binlog_erase(G()->td_db()->get_binlog(), event.id_);
3739537396
break;
3739637397
}
3739737398

37398-
DeleteAllChannelMessagesFromUserOnServerLogEvent log_event;
37399+
DeleteAllChannelMessagesFromSenderOnServerLogEvent log_event;
3739937400
log_event_parse(log_event, event.data_).ensure();
3740037401

3740137402
auto channel_id = log_event.channel_id_;

‎td/telegram/MessagesManager.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1646,7 +1646,7 @@ class MessagesManager final : public Actor {
16461646

16471647
class BlockMessageSenderFromRepliesOnServerLogEvent;
16481648
class DeleteAllCallMessagesOnServerLogEvent;
1649-
class DeleteAllChannelMessagesFromUserOnServerLogEvent;
1649+
class DeleteAllChannelMessagesFromSenderOnServerLogEvent;
16501650
class DeleteDialogHistoryOnServerLogEvent;
16511651
class DeleteDialogMessagesByDateOnServerLogEvent;
16521652
class DeleteMessageLogEvent;

‎td/telegram/TdDb.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ Status init_binlog(Binlog &binlog, string path, BinlogKeyValue<Binlog> &binlog_p
100100
case LogEvent::HandlerType::SendInlineQueryResultMessage:
101101
case LogEvent::HandlerType::DeleteDialogHistoryOnServer:
102102
case LogEvent::HandlerType::ReadAllDialogMentionsOnServer:
103-
case LogEvent::HandlerType::DeleteAllChannelMessagesFromUserOnServer:
103+
case LogEvent::HandlerType::DeleteAllChannelMessagesFromSenderOnServer:
104104
case LogEvent::HandlerType::ToggleDialogIsPinnedOnServer:
105105
case LogEvent::HandlerType::ReorderPinnedDialogsOnServer:
106106
case LogEvent::HandlerType::SaveDialogDraftMessageOnServer:

‎td/telegram/logevent/LogEvent.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ class LogEvent {
8181
SendInlineQueryResultMessage = 0x108,
8282
DeleteDialogHistoryOnServer = 0x109,
8383
ReadAllDialogMentionsOnServer = 0x10a,
84-
DeleteAllChannelMessagesFromUserOnServer = 0x10b,
84+
DeleteAllChannelMessagesFromSenderOnServer = 0x10b,
8585
ToggleDialogIsPinnedOnServer = 0x10c,
8686
ReorderPinnedDialogsOnServer = 0x10d,
8787
SaveDialogDraftMessageOnServer = 0x10e,

0 commit comments

Comments
 (0)