X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Frollback.cpp;h=b454e40c929c41c20f27b6782ae0dc940f1bdd8e;hb=393c8392821bf3357d2ada3ac0afe065758acc53;hp=ac4324cabd25efd4ff9e858b9723effbbe9e9eca;hpb=ef100f12a1346f7bfd2a05dc606cb22e97179c02;p=dragonfireclient.git diff --git a/src/rollback.cpp b/src/rollback.cpp index ac4324cab..b454e40c9 100644 --- a/src/rollback.cpp +++ b/src/rollback.cpp @@ -42,6 +42,14 @@ with this program; if not, write to the Free Software Foundation, Inc., } #define SQLOK(f) SQLRES(f, SQLITE_OK) +#define SQLOK_ERRSTREAM(s, m) \ + if ((s) != SQLITE_OK) { \ + errorstream << "RollbackManager: " << (m) << ": " \ + << sqlite3_errmsg(db) << std::endl; \ + } + +#define FINALIZE_STATEMENT(statement) \ + SQLOK_ERRSTREAM(sqlite3_finalize(statement), "Failed to finalize " #statement) class ItemStackRow : public ItemStack { public: @@ -83,8 +91,7 @@ struct Entity { RollbackManager::RollbackManager(const std::string & world_path, IGameDef * gamedef_) : - gamedef(gamedef_), - current_actor_is_guess(false) + gamedef(gamedef_) { verbosestream << "RollbackManager::RollbackManager(" << world_path << ")" << std::endl; @@ -109,17 +116,17 @@ RollbackManager::~RollbackManager() { flush(); - SQLOK(sqlite3_finalize(stmt_insert)); - SQLOK(sqlite3_finalize(stmt_replace)); - SQLOK(sqlite3_finalize(stmt_select)); - SQLOK(sqlite3_finalize(stmt_select_range)); - SQLOK(sqlite3_finalize(stmt_select_withActor)); - SQLOK(sqlite3_finalize(stmt_knownActor_select)); - SQLOK(sqlite3_finalize(stmt_knownActor_insert)); - SQLOK(sqlite3_finalize(stmt_knownNode_select)); - SQLOK(sqlite3_finalize(stmt_knownNode_insert)); - - SQLOK(sqlite3_close(db)); + FINALIZE_STATEMENT(stmt_insert); + FINALIZE_STATEMENT(stmt_replace); + FINALIZE_STATEMENT(stmt_select); + FINALIZE_STATEMENT(stmt_select_range); + FINALIZE_STATEMENT(stmt_select_withActor); + FINALIZE_STATEMENT(stmt_knownActor_select); + FINALIZE_STATEMENT(stmt_knownActor_insert); + FINALIZE_STATEMENT(stmt_knownNode_select); + FINALIZE_STATEMENT(stmt_knownNode_insert); + + SQLOK_ERRSTREAM(sqlite3_close(db), "Could not close db"); } @@ -476,6 +483,7 @@ const std::list RollbackManager::actionRowsFromSelect(sqlite3_stmt* s row.actor = sqlite3_column_int (stmt, 0); row.timestamp = sqlite3_column_int64(stmt, 1); row.type = sqlite3_column_int (stmt, 2); + row.nodeMeta = 0; if (row.type == RollbackAction::TYPE_MODIFY_INVENTORY_STACK) { text = sqlite3_column_text (stmt, 3); @@ -570,35 +578,34 @@ const std::list RollbackManager::rollbackActionsFromActionRows( { std::list actions; - for (std::list::const_iterator it = rows.begin(); - it != rows.end(); ++it) { + for (const ActionRow &row : rows) { RollbackAction action; - action.actor = (it->actor) ? getActorName(it->actor) : ""; - action.unix_time = it->timestamp; - action.type = static_cast(it->type); + action.actor = (row.actor) ? getActorName(row.actor) : ""; + action.unix_time = row.timestamp; + action.type = static_cast(row.type); switch (action.type) { case RollbackAction::TYPE_MODIFY_INVENTORY_STACK: - action.inventory_location = it->location.c_str(); - action.inventory_list = it->list; - action.inventory_index = it->index; - action.inventory_add = it->add; - action.inventory_stack = it->stack; + action.inventory_location = row.location; + action.inventory_list = row.list; + action.inventory_index = row.index; + action.inventory_add = row.add; + action.inventory_stack = row.stack; if (action.inventory_stack.name.empty()) { - action.inventory_stack.name = getNodeName(it->stack.id); + action.inventory_stack.name = getNodeName(row.stack.id); } break; case RollbackAction::TYPE_SET_NODE: - action.p = v3s16(it->x, it->y, it->z); - action.n_old.name = getNodeName(it->oldNode); - action.n_old.param1 = it->oldParam1; - action.n_old.param2 = it->oldParam2; - action.n_old.meta = it->oldMeta; - action.n_new.name = getNodeName(it->newNode); - action.n_new.param1 = it->newParam1; - action.n_new.param2 = it->newParam2; - action.n_new.meta = it->newMeta; + action.p = v3s16(row.x, row.y, row.z); + action.n_old.name = getNodeName(row.oldNode); + action.n_old.param1 = row.oldParam1; + action.n_old.param2 = row.oldParam2; + action.n_old.meta = row.oldMeta; + action.n_new.name = getNodeName(row.newNode); + action.n_new.param1 = row.newParam1; + action.n_new.param2 = row.newParam2; + action.n_new.meta = row.newMeta; break; default: @@ -863,7 +870,7 @@ void RollbackManager::setActor(const std::string & actor, bool is_guess) std::string RollbackManager::getSuspect(v3s16 p, float nearness_shortcut, float min_nearness) { - if (current_actor != "") { + if (!current_actor.empty()) { return current_actor; } int cur_time = time(0); @@ -876,7 +883,7 @@ std::string RollbackManager::getSuspect(v3s16 p, float nearness_shortcut, if (i->unix_time < first_time) { break; } - if (i->actor == "") { + if (i->actor.empty()) { continue; } // Find position of suspect or continue @@ -912,7 +919,7 @@ void RollbackManager::flush() for (iter = action_todisk_buffer.begin(); iter != action_todisk_buffer.end(); ++iter) { - if (iter->actor == "") { + if (iter->actor.empty()) { continue; } @@ -935,12 +942,6 @@ void RollbackManager::addAction(const RollbackAction & action) } } -std::list RollbackManager::getEntriesSince(time_t first_time) -{ - flush(); - return getActionsSince(first_time); -} - std::list RollbackManager::getNodeActors(v3s16 pos, int range, time_t seconds, int limit) {