Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
sql_dialect.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
5#pragma once
6
7#include "../database_types.h"
8#include <string>
9#include <string_view>
10#include <memory>
11#include <vector>
12
13namespace database::query {
14
37public:
38 virtual ~sql_dialect() = default;
39
49 virtual std::string placeholder(int index) const = 0;
50
60 virtual std::string quote_identifier(std::string_view name) const = 0;
61
67 virtual std::string escape_string(std::string_view str) const = 0;
68
78 virtual std::string returning_clause(std::string_view column = "") const = 0;
79
90 virtual std::string upsert_clause(
91 const std::vector<std::string>& conflict_columns,
92 const std::vector<std::string>& update_columns) const = 0;
93
104 virtual std::string limit_clause(size_t limit, size_t offset) const = 0;
105
114 virtual std::string auto_increment() const = 0;
115
124 virtual std::string current_timestamp() const = 0;
125
134 virtual std::string concat_operator() const = 0;
135
141 virtual bool supports_feature(const std::string& feature) const = 0;
142
148 static std::unique_ptr<sql_dialect> create(database_types type);
149};
150
156public:
157 std::string placeholder(int index) const override;
158 std::string quote_identifier(std::string_view name) const override;
159 std::string escape_string(std::string_view str) const override;
160 std::string returning_clause(std::string_view column = "") const override;
161 std::string upsert_clause(
162 const std::vector<std::string>& conflict_columns,
163 const std::vector<std::string>& update_columns) const override;
164 std::string limit_clause(size_t limit, size_t offset) const override;
165 std::string auto_increment() const override;
166 std::string current_timestamp() const override;
167 std::string concat_operator() const override;
168 bool supports_feature(const std::string& feature) const override;
169};
170
176public:
177 std::string placeholder(int index) const override;
178 std::string quote_identifier(std::string_view name) const override;
179 std::string escape_string(std::string_view str) const override;
180 std::string returning_clause(std::string_view column = "") const override;
181 std::string upsert_clause(
182 const std::vector<std::string>& conflict_columns,
183 const std::vector<std::string>& update_columns) const override;
184 std::string limit_clause(size_t limit, size_t offset) const override;
185 std::string auto_increment() const override;
186 std::string current_timestamp() const override;
187 std::string concat_operator() const override;
188 bool supports_feature(const std::string& feature) const override;
189};
190
191} // namespace database::query
PostgreSQL-specific SQL dialect.
std::string quote_identifier(std::string_view name) const override
Quote an identifier (table or column name)
std::string auto_increment() const override
Get auto-increment column definition.
bool supports_feature(const std::string &feature) const override
Check if database supports specific feature.
std::string returning_clause(std::string_view column="") const override
Generate RETURNING clause for INSERT/UPDATE.
std::string upsert_clause(const std::vector< std::string > &conflict_columns, const std::vector< std::string > &update_columns) const override
Generate UPSERT (INSERT OR UPDATE) clause.
std::string concat_operator() const override
Get string concatenation operator.
std::string current_timestamp() const override
Get current timestamp function.
std::string limit_clause(size_t limit, size_t offset) const override
Generate LIMIT clause.
std::string placeholder(int index) const override
Generate parameter placeholder.
std::string escape_string(std::string_view str) const override
Escape a string value for safe SQL inclusion.
Abstract base class for database-specific SQL dialects.
Definition sql_dialect.h:36
virtual std::string placeholder(int index) const =0
Generate parameter placeholder.
virtual ~sql_dialect()=default
virtual std::string returning_clause(std::string_view column="") const =0
Generate RETURNING clause for INSERT/UPDATE.
virtual std::string limit_clause(size_t limit, size_t offset) const =0
Generate LIMIT clause.
virtual bool supports_feature(const std::string &feature) const =0
Check if database supports specific feature.
virtual std::string current_timestamp() const =0
Get current timestamp function.
virtual std::string upsert_clause(const std::vector< std::string > &conflict_columns, const std::vector< std::string > &update_columns) const =0
Generate UPSERT (INSERT OR UPDATE) clause.
virtual std::string escape_string(std::string_view str) const =0
Escape a string value for safe SQL inclusion.
virtual std::string auto_increment() const =0
Get auto-increment column definition.
virtual std::string concat_operator() const =0
Get string concatenation operator.
static std::unique_ptr< sql_dialect > create(database_types type)
Factory method to create appropriate dialect.
virtual std::string quote_identifier(std::string_view name) const =0
Quote an identifier (table or column name)
SQLite-specific SQL dialect.
std::string upsert_clause(const std::vector< std::string > &conflict_columns, const std::vector< std::string > &update_columns) const override
Generate UPSERT (INSERT OR UPDATE) clause.
bool supports_feature(const std::string &feature) const override
Check if database supports specific feature.
std::string quote_identifier(std::string_view name) const override
Quote an identifier (table or column name)
std::string current_timestamp() const override
Get current timestamp function.
std::string concat_operator() const override
Get string concatenation operator.
std::string placeholder(int index) const override
Generate parameter placeholder.
std::string auto_increment() const override
Get auto-increment column definition.
std::string returning_clause(std::string_view column="") const override
Generate RETURNING clause for INSERT/UPDATE.
std::string limit_clause(size_t limit, size_t offset) const override
Generate LIMIT clause.
std::string escape_string(std::string_view str) const override
Escape a string value for safe SQL inclusion.
Defines the enumeration of supported database types.
database_types
Represents various database backends or modes.