Add get_secret_chat_count database request.
GitOrigin-RevId: b1865d0e3255bb6d170d299896903947a9a841de
This commit is contained in:
parent
7e1fa1fcb9
commit
97ab18945f
@ -126,6 +126,10 @@ class DialogDbImpl : public DialogDbSyncInterface {
|
|||||||
get_notification_group_stmt_,
|
get_notification_group_stmt_,
|
||||||
db_.get_statement(
|
db_.get_statement(
|
||||||
"SELECT dialog_id, last_notification_date FROM notification_groups WHERE notification_group_id = ?1"));
|
"SELECT dialog_id, last_notification_date FROM notification_groups WHERE notification_group_id = ?1"));
|
||||||
|
TRY_RESULT_ASSIGN(
|
||||||
|
get_secret_chat_count_stmt_,
|
||||||
|
db_.get_statement(
|
||||||
|
"SELECT COUNT(*) FROM dialogs WHERE folder_id = ?1 AND dialog_order != 0 AND dialog_id < -1500000000000"));
|
||||||
|
|
||||||
// LOG(ERROR) << get_dialog_stmt_.explain().ok();
|
// LOG(ERROR) << get_dialog_stmt_.explain().ok();
|
||||||
// LOG(ERROR) << get_dialogs_stmt_.explain().ok();
|
// LOG(ERROR) << get_dialogs_stmt_.explain().ok();
|
||||||
@ -202,6 +206,16 @@ class DialogDbImpl : public DialogDbSyncInterface {
|
|||||||
get_last_notification_date(get_notification_group_stmt_, 1));
|
get_last_notification_date(get_notification_group_stmt_, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result<int32> get_secret_chat_count(FolderId folder_id) override {
|
||||||
|
SCOPE_EXIT {
|
||||||
|
get_secret_chat_count_stmt_.reset();
|
||||||
|
};
|
||||||
|
get_secret_chat_count_stmt_.bind_int32(1, folder_id.get()).ensure();
|
||||||
|
TRY_STATUS(get_secret_chat_count_stmt_.step());
|
||||||
|
CHECK(get_secret_chat_count_stmt_.has_row());
|
||||||
|
return get_secret_chat_count_stmt_.view_int32(0);
|
||||||
|
}
|
||||||
|
|
||||||
Result<DialogDbGetDialogsResult> get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id,
|
Result<DialogDbGetDialogsResult> get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id,
|
||||||
int32 limit) override {
|
int32 limit) override {
|
||||||
SCOPE_EXIT {
|
SCOPE_EXIT {
|
||||||
@ -265,6 +279,7 @@ class DialogDbImpl : public DialogDbSyncInterface {
|
|||||||
SqliteStatement get_dialogs_stmt_;
|
SqliteStatement get_dialogs_stmt_;
|
||||||
SqliteStatement get_notification_groups_by_last_notification_date_stmt_;
|
SqliteStatement get_notification_groups_by_last_notification_date_stmt_;
|
||||||
SqliteStatement get_notification_group_stmt_;
|
SqliteStatement get_notification_group_stmt_;
|
||||||
|
SqliteStatement get_secret_chat_count_stmt_;
|
||||||
|
|
||||||
static int32 get_last_notification_date(SqliteStatement &stmt, int id) {
|
static int32 get_last_notification_date(SqliteStatement &stmt, int id) {
|
||||||
if (stmt.view_datatype(id) == SqliteStatement::Datatype::Null) {
|
if (stmt.view_datatype(id) == SqliteStatement::Datatype::Null) {
|
||||||
@ -316,13 +331,19 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
send_closure(impl_, &Impl::get_notification_group, notification_group_id, std::move(promise));
|
send_closure(impl_, &Impl::get_notification_group, notification_group_id, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_secret_chat_count(FolderId folder_id, Promise<int32> promise) override {
|
||||||
|
send_closure(impl_, &Impl::get_secret_chat_count, folder_id, std::move(promise));
|
||||||
|
}
|
||||||
|
|
||||||
void get_dialog(DialogId dialog_id, Promise<BufferSlice> promise) override {
|
void get_dialog(DialogId dialog_id, Promise<BufferSlice> promise) override {
|
||||||
send_closure_later(impl_, &Impl::get_dialog, dialog_id, std::move(promise));
|
send_closure_later(impl_, &Impl::get_dialog, dialog_id, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, int32 limit,
|
void get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, int32 limit,
|
||||||
Promise<DialogDbGetDialogsResult> promise) override {
|
Promise<DialogDbGetDialogsResult> promise) override {
|
||||||
send_closure_later(impl_, &Impl::get_dialogs, folder_id, order, dialog_id, limit, std::move(promise));
|
send_closure_later(impl_, &Impl::get_dialogs, folder_id, order, dialog_id, limit, std::move(promise));
|
||||||
}
|
}
|
||||||
|
|
||||||
void close(Promise<> promise) override {
|
void close(Promise<> promise) override {
|
||||||
send_closure_later(impl_, &Impl::close, std::move(promise));
|
send_closure_later(impl_, &Impl::close, std::move(promise));
|
||||||
}
|
}
|
||||||
@ -332,6 +353,7 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
public:
|
public:
|
||||||
explicit Impl(std::shared_ptr<DialogDbSyncSafeInterface> sync_db_safe) : sync_db_safe_(std::move(sync_db_safe)) {
|
explicit Impl(std::shared_ptr<DialogDbSyncSafeInterface> sync_db_safe) : sync_db_safe_(std::move(sync_db_safe)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_dialog(DialogId dialog_id, FolderId folder_id, int64 order, BufferSlice data,
|
void add_dialog(DialogId dialog_id, FolderId folder_id, int64 order, BufferSlice data,
|
||||||
vector<NotificationGroupKey> notification_groups, Promise<> promise) {
|
vector<NotificationGroupKey> notification_groups, Promise<> promise) {
|
||||||
add_write_query([=, promise = std::move(promise), data = std::move(data),
|
add_write_query([=, promise = std::move(promise), data = std::move(data),
|
||||||
@ -340,9 +362,11 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
std::move(notification_groups)));
|
std::move(notification_groups)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_write_result(Promise<> promise, Status status) {
|
void on_write_result(Promise<> promise, Status status) {
|
||||||
pending_write_results_.emplace_back(std::move(promise), std::move(status));
|
pending_write_results_.emplace_back(std::move(promise), std::move(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_notification_groups_by_last_notification_date(NotificationGroupKey notification_group_key, int32 limit,
|
void get_notification_groups_by_last_notification_date(NotificationGroupKey notification_group_key, int32 limit,
|
||||||
Promise<vector<NotificationGroupKey>> promise) {
|
Promise<vector<NotificationGroupKey>> promise) {
|
||||||
add_read_query();
|
add_read_query();
|
||||||
@ -353,15 +377,23 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
add_read_query();
|
add_read_query();
|
||||||
promise.set_result(sync_db_->get_notification_group(notification_group_id));
|
promise.set_result(sync_db_->get_notification_group(notification_group_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_secret_chat_count(FolderId folder_id, Promise<int32> promise) {
|
||||||
|
add_read_query();
|
||||||
|
promise.set_result(sync_db_->get_secret_chat_count(folder_id));
|
||||||
|
}
|
||||||
|
|
||||||
void get_dialog(DialogId dialog_id, Promise<BufferSlice> promise) {
|
void get_dialog(DialogId dialog_id, Promise<BufferSlice> promise) {
|
||||||
add_read_query();
|
add_read_query();
|
||||||
promise.set_result(sync_db_->get_dialog(dialog_id));
|
promise.set_result(sync_db_->get_dialog(dialog_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, int32 limit,
|
void get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, int32 limit,
|
||||||
Promise<DialogDbGetDialogsResult> promise) {
|
Promise<DialogDbGetDialogsResult> promise) {
|
||||||
add_read_query();
|
add_read_query();
|
||||||
promise.set_result(sync_db_->get_dialogs(folder_id, order, dialog_id, limit));
|
promise.set_result(sync_db_->get_dialogs(folder_id, order, dialog_id, limit));
|
||||||
}
|
}
|
||||||
|
|
||||||
void close(Promise<> promise) {
|
void close(Promise<> promise) {
|
||||||
do_flush();
|
do_flush();
|
||||||
sync_db_safe_.reset();
|
sync_db_safe_.reset();
|
||||||
@ -381,6 +413,7 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
std::vector<std::pair<Promise<>, Status>> pending_write_results_;
|
std::vector<std::pair<Promise<>, Status>> pending_write_results_;
|
||||||
vector<Promise<>> pending_writes_;
|
vector<Promise<>> pending_writes_;
|
||||||
double wakeup_at_ = 0;
|
double wakeup_at_ = 0;
|
||||||
|
|
||||||
template <class F>
|
template <class F>
|
||||||
void add_write_query(F &&f) {
|
void add_write_query(F &&f) {
|
||||||
pending_writes_.push_back(PromiseCreator::lambda(std::forward<F>(f), PromiseCreator::Ignore()));
|
pending_writes_.push_back(PromiseCreator::lambda(std::forward<F>(f), PromiseCreator::Ignore()));
|
||||||
@ -394,9 +427,11 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
set_timeout_at(wakeup_at_);
|
set_timeout_at(wakeup_at_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_read_query() {
|
void add_read_query() {
|
||||||
do_flush();
|
do_flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_flush() {
|
void do_flush() {
|
||||||
if (pending_writes_.empty()) {
|
if (pending_writes_.empty()) {
|
||||||
return;
|
return;
|
||||||
@ -413,6 +448,7 @@ class DialogDbAsync : public DialogDbAsyncInterface {
|
|||||||
pending_write_results_.clear();
|
pending_write_results_.clear();
|
||||||
cancel_timeout();
|
cancel_timeout();
|
||||||
}
|
}
|
||||||
|
|
||||||
void timeout_expired() override {
|
void timeout_expired() override {
|
||||||
do_flush();
|
do_flush();
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,8 @@ class DialogDbSyncInterface {
|
|||||||
|
|
||||||
virtual Result<NotificationGroupKey> get_notification_group(NotificationGroupId notification_group_id) = 0;
|
virtual Result<NotificationGroupKey> get_notification_group(NotificationGroupId notification_group_id) = 0;
|
||||||
|
|
||||||
|
virtual Result<int32> get_secret_chat_count(FolderId folder_id) = 0;
|
||||||
|
|
||||||
virtual Status begin_transaction() = 0;
|
virtual Status begin_transaction() = 0;
|
||||||
virtual Status commit_transaction() = 0;
|
virtual Status commit_transaction() = 0;
|
||||||
};
|
};
|
||||||
@ -87,6 +89,8 @@ class DialogDbAsyncInterface {
|
|||||||
virtual void get_notification_group(NotificationGroupId notification_group_id,
|
virtual void get_notification_group(NotificationGroupId notification_group_id,
|
||||||
Promise<NotificationGroupKey> promise) = 0;
|
Promise<NotificationGroupKey> promise) = 0;
|
||||||
|
|
||||||
|
virtual void get_secret_chat_count(FolderId folder_id, Promise<int32> promise) = 0;
|
||||||
|
|
||||||
virtual void close(Promise<> promise) = 0;
|
virtual void close(Promise<> promise) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user