Use TRY_RESULT_ASSIGN to handle responses of db_.get_statement.
GitOrigin-RevId: 0b777859b0670661493eff0a1ed6048ba5010bbd
This commit is contained in:
parent
a520a897a0
commit
12ea695b54
@ -102,39 +102,30 @@ class DialogDbImpl : public DialogDbSyncInterface {
|
||||
}
|
||||
|
||||
Status init() {
|
||||
TRY_RESULT(add_dialog_stmt, db_.get_statement("INSERT OR REPLACE INTO dialogs VALUES(?1, ?2, ?3, ?4)"));
|
||||
TRY_RESULT(add_notification_group_stmt,
|
||||
TRY_RESULT_ASSIGN(add_dialog_stmt_, db_.get_statement("INSERT OR REPLACE INTO dialogs VALUES(?1, ?2, ?3, ?4)"));
|
||||
TRY_RESULT_ASSIGN(add_notification_group_stmt_,
|
||||
db_.get_statement("INSERT OR REPLACE INTO notification_groups VALUES(?1, ?2, ?3)"));
|
||||
TRY_RESULT(delete_notification_group_stmt,
|
||||
TRY_RESULT_ASSIGN(delete_notification_group_stmt_,
|
||||
db_.get_statement("DELETE FROM notification_groups WHERE notification_group_id = ?1"));
|
||||
TRY_RESULT(get_dialog_stmt, db_.get_statement("SELECT data FROM dialogs WHERE dialog_id = ?1"));
|
||||
TRY_RESULT(
|
||||
get_dialogs_stmt,
|
||||
TRY_RESULT_ASSIGN(get_dialog_stmt_, db_.get_statement("SELECT data FROM dialogs WHERE dialog_id = ?1"));
|
||||
TRY_RESULT_ASSIGN(
|
||||
get_dialogs_stmt_,
|
||||
db_.get_statement("SELECT data, dialog_id, dialog_order FROM dialogs WHERE "
|
||||
"folder_id == ?1 AND (dialog_order < ?2 OR (dialog_order = ?2 AND dialog_id < ?3)) ORDER "
|
||||
"BY dialog_order DESC, dialog_id DESC LIMIT ?4"));
|
||||
TRY_RESULT(
|
||||
get_notification_groups_by_last_notification_date_stmt,
|
||||
TRY_RESULT_ASSIGN(
|
||||
get_notification_groups_by_last_notification_date_stmt_,
|
||||
db_.get_statement("SELECT notification_group_id, dialog_id, last_notification_date FROM notification_groups "
|
||||
"WHERE last_notification_date < ?1 OR (last_notification_date = ?1 "
|
||||
"AND (dialog_id < ?2 OR (dialog_id = ?2 AND notification_group_id < ?3))) ORDER BY "
|
||||
"last_notification_date DESC, dialog_id DESC LIMIT ?4"));
|
||||
// "WHERE (last_notification_date, dialog_id, notification_group_id) < (?1, ?2, ?3) ORDER BY "
|
||||
// "last_notification_date DESC, dialog_id DESC, notification_group_id DESC LIMIT ?4"));
|
||||
TRY_RESULT(
|
||||
get_notification_group_stmt,
|
||||
TRY_RESULT_ASSIGN(
|
||||
get_notification_group_stmt_,
|
||||
db_.get_statement(
|
||||
"SELECT dialog_id, last_notification_date FROM notification_groups WHERE notification_group_id = ?1"));
|
||||
|
||||
add_dialog_stmt_ = std::move(add_dialog_stmt);
|
||||
add_notification_group_stmt_ = std::move(add_notification_group_stmt);
|
||||
delete_notification_group_stmt_ = std::move(delete_notification_group_stmt);
|
||||
get_dialog_stmt_ = std::move(get_dialog_stmt);
|
||||
get_dialogs_stmt_ = std::move(get_dialogs_stmt);
|
||||
get_notification_groups_by_last_notification_date_stmt_ =
|
||||
std::move(get_notification_groups_by_last_notification_date_stmt);
|
||||
get_notification_group_stmt_ = std::move(get_notification_group_stmt);
|
||||
|
||||
// LOG(ERROR) << get_dialog_stmt_.explain().ok();
|
||||
// LOG(ERROR) << get_dialogs_stmt_.explain().ok();
|
||||
// LOG(ERROR) << get_notification_groups_by_last_notification_date_stmt_.explain().ok();
|
||||
|
@ -166,87 +166,69 @@ class MessagesDbImpl : public MessagesDbSyncInterface {
|
||||
}
|
||||
|
||||
Status init() {
|
||||
TRY_RESULT(
|
||||
add_message_stmt,
|
||||
TRY_RESULT_ASSIGN(
|
||||
add_message_stmt_,
|
||||
db_.get_statement("INSERT OR REPLACE INTO messages VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11)"));
|
||||
TRY_RESULT(delete_message_stmt, db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND message_id = ?2"));
|
||||
TRY_RESULT(delete_all_dialog_messages_stmt,
|
||||
TRY_RESULT_ASSIGN(delete_message_stmt_,
|
||||
db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND message_id = ?2"));
|
||||
TRY_RESULT_ASSIGN(delete_all_dialog_messages_stmt_,
|
||||
db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND message_id <= ?2"));
|
||||
TRY_RESULT(delete_dialog_messages_from_user_stmt,
|
||||
TRY_RESULT_ASSIGN(delete_dialog_messages_from_user_stmt_,
|
||||
db_.get_statement("DELETE FROM messages WHERE dialog_id = ?1 AND sender_user_id == ?2"));
|
||||
|
||||
TRY_RESULT(get_message_stmt,
|
||||
TRY_RESULT_ASSIGN(get_message_stmt_,
|
||||
db_.get_statement("SELECT data FROM messages WHERE dialog_id = ?1 AND message_id = ?2"));
|
||||
TRY_RESULT(get_message_by_random_id_stmt,
|
||||
TRY_RESULT_ASSIGN(get_message_by_random_id_stmt_,
|
||||
db_.get_statement("SELECT data FROM messages WHERE dialog_id = ?1 AND random_id = ?2"));
|
||||
TRY_RESULT(get_message_by_unique_message_id_stmt,
|
||||
TRY_RESULT_ASSIGN(get_message_by_unique_message_id_stmt_,
|
||||
db_.get_statement("SELECT dialog_id, data FROM messages WHERE unique_message_id = ?1"));
|
||||
|
||||
TRY_RESULT(get_expiring_messages_stmt,
|
||||
db_.get_statement("SELECT dialog_id, data FROM messages WHERE ?1 < ttl_expires_at AND ttl_expires_at <= "
|
||||
"?2"));
|
||||
TRY_RESULT(get_expiring_messages_helper_stmt,
|
||||
db_.get_statement("SELECT MAX(ttl_expires_at), COUNT(*) FROM (SELECT ttl_expires_at FROM messages WHERE "
|
||||
"?1 < ttl_expires_at LIMIT ?2) AS T"));
|
||||
TRY_RESULT_ASSIGN(
|
||||
get_expiring_messages_stmt_,
|
||||
db_.get_statement("SELECT dialog_id, data FROM messages WHERE ?1 < ttl_expires_at AND ttl_expires_at <= ?2"));
|
||||
TRY_RESULT_ASSIGN(get_expiring_messages_helper_stmt_,
|
||||
db_.get_statement("SELECT MAX(ttl_expires_at), COUNT(*) FROM (SELECT ttl_expires_at FROM "
|
||||
"messages WHERE ?1 < ttl_expires_at LIMIT ?2) AS T"));
|
||||
|
||||
TRY_RESULT(get_messages_asc_stmt,
|
||||
TRY_RESULT_ASSIGN(get_messages_stmt_.asc_stmt_,
|
||||
db_.get_statement("SELECT data, message_id FROM messages WHERE dialog_id = ?1 AND message_id > "
|
||||
"?2 ORDER BY message_id ASC LIMIT ?3"));
|
||||
TRY_RESULT_ASSIGN(get_messages_stmt_.desc_stmt_,
|
||||
db_.get_statement("SELECT data, message_id FROM messages WHERE dialog_id = ?1 AND message_id < "
|
||||
"?2 ORDER BY message_id DESC LIMIT ?3"));
|
||||
TRY_RESULT_ASSIGN(get_messages_from_notification_id_stmt_,
|
||||
db_.get_statement("SELECT data, message_id FROM messages WHERE dialog_id = ?1 AND "
|
||||
"message_id > ?2 ORDER BY message_id ASC LIMIT ?3"));
|
||||
TRY_RESULT(get_messages_desc_stmt, db_.get_statement("SELECT data, message_id FROM messages WHERE dialog_id = ?1 "
|
||||
"AND message_id < ?2 ORDER BY message_id DESC LIMIT ?3"));
|
||||
TRY_RESULT(get_messages_from_notification_id_stmt,
|
||||
db_.get_statement("SELECT data, message_id FROM messages WHERE dialog_id = ?1 "
|
||||
"AND notification_id < ?2 ORDER BY notification_id DESC LIMIT ?3"));
|
||||
TRY_RESULT(
|
||||
get_messages_fts_stmt,
|
||||
db_.get_statement("SELECT dialog_id, data, search_id FROM messages WHERE search_id IN (SELECT rowid FROM "
|
||||
"messages_fts WHERE messages_fts MATCH ?1 AND rowid < ?2 ORDER BY rowid DESC LIMIT "
|
||||
"?3) ORDER BY search_id DESC"));
|
||||
"notification_id < ?2 ORDER BY notification_id DESC LIMIT ?3"));
|
||||
TRY_RESULT_ASSIGN(
|
||||
get_messages_fts_stmt_,
|
||||
db_.get_statement(
|
||||
"SELECT dialog_id, data, search_id FROM messages WHERE search_id IN (SELECT rowid FROM messages_fts WHERE "
|
||||
"messages_fts MATCH ?1 AND rowid < ?2 ORDER BY rowid DESC LIMIT ?3) ORDER BY search_id DESC"));
|
||||
|
||||
for (int32 i = 0; i < MESSAGES_DB_INDEX_COUNT; i++) {
|
||||
TRY_RESULT(get_messages_from_index_desc_stmt,
|
||||
TRY_RESULT_ASSIGN(get_messages_from_index_stmts_[i].desc_stmt_,
|
||||
db_.get_statement(PSLICE() << "SELECT data, message_id FROM messages WHERE dialog_id = ?1 "
|
||||
"AND message_id < ?2 AND (index_mask & "
|
||||
<< (1 << i) << ") != 0 ORDER BY message_id DESC LIMIT ?3"));
|
||||
get_messages_from_index_stmts_[i].desc_stmt_ = std::move(get_messages_from_index_desc_stmt);
|
||||
|
||||
TRY_RESULT(get_messages_from_index_asc_stmt,
|
||||
TRY_RESULT_ASSIGN(get_messages_from_index_stmts_[i].asc_stmt_,
|
||||
db_.get_statement(PSLICE() << "SELECT data, message_id FROM messages WHERE dialog_id = ?1 "
|
||||
"AND message_id > ?2 AND (index_mask & "
|
||||
<< (1 << i) << ") != 0 ORDER BY message_id ASC LIMIT ?3"));
|
||||
get_messages_from_index_stmts_[i].asc_stmt_ = std::move(get_messages_from_index_asc_stmt);
|
||||
|
||||
// LOG(ERROR) << get_messages_from_index_stmts_[i].explain().ok();
|
||||
// LOG(ERROR) << get_messages_from_index_stmts_[i].desc_stmt_.explain().ok();
|
||||
// LOG(ERROR) << get_messages_from_index_stmts_[i].asc_stmt_.explain().ok();
|
||||
}
|
||||
|
||||
for (int i = static_cast<int>(SearchMessagesFilter::Call) - 1, pos = 0;
|
||||
i < static_cast<int>(SearchMessagesFilter::MissedCall); i++, pos++) {
|
||||
TRY_RESULT(get_messages_from_index_stmt,
|
||||
db_.get_statement(PSLICE() << "SELECT dialog_id, data FROM messages "
|
||||
"WHERE unique_message_id < ?1 AND (index_mask & "
|
||||
TRY_RESULT_ASSIGN(
|
||||
get_calls_stmts_[pos],
|
||||
db_.get_statement(
|
||||
PSLICE() << "SELECT dialog_id, data FROM messages WHERE unique_message_id < ?1 AND (index_mask & "
|
||||
<< (1 << i) << ") != 0 ORDER BY unique_message_id DESC LIMIT ?2"));
|
||||
get_calls_stmts_[pos] = std::move(get_messages_from_index_stmt);
|
||||
// LOG(ERROR) << get_messages_from_index_stmts_[i].explain().ok();
|
||||
}
|
||||
|
||||
add_message_stmt_ = std::move(add_message_stmt);
|
||||
delete_message_stmt_ = std::move(delete_message_stmt);
|
||||
delete_all_dialog_messages_stmt_ = std::move(delete_all_dialog_messages_stmt);
|
||||
delete_dialog_messages_from_user_stmt_ = std::move(delete_dialog_messages_from_user_stmt);
|
||||
|
||||
get_message_stmt_ = std::move(get_message_stmt);
|
||||
get_message_by_random_id_stmt_ = std::move(get_message_by_random_id_stmt);
|
||||
get_message_by_unique_message_id_stmt_ = std::move(get_message_by_unique_message_id_stmt);
|
||||
|
||||
get_expiring_messages_stmt_ = std::move(get_expiring_messages_stmt);
|
||||
get_expiring_messages_helper_stmt_ = std::move(get_expiring_messages_helper_stmt);
|
||||
|
||||
get_messages_stmt_.asc_stmt_ = std::move(get_messages_asc_stmt);
|
||||
get_messages_stmt_.desc_stmt_ = std::move(get_messages_desc_stmt);
|
||||
get_messages_from_notification_id_stmt_ = std::move(get_messages_from_notification_id_stmt);
|
||||
|
||||
get_messages_fts_stmt_ = std::move(get_messages_fts_stmt);
|
||||
|
||||
// LOG(ERROR) << get_message_stmt_.explain().ok();
|
||||
// LOG(ERROR) << get_messages_from_notification_id_stmt.explain().ok();
|
||||
// LOG(ERROR) << get_message_by_random_id_stmt_.explain().ok();
|
||||
@ -255,8 +237,6 @@ class MessagesDbImpl : public MessagesDbSyncInterface {
|
||||
// LOG(ERROR) << get_expiring_messages_stmt_.explain().ok();
|
||||
// LOG(ERROR) << get_expiring_messages_helper_stmt_.explain().ok();
|
||||
|
||||
// LOG(ERROR) << get_messages_asc_stmt_.explain().ok();
|
||||
// LOG(ERROR) << get_messages_desc_stmt_.explain().ok();
|
||||
// LOG(FATAL) << "EXPLAINED";
|
||||
|
||||
return Status::OK();
|
||||
|
@ -31,30 +31,21 @@ Status SqliteKeyValue::init_with_connection(SqliteDb connection, string table_na
|
||||
table_name_ = std::move(table_name);
|
||||
TRY_STATUS(init(db_, table_name_));
|
||||
|
||||
TRY_RESULT(set_stmt, db_.get_statement(PSLICE() << "REPLACE INTO " << table_name_ << " (k, v) VALUES (?1, ?2)"));
|
||||
set_stmt_ = std::move(set_stmt);
|
||||
TRY_RESULT(get_stmt, db_.get_statement(PSLICE() << "SELECT v FROM " << table_name_ << " WHERE k = ?1"));
|
||||
get_stmt_ = std::move(get_stmt);
|
||||
TRY_RESULT(erase_stmt, db_.get_statement(PSLICE() << "DELETE FROM " << table_name_ << " WHERE k = ?1"));
|
||||
erase_stmt_ = std::move(erase_stmt);
|
||||
TRY_RESULT(get_all_stmt, db_.get_statement(PSLICE() << "SELECT k, v FROM " << table_name_));
|
||||
get_all_stmt_ = std::move(get_all_stmt);
|
||||
TRY_RESULT_ASSIGN(set_stmt_,
|
||||
db_.get_statement(PSLICE() << "REPLACE INTO " << table_name_ << " (k, v) VALUES (?1, ?2)"));
|
||||
TRY_RESULT_ASSIGN(get_stmt_, db_.get_statement(PSLICE() << "SELECT v FROM " << table_name_ << " WHERE k = ?1"));
|
||||
TRY_RESULT_ASSIGN(erase_stmt_, db_.get_statement(PSLICE() << "DELETE FROM " << table_name_ << " WHERE k = ?1"));
|
||||
TRY_RESULT_ASSIGN(get_all_stmt_, db_.get_statement(PSLICE() << "SELECT k, v FROM " << table_name_));
|
||||
|
||||
TRY_RESULT(erase_by_prefix_stmt,
|
||||
TRY_RESULT_ASSIGN(erase_by_prefix_stmt_,
|
||||
db_.get_statement(PSLICE() << "DELETE FROM " << table_name_ << " WHERE ?1 <= k AND k < ?2"));
|
||||
erase_by_prefix_stmt_ = std::move(erase_by_prefix_stmt);
|
||||
|
||||
TRY_RESULT(erase_by_prefix_rare_stmt,
|
||||
TRY_RESULT_ASSIGN(erase_by_prefix_rare_stmt_,
|
||||
db_.get_statement(PSLICE() << "DELETE FROM " << table_name_ << " WHERE ?1 <= k"));
|
||||
erase_by_prefix_rare_stmt_ = std::move(erase_by_prefix_rare_stmt);
|
||||
|
||||
TRY_RESULT(get_by_prefix_stmt,
|
||||
TRY_RESULT_ASSIGN(get_by_prefix_stmt_,
|
||||
db_.get_statement(PSLICE() << "SELECT k, v FROM " << table_name_ << " WHERE ?1 <= k AND k < ?2"));
|
||||
get_by_prefix_stmt_ = std::move(get_by_prefix_stmt);
|
||||
|
||||
TRY_RESULT(get_by_prefix_rare_stmt,
|
||||
TRY_RESULT_ASSIGN(get_by_prefix_rare_stmt_,
|
||||
db_.get_statement(PSLICE() << "SELECT k, v FROM " << table_name_ << " WHERE ?1 <= k"));
|
||||
get_by_prefix_rare_stmt_ = std::move(get_by_prefix_rare_stmt);
|
||||
|
||||
init_guard.dismiss();
|
||||
return Status::OK();
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
#define TRY_RESULT(name, result) TRY_RESULT_IMPL(TD_CONCAT(TD_CONCAT(r_, name), __LINE__), auto name, result)
|
||||
|
||||
#define TRY_RESULT_ASSIGN(name, result) TRY_RESULT_IMPL(TD_CONCAT(TD_CONCAT(r_, name), __LINE__), name, result)
|
||||
#define TRY_RESULT_ASSIGN(name, result) TRY_RESULT_IMPL(TD_CONCAT(r_response, __LINE__), name, result)
|
||||
|
||||
#define TRY_RESULT_PREFIX(name, result, prefix) \
|
||||
TRY_RESULT_PREFIX_IMPL(TD_CONCAT(TD_CONCAT(r_, name), __LINE__), auto name, result, prefix)
|
||||
|
Reference in New Issue
Block a user