diff --git a/common/repositories/template/base_repository.template b/common/repositories/template/base_repository.template index 5c0693383..5a7000ee0 100644 --- a/common/repositories/template/base_repository.template +++ b/common/repositories/template/base_repository.template @@ -6,7 +6,7 @@ * Any modifications to base repositories are to be made by the generator only * * @generator ./utils/scripts/generators/repository-generator.pl - * @docs https://eqemu.gitbook.io/server/in-development/developer-area/repositories + * @docs https://docs.eqemu.io/developer/repositories */ #ifndef EQEMU_BASE_{{TABLE_NAME_UPPER}}_REPOSITORY_H @@ -319,6 +319,62 @@ public: return (results.Success() && results.begin()[0] ? strtoll(results.begin()[0], nullptr, 10) : 0); } + static std::string BaseReplace() + { + return fmt::format( + "REPLACE INTO {} ({}) ", + TableName(), + ColumnsRaw() + ); + } + + static int ReplaceOne( + Database& db, + const {{TABLE_NAME_STRUCT}} &e + ) + { + std::vector v; + +{{INSERT_ONE_ENTRIES}} + + auto results = db.QueryDatabase( + fmt::format( + "{} VALUES ({})", + BaseReplace(), + Strings::Implode(",", v) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } + + static int ReplaceMany( + Database& db, + const std::vector<{{TABLE_NAME_STRUCT}}> &entries + ) + { + std::vector insert_chunks; + + for (auto &e: entries) { + std::vector v; + +{{INSERT_MANY_ENTRIES}} + + insert_chunks.push_back("(" + Strings::Implode(",", v) + ")"); + } + + std::vector v; + + auto results = db.QueryDatabase( + fmt::format( + "{} VALUES {}", + BaseReplace(), + Strings::Implode(",", insert_chunks) + ) + ); + + return (results.Success() ? results.RowsAffected() : 0); + } }; #endif //EQEMU_BASE_{{TABLE_NAME_UPPER}}_REPOSITORY_H