Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
join_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
5#pragma once
6
7#include "../database_types.h"
8#include "value_formatter.h"
9#include <string>
10#include <vector>
11
12namespace database::query {
13
18enum class join_type {
19 inner,
20 left,
21 right,
23 cross
24};
25
30struct join_spec {
31 std::string table;
32 std::string condition;
34 std::string alias;
35};
36
68public:
70
78 join_builder& join(const std::string& table, const std::string& condition,
79 const std::string& alias = "");
80
88 join_builder& left_join(const std::string& table, const std::string& condition,
89 const std::string& alias = "");
90
98 join_builder& right_join(const std::string& table, const std::string& condition,
99 const std::string& alias = "");
100
108 join_builder& full_outer_join(const std::string& table, const std::string& condition,
109 const std::string& alias = "");
110
117 join_builder& cross_join(const std::string& table, const std::string& alias = "");
118
124 join_builder& add(const join_spec& spec);
125
131 std::string build(const value_formatter& formatter) const;
132
137 bool empty() const;
138
142 void clear();
143
148 size_t size() const;
150private:
151 std::vector<join_spec> joins_;
152
153 std::string join_type_to_string(join_type type) const;
154};
155
156} // namespace database::query
Builds JOIN clauses for SQL queries.
join_builder & add(const join_spec &spec)
Add a join with explicit type.
std::vector< join_spec > joins_
join_builder & right_join(const std::string &table, const std::string &condition, const std::string &alias="")
Add a RIGHT JOIN.
join_builder & join(const std::string &table, const std::string &condition, const std::string &alias="")
Add an INNER JOIN.
bool empty() const
Check if builder is empty.
join_builder & full_outer_join(const std::string &table, const std::string &condition, const std::string &alias="")
Add a FULL OUTER JOIN.
std::string build(const value_formatter &formatter) const
Build the JOIN clauses.
join_builder & left_join(const std::string &table, const std::string &condition, const std::string &alias="")
Add a LEFT JOIN.
size_t size() const
Get number of joins.
std::string join_type_to_string(join_type type) const
void clear()
Clear all joins.
join_builder & cross_join(const std::string &table, const std::string &alias="")
Add a CROSS JOIN.
Formats database values for different backends.
Defines the enumeration of supported database types.
join_type
Types of SQL joins.
@ full_outer
FULL OUTER JOIN.
@ right
RIGHT OUTER JOIN.
@ left
LEFT OUTER JOIN.
Represents a single WHERE condition.
Specification for a single JOIN clause.
std::string condition
ON condition.
std::string alias
Optional table alias.
std::string table
Table to join.
join_type type
Type of join.