From 52b3cd46c76fd4be18aeb8422a08a073484b9fad Mon Sep 17 00:00:00 2001 From: Rutger Broekhoff Date: Sat, 29 Aug 2026 12:01:42 +0200 Subject: More module implementation partition units --- server/src/database.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 server/src/database.cpp (limited to 'server/src/database.cpp') diff --git a/server/src/database.cpp b/server/src/database.cpp new file mode 100644 index 0000000..54e5f34 --- /dev/null +++ b/server/src/database.cpp @@ -0,0 +1,34 @@ +module routemon:database$impl; + +import :database; + +namespace routemon::database { + +constexpr std::int64_t expected_database_version = 1; + +auto open(std::string const& filename) -> std::shared_ptr +{ + auto dbc = sqlite3::open(filename); + try + { + auto version = std::optional{}; + dbc.query("SELECT version FROM migration;").scan_single(version); + if (!version) + throw std::runtime_error{"failed to fetch database migration version"}; + if (version != expected_database_version) + { + throw std::runtime_error{std::format( + "database migration version ({}) does not match expected " + "version ({}), consider running migrations", + *version, expected_database_version)}; + } + } + catch (std::exception const& e) + { + throw std::runtime_error{std::format( + "failed to query database version: {}", e.what())}; + } + return std::shared_ptr{new connection{std::move(dbc)}}; +} + +} // namespace routemon::database -- cgit v1.3