Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
database::query::sql_dialect Class Referenceabstract

Abstract base class for database-specific SQL dialects. More...

#include <sql_dialect.h>

Inheritance diagram for database::query::sql_dialect:
Inheritance graph
Collaboration diagram for database::query::sql_dialect:
Collaboration graph

Public Member Functions

virtual ~sql_dialect ()=default
 
virtual std::string placeholder (int index) const =0
 Generate parameter placeholder.
 
virtual std::string quote_identifier (std::string_view name) const =0
 Quote an identifier (table or column name)
 
virtual std::string escape_string (std::string_view str) const =0
 Escape a string value for safe SQL inclusion.
 
virtual std::string returning_clause (std::string_view column="") const =0
 Generate RETURNING clause for INSERT/UPDATE.
 
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 limit_clause (size_t limit, size_t offset) const =0
 Generate LIMIT clause.
 
virtual std::string auto_increment () const =0
 Get auto-increment column definition.
 
virtual std::string current_timestamp () const =0
 Get current timestamp function.
 
virtual std::string concat_operator () const =0
 Get string concatenation operator.
 
virtual bool supports_feature (const std::string &feature) const =0
 Check if database supports specific feature.
 

Static Public Member Functions

static std::unique_ptr< sql_dialectcreate (database_types type)
 Factory method to create appropriate dialect.
 

Detailed Description

Abstract base class for database-specific SQL dialects.

Strategy Pattern:

  • Encapsulates database-specific SQL syntax variations
  • Allows runtime selection of appropriate dialect
  • Makes it easy to add new database support

Responsibilities:

  • Placeholder style formatting ($1 vs ?1)
  • Identifier quoting ("col" vs [col])
  • LIMIT/OFFSET clause formatting
  • RETURNING clause support
  • UPSERT clause formatting
  • Auto-increment column definition
  • Current timestamp functions
  • String escaping
  • Boolean literals
  • Data type mappings

Definition at line 36 of file sql_dialect.h.

Constructor & Destructor Documentation

◆ ~sql_dialect()

virtual database::query::sql_dialect::~sql_dialect ( )
virtualdefault

Member Function Documentation

◆ auto_increment()

virtual std::string database::query::sql_dialect::auto_increment ( ) const
pure virtual

Get auto-increment column definition.

Returns
SQL fragment for auto-increment column

Examples:

  • PostgreSQL: "SERIAL"
  • SQLite: "AUTOINCREMENT"

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ concat_operator()

virtual std::string database::query::sql_dialect::concat_operator ( ) const
pure virtual

Get string concatenation operator.

Returns
Operator or function for concatenation

Examples:

  • PostgreSQL: "||"
  • SQLite: "||"

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ create()

std::unique_ptr< sql_dialect > database::query::sql_dialect::create ( database_types type)
static

Factory method to create appropriate dialect.

Parameters
typeDatabase type
Returns
Unique pointer to dialect instance

Definition at line 11 of file sql_dialect.cpp.

11 {
12 switch (type) {
14 return std::make_unique<postgresql_dialect>();
16 return std::make_unique<sqlite_dialect>();
17 default:
18 throw std::invalid_argument("Unsupported database type for SQL dialect");
19 }
20}
@ sqlite
Indicates a SQLite database.
@ postgres
Indicates a PostgreSQL database.

References database::postgres, and database::sqlite.

Referenced by database::query::tests::CrossDialectTest::SetUp(), database::query::tests::PostgreSQLDialectTest::SetUp(), database::query::tests::SQLiteDialectTest::SetUp(), database::query::tests::TEST(), database::query::tests::TEST(), and database::query::tests::TEST().

Here is the caller graph for this function:

◆ current_timestamp()

virtual std::string database::query::sql_dialect::current_timestamp ( ) const
pure virtual

Get current timestamp function.

Returns
SQL function for current timestamp

Examples:

  • PostgreSQL: "CURRENT_TIMESTAMP"
  • SQLite: "CURRENT_TIMESTAMP"

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ escape_string()

virtual std::string database::query::sql_dialect::escape_string ( std::string_view str) const
pure virtual

Escape a string value for safe SQL inclusion.

Parameters
strThe string to escape
Returns
Escaped string (without surrounding quotes)

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ limit_clause()

virtual std::string database::query::sql_dialect::limit_clause ( size_t limit,
size_t offset ) const
pure virtual

Generate LIMIT clause.

Parameters
limitMaximum number of rows
offsetNumber of rows to skip
Returns
Database-specific LIMIT clause

Examples:

  • PostgreSQL: "LIMIT 10 OFFSET 5"
  • SQLite: "LIMIT 10 OFFSET 5"

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ placeholder()

virtual std::string database::query::sql_dialect::placeholder ( int index) const
pure virtual

Generate parameter placeholder.

Parameters
index1-based parameter index
Returns
Database-specific placeholder string

Examples:

  • PostgreSQL: "$1", "$2", "$3"
  • SQLite: "?1", "?2", "?3"

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ quote_identifier()

virtual std::string database::query::sql_dialect::quote_identifier ( std::string_view name) const
pure virtual

Quote an identifier (table or column name)

Parameters
nameThe identifier to quote
Returns
Quoted identifier

Examples:

  • PostgreSQL: "\"column_name\""
  • SQLite: "\"column_name\""

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ returning_clause()

virtual std::string database::query::sql_dialect::returning_clause ( std::string_view column = "") const
pure virtual

Generate RETURNING clause for INSERT/UPDATE.

Parameters
columnThe column to return (empty for all)
Returns
Database-specific RETURNING clause or empty if unsupported

Examples:

  • PostgreSQL: " RETURNING id"
  • SQLite: " RETURNING id" (3.35+)

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ supports_feature()

virtual bool database::query::sql_dialect::supports_feature ( const std::string & feature) const
pure virtual

Check if database supports specific feature.

Parameters
featureFeature name
Returns
true if supported

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.

◆ upsert_clause()

virtual std::string database::query::sql_dialect::upsert_clause ( const std::vector< std::string > & conflict_columns,
const std::vector< std::string > & update_columns ) const
pure virtual

Generate UPSERT (INSERT OR UPDATE) clause.

Parameters
conflict_columnsColumns that define conflict
update_columnsColumns to update on conflict
Returns
Database-specific upsert clause

Examples:

  • PostgreSQL: "ON CONFLICT (id) DO UPDATE SET ..."
  • SQLite: "ON CONFLICT (id) DO UPDATE SET ..."

Implemented in database::query::postgresql_dialect, and database::query::sqlite_dialect.


The documentation for this class was generated from the following files: