Serialize::ID SQLiteService::GetID(const Anope::string &prefix) { /* must be in a deferred or reserved transaction here for atomic row update */ Query query("SELECT `id` FROM `" + prefix + "id`"); Serialize::ID id; Result res = RunQuery(query); if (res.Rows()) { id = convertTo<Serialize::ID>(res.Get(0, "id")); Query update_query("UPDATE `" + prefix + "id` SET `id` = `id` + 1"); RunQuery(update_query); } else { id = 0; Query insert_query("INSERT INTO `" + prefix + "id` (id) VALUES(@id@)"); insert_query.SetValue("id", 1); RunQuery(insert_query); } return id; }
Serialize::ID MySQLService::GetID(const Anope::string &prefix) { Query query("SELECT `id` FROM `" + prefix + "id` FOR UPDATE"); Serialize::ID id; Result res = RunQuery(query); if (res.Rows()) { id = convertTo<Serialize::ID>(res.Get(0, "id")); Query update_query("UPDATE `" + prefix + "id` SET `id` = `id` + 1"); RunQuery(update_query); } else { id = 0; Query insert_query("INSERT INTO `" + prefix + "id` (id) VALUES(@id@)"); insert_query.SetValue("id", 1); RunQuery(insert_query); } return id; }