25std::vector<ClientBuild::Info> Builds;
32 if (program.length() >
sizeof(
uint32))
48 if (platform.length() >
sizeof(
uint32))
69 if (platformType.length() >
sizeof(
uint32))
86 if (arch.length() >
sizeof(
uint32))
106 if (type.length() >
sizeof(
uint32))
130 if (
QueryResult result =
LoginDatabase.Query(
"SELECT majorVersion, minorVersion, bugfixVersion, hotfixVersion, build FROM build_info ORDER BY build ASC"))
134 Field* fields = result->Fetch();
135 Info& build = Builds.emplace_back();
141 std::ranges::copy(hotfixVersion, build.
HotfixVersion.begin());
147 }
while (result->NextRow());
151 if (
QueryResult result =
LoginDatabase.Query(
"SELECT `build`, `platform`, `arch`, `type`, `key` FROM `build_auth_key`"))
155 Field* fields = result->Fetch();
158 auto buildInfo = std::ranges::find(Builds, build, &
Info::Build);
159 if (buildInfo == Builds.end())
161 TC_LOG_ERROR(
"sql.sql",
"ClientBuild::LoadBuildInfo: Unknown `build` {} in `build_auth_key` - missing from `build_info`, skipped.", build);
168 TC_LOG_ERROR(
"sql.sql",
"ClientBuild::LoadBuildInfo: Invalid platform {} for `build` {} in `build_auth_key`, skipped.", platformType, build);
175 TC_LOG_ERROR(
"sql.sql",
"ClientBuild::LoadBuildInfo: Invalid `arch` {} for `build` {} in `build_auth_key`, skipped.", arch, build);
182 TC_LOG_ERROR(
"sql.sql",
"ClientBuild::LoadBuildInfo: Invalid `type` {} for `build` {} in `build_auth_key`, skipped.", type, build);
186 AuthKey& buildKey = buildInfo->AuthKeys.emplace_back();
190 }
while (result->NextRow());
196 auto buildInfo = std::ranges::find(Builds, build, &
Info::Build);
197 return buildInfo != Builds.end() ? &*buildInfo :
nullptr;
202 auto buildInfo = std::ranges::lower_bound(Builds, build, {}, &
Info::Build);
203 return buildInfo != Builds.end() ? (buildInfo->MajorVersion * 10000 + buildInfo->MinorVersion * 100 + buildInfo->BugfixVersion) : 0;
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< LoginDatabaseConnection > LoginDatabase
Accessor to the realm/login database.
#define TC_LOG_ERROR(filterType__, message__,...)
Class used to access individual fields of database query result.
std::vector< uint8 > GetBinary() const noexcept
uint32 GetUInt32() const noexcept
std::string_view GetStringView() const noexcept
int32 GetInt32() const noexcept
uint32 GetMinorMajorBugfixVersionForBuild(uint32 build)
Info const * GetBuildInfo(uint32 build)
static constexpr Id Arm64
static constexpr Id Arm32
static TC_SHARED_API bool IsValid(std::string_view arch)
std::array< uint8, Size > Key
static constexpr std::size_t Size
std::array< char, 4 > HotfixVersion
static TC_SHARED_API bool IsValid(std::string_view program)
static constexpr Id BetaRelease
static constexpr Id PtrRelease
static constexpr Id Retail
static TC_SHARED_API bool IsValid(std::string_view type)
static constexpr Id RetailChina
ClientBuild::Platform::Id Platform
static constexpr FourCC FromString(std::string_view text)