Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
connection_string_builder.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
41#pragma once
42
43#include "core/configuration.h"
44#include "../core/result.h"
45
46#include <cstdint>
47#include <optional>
48#include <string>
49#include <string_view>
50#include <vector>
51
52namespace database::integrated {
53
57enum class ssl_mode {
58 disable,
59 allow,
60 prefer,
61 require,
62 verify_ca,
64};
65
77public:
80
81 // Copy and move
85 connection_string_builder& operator=(connection_string_builder&&) noexcept = default;
86
92 connection_string_builder& host(std::string_view h);
93
100
106 connection_string_builder& database(std::string_view db);
107
113 connection_string_builder& user(std::string_view u);
114
120 connection_string_builder& password(std::string_view p);
121
128
135
141 connection_string_builder& application_name(std::string_view name);
142
148
155 connection_string_builder& option(std::string_view key, std::string_view value);
156
168 [[nodiscard]] kcenon::common::Result<std::string> build(backend_type type) const;
169
175
176private:
177 std::optional<std::string> host_;
178 std::optional<uint16_t> port_;
179 std::optional<std::string> database_;
180 std::optional<std::string> user_;
181 std::optional<std::string> password_;
182 std::optional<enum ssl_mode> ssl_mode_;
183 std::optional<uint32_t> connect_timeout_;
184 std::optional<std::string> application_name_;
185 bool in_memory_ = false;
186 std::vector<std::pair<std::string, std::string>> custom_options_;
187
188 [[nodiscard]] kcenon::common::Result<std::string> build_postgres() const;
189 [[nodiscard]] kcenon::common::Result<std::string> build_sqlite() const;
190 [[nodiscard]] kcenon::common::Result<std::string> build_mongodb() const;
191 [[nodiscard]] kcenon::common::Result<std::string> build_redis() const;
192
193 [[nodiscard]] static std::string ssl_mode_to_postgres_string(enum ssl_mode mode);
194};
195
196} // namespace database::integrated
Fluent builder for constructing database connection strings.
kcenon::common::Result< std::string > build_sqlite() const
connection_string_builder & user(std::string_view u)
Set the username for authentication.
connection_string_builder & port(uint16_t p)
Set the database port.
connection_string_builder & host(std::string_view h)
Set the database host.
connection_string_builder(const connection_string_builder &)=default
connection_string_builder & application_name(std::string_view name)
Set the application name (for PostgreSQL)
kcenon::common::Result< std::string > build_postgres() const
connection_string_builder & reset()
Reset the builder to initial state.
std::vector< std::pair< std::string, std::string > > custom_options_
static std::string ssl_mode_to_postgres_string(enum ssl_mode mode)
kcenon::common::Result< std::string > build_redis() const
connection_string_builder & option(std::string_view key, std::string_view value)
Add a custom option.
connection_string_builder & in_memory()
Configure SQLite to use in-memory database.
connection_string_builder & password(std::string_view p)
Set the password for authentication.
connection_string_builder & operator=(const connection_string_builder &)=default
kcenon::common::Result< std::string > build_mongodb() const
connection_string_builder(connection_string_builder &&) noexcept=default
connection_string_builder & connect_timeout(uint32_t seconds)
Set the connection timeout.
kcenon::common::Result< std::string > build(backend_type type) const
Build the connection string for the specified backend.
Unified configuration for integrated database system.
ssl_mode
SSL connection mode for database connections.
@ prefer
Try SSL first, fall back to non-SSL.
@ verify_ca
Require SSL with CA verification.
@ allow
Try SSL, fall back to non-SSL.
@ verify_full
Require SSL with full verification.
@ require
Require SSL, no verification.
backend_type
Database backend type enumeration.
kcenon::common::Result< T > Result
Primary Result type - use this for all database operations.
Definition result.h:30
Result<T> type for database_system error handling.