+13
-13
@@ -25,7 +25,7 @@
|
||||
namespace {
|
||||
|
||||
constexpr auto application_id = std::int64_t{0x56414D50};
|
||||
constexpr auto catalogue_schema_version = std::int64_t{3};
|
||||
constexpr auto catalog_schema_version = std::int64_t{3};
|
||||
|
||||
auto connection_config(vamp_zero::database_config const &config) -> noto::connection_config {
|
||||
auto result = noto::file_connection_config(config.path, "product-vamp");
|
||||
@@ -40,17 +40,17 @@ auto text_value(noto::sqlite_value const &value) -> std::string {
|
||||
return text == nullptr ? std::string{} : *text;
|
||||
}
|
||||
|
||||
auto close_catalogue_query(noto::connection &connection, noto::statement &statement, std::expected<void, modulus::error> status) -> boost::asio::awaitable<std::expected<void, modulus::error>> {
|
||||
auto close_catalog_query(noto::connection &connection, noto::statement &statement, std::expected<void, modulus::error> status) -> boost::asio::awaitable<std::expected<void, modulus::error>> {
|
||||
auto finalized = co_await statement.async_finalize();
|
||||
if (!finalized) {
|
||||
modulus::log_error("catalogue query finalization failed: " + finalized.error().describe());
|
||||
modulus::log_error("catalog query finalization failed: " + finalized.error().describe());
|
||||
if (status) {
|
||||
status = std::unexpected(finalized.error());
|
||||
}
|
||||
}
|
||||
auto closed = co_await connection.async_close();
|
||||
if (!closed) {
|
||||
modulus::log_error("catalogue connection close failed: " + closed.error().describe());
|
||||
modulus::log_error("catalog connection close failed: " + closed.error().describe());
|
||||
if (status) {
|
||||
status = std::unexpected(closed.error());
|
||||
}
|
||||
@@ -60,7 +60,7 @@ auto close_catalogue_query(noto::connection &connection, noto::statement &statem
|
||||
|
||||
auto resolve_source_path(std::string const &assets_path, std::string const &source) -> std::expected<std::string, modulus::error> {
|
||||
auto fail = [] {
|
||||
return std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "unsafe catalogue asset path; rebuild or reinstall Product Vamp"));
|
||||
return std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "unsafe catalog asset path; rebuild or reinstall Product Vamp"));
|
||||
};
|
||||
auto relative = std::filesystem::path{source};
|
||||
if (source.empty() || source.find('\0') != std::string::npos || source.find('\\') != std::string::npos ||
|
||||
@@ -94,23 +94,23 @@ auto count_value(noto::sqlite_value const &value) -> std::size_t {
|
||||
auto vamp_zero::async_validate_database(boost::asio::any_io_executor executor, vamp_zero::database_config config, std::bool_t integrity) -> boost::asio::awaitable<std::expected<void, modulus::error>> {
|
||||
auto error = std::error_code{};
|
||||
if (!std::filesystem::is_regular_file(config.path, error) || error) {
|
||||
co_return std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "catalogue is missing or unreadable: " + config.path + "; rebuild or reinstall Product Vamp"));
|
||||
co_return std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "catalog is missing or unreadable: " + config.path + "; rebuild or reinstall Product Vamp"));
|
||||
}
|
||||
auto connection = noto::connection{executor, connection_config(config)};
|
||||
auto connected = co_await connection.async_connect();
|
||||
if (!connected) {
|
||||
co_return std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "cannot open catalogue: " + config.path + "; rebuild or reinstall Product Vamp: " + connected.error().describe()));
|
||||
co_return std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "cannot open catalog: " + config.path + "; rebuild or reinstall Product Vamp: " + connected.error().describe()));
|
||||
}
|
||||
auto application = co_await connection.async_application_id();
|
||||
auto version = co_await connection.async_user_version();
|
||||
auto status = std::expected<void, modulus::error>{};
|
||||
if (!application || !version || *application != application_id || *version != catalogue_schema_version) {
|
||||
status = std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "invalid or incompatible catalogue: " + config.path + "; rebuild or reinstall Product Vamp"));
|
||||
if (!application || !version || *application != application_id || *version != catalog_schema_version) {
|
||||
status = std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "invalid or incompatible catalog: " + config.path + "; rebuild or reinstall Product Vamp"));
|
||||
}
|
||||
if (status && integrity) {
|
||||
auto checked = co_await connection.async_execute("PRAGMA quick_check(1)");
|
||||
if (!checked || checked->rows.size() != 1U || checked->rows[0].size() != 1U || text_value(checked->rows[0][0]) != "ok") {
|
||||
status = std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "corrupt catalogue: " + config.path + "; rebuild or reinstall Product Vamp"));
|
||||
status = std::unexpected(vamp_zero::make_error(vamp_zero::error_code::PERSISTENCE, "corrupt catalog: " + config.path + "; rebuild or reinstall Product Vamp"));
|
||||
}
|
||||
}
|
||||
auto closed = co_await connection.async_close();
|
||||
@@ -169,7 +169,7 @@ auto vamp_zero::async_load_performance_library(boost::asio::any_io_executor exec
|
||||
.total_pages = count_value(row[7]),
|
||||
});
|
||||
}
|
||||
auto closed = co_await close_catalogue_query(connection, *selected, std::move(status));
|
||||
auto closed = co_await close_catalog_query(connection, *selected, std::move(status));
|
||||
if (!closed) {
|
||||
co_return std::unexpected(closed.error());
|
||||
}
|
||||
@@ -230,7 +230,7 @@ auto vamp_zero::async_load_practice_library(boost::asio::any_io_executor executo
|
||||
.parts = {std::move(practice_part)},
|
||||
});
|
||||
}
|
||||
auto closed = co_await close_catalogue_query(connection, *selected, std::move(status));
|
||||
auto closed = co_await close_catalog_query(connection, *selected, std::move(status));
|
||||
if (!closed) {
|
||||
co_return std::unexpected(closed.error());
|
||||
}
|
||||
@@ -272,7 +272,7 @@ auto vamp_zero::async_load_score(boost::asio::any_io_executor executor, vamp_zer
|
||||
if (!result) {
|
||||
status = std::unexpected(result.error());
|
||||
}
|
||||
auto closed = co_await close_catalogue_query(connection, *selected, std::move(status));
|
||||
auto closed = co_await close_catalog_query(connection, *selected, std::move(status));
|
||||
if (!closed) {
|
||||
co_return std::unexpected(closed.error());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user