24 {
"disable", PostgresSslMode::disable}, {
"allow", PostgresSslMode::allow},
25 {
"prefer", PostgresSslMode::prefer}, {
"require", PostgresSslMode::require},
26 {
"verify-ca", PostgresSslMode::verify_ca}, {
"verify-full", PostgresSslMode::verify_full},
31 PostgresSslMode::verify_full};
33static constexpr std::string_view
InMemory =
":memory:";
35static std::optional<PostgresSslMode>
ParseSslMode(std::string_view name)
38 return found != std::ranges::end(
SslModes) ? std::optional(
found->Mode) : std::nullopt;
43 sqlpp::postgresql::connection_config
settings;
56 sqlpp::mysql::connection_config
settings;
62 settings.connect_timeout_seconds =
static_cast<unsigned int>(
config.connectTimeoutSec);
72 sqlpp::sqlite3::connection_config
settings;
83 std::filesystem::create_directories(
file.parent_path(),
ec);
94 std::format(
"Unknown database driver '{}'; expected postgres, mariadb or sqlite.",
config.driver)));
98 return std::unexpected(
Error::Invalid(
"Database driver 'sqlite' needs a 'path' (a file, or \":memory:\")."));
103 "Unknown sslMode '{}'; expected disable, allow, prefer, require, verify-ca or verify-full.",
config.sslMode)));
111 [](
const auto&
conn) {
112 if constexpr (std::same_as<std::remove_cvref_t<
decltype(
conn)>, std::monostate>)
118 return conn.is_connected();
132 sqlpp::mysql::global_library_init();
140 conn(
"PRAGMA journal_mode=WAL");
142 conn(
"PRAGMA busy_timeout=" + std::to_string(
config.connectTimeoutSec * 1000));
static sqlpp::mysql::connection_config MariaDbSettings(const DatabaseConfig &config)
std::optional< Driver > ParseDriver(std::string_view name)
bool IsOpen(const AnyConnection &connection)
static constexpr SslModeName SslModes[]
std::filesystem::path ResolvePath(std::string_view relativePath)
a relative path against the base directory. If the path is already absolute, returns it as-is.
sqlpp::postgresql::connection_config::sslmode_t PostgresSslMode
static std::optional< PostgresSslMode > ParseSslMode(std::string_view name)
static std::string ReadFile(const std::filesystem::path &path)
static constexpr PostgresSslMode TlsModes[]
static sqlpp::sqlite3::connection_config SqliteSettings(const DatabaseConfig &config)
sqlpp::postgresql::connection PostgresConnection
static constexpr std::string_view InMemory
sqlpp::sqlite3::connection SqliteConnection
Result< Driver > CheckConfig(const DatabaseConfig &config)
std::expected< T, Error > Result
static sqlpp::postgresql::connection_config PostgresSettings(const DatabaseConfig &config)
std::variant< std::monostate, PostgresConnection, MariaDbConnection, SqliteConnection > AnyConnection
void OpenConnection(AnyConnection &connection, Driver driver, const DatabaseConfig &config)
sqlpp::mysql::connection MariaDbConnection
Connection parameters for every supported backend.
static Error Invalid(std::string detail)