|
Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
|
Thread-safe immutable query builder using functional programming style. More...
#include <immutable_query_builder.h>

Public Member Functions | |
| immutable_query_builder (const std::string &table) | |
| Constructs a new immutable query builder. | |
| immutable_query_builder | select (std::vector< std::string > fields) const |
| SELECT clause - specifies which columns to select. | |
| immutable_query_builder | where (const std::string &field, const std::string &op, const core::database_value &value) const |
| WHERE clause - adds a condition. | |
| immutable_query_builder | where (const query_condition &condition) const |
| WHERE clause - adds a query_condition. | |
| immutable_query_builder | order_by (const std::string &field, sort_order order=sort_order::asc) const |
| ORDER BY clause - specifies sorting. | |
| immutable_query_builder | limit (uint32_t count) const |
| LIMIT clause - limits number of results. | |
| immutable_query_builder | offset (uint32_t count) const |
| OFFSET clause - skips rows. | |
| immutable_query_builder | join (const std::string &table, const std::string &condition, join_type type=join_type::inner) const |
| JOIN clause - adds a join. | |
| immutable_query_builder | group_by (std::vector< std::string > fields) const |
| GROUP BY clause - groups results. | |
| immutable_query_builder | having (const std::string &condition) const |
| HAVING clause - filters grouped results. | |
| std::string | build () const |
| Builds the final SQL query string. | |
| std::string | build_for_database (database_types db_type) const |
| Builds the SQL query for a specific database type. | |
Private Member Functions | |
| immutable_query_builder (std::string table, std::vector< std::string > select_fields, std::vector< query_condition > conditions, std::vector< std::pair< std::string, sort_order > > order_by, std::optional< uint32_t > limit, std::optional< uint32_t > offset, std::vector< std::tuple< std::string, std::string, join_type > > joins, std::vector< std::string > group_by_fields, std::string having_clause) | |
| std::string | escape_identifier (const std::string &identifier, database_types db_type) const |
| std::string | format_value (const core::database_value &value, database_types db_type) const |
| std::string | join_type_to_string (join_type type) const |
Private Attributes | |
| const std::string | table_ |
| const std::vector< std::string > | select_fields_ |
| const std::vector< query_condition > | conditions_ |
| const std::vector< std::pair< std::string, sort_order > > | order_by_ |
| const std::optional< uint32_t > | limit_ |
| const std::optional< uint32_t > | offset_ |
| const std::vector< std::tuple< std::string, std::string, join_type > > | joins_ |
| const std::vector< std::string > | group_by_fields_ |
| const std::string | having_clause_ |
Thread-safe immutable query builder using functional programming style.
Definition at line 43 of file immutable_query_builder.h.
|
explicit |
Constructs a new immutable query builder.
| table | Table name for the query. |
Definition at line 12 of file immutable_query_builder.cpp.
Referenced by group_by(), having(), join(), limit(), offset(), order_by(), select(), where(), and where().

|
private |
Definition at line 26 of file immutable_query_builder.cpp.
| std::string database::immutable_query_builder::build | ( | ) | const |
Builds the final SQL query string.
Thread-safe: No state modification, all fields are const.
Definition at line 196 of file immutable_query_builder.cpp.
References build_for_database(), and database::postgres.
Referenced by TEST_F().


| std::string database::immutable_query_builder::build_for_database | ( | database_types | db_type | ) | const |
Builds the SQL query for a specific database type.
| db_type | Database type (PostgreSQL, SQLite, etc.). |
Definition at line 201 of file immutable_query_builder.cpp.
References database::asc, conditions_, escape_identifier(), group_by_fields_, having_clause_, join_type_to_string(), joins_, limit_, offset_, order_by_, select_fields_, and table_.
Referenced by build().


|
private |
Definition at line 290 of file immutable_query_builder.cpp.
References database::postgres, and database::sqlite.
Referenced by build_for_database().

|
private |
Definition at line 303 of file immutable_query_builder.cpp.
| immutable_query_builder database::immutable_query_builder::group_by | ( | std::vector< std::string > | fields | ) | const |
GROUP BY clause - groups results.
| fields | Fields to group by. |
Definition at line 166 of file immutable_query_builder.cpp.
References conditions_, having_clause_, immutable_query_builder(), joins_, limit_, offset_, order_by_, select_fields_, and table_.

| immutable_query_builder database::immutable_query_builder::having | ( | const std::string & | condition | ) | const |
HAVING clause - filters grouped results.
| condition | Condition for filtering groups. |
Definition at line 181 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, immutable_query_builder(), joins_, limit_, offset_, order_by_, select_fields_, and table_.

| immutable_query_builder database::immutable_query_builder::join | ( | const std::string & | table, |
| const std::string & | condition, | ||
| join_type | type = join_type::inner ) const |
JOIN clause - adds a join.
| table | Table to join. |
| condition | Join condition. |
| type | Join type (inner, left, right, etc.). |
Definition at line 148 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, limit_, offset_, order_by_, select_fields_, and table_.

|
private |
Definition at line 340 of file immutable_query_builder.cpp.
References database::cross, database::full_outer, database::inner, database::left, and database::right.
Referenced by build_for_database().

| immutable_query_builder database::immutable_query_builder::limit | ( | uint32_t | count | ) | const |
LIMIT clause - limits number of results.
| count | Maximum number of rows to return. |
Definition at line 118 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, offset_, order_by_, select_fields_, and table_.

| immutable_query_builder database::immutable_query_builder::offset | ( | uint32_t | count | ) | const |
OFFSET clause - skips rows.
| count | Number of rows to skip. |
Definition at line 133 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, limit_, order_by_, select_fields_, and table_.

| immutable_query_builder database::immutable_query_builder::order_by | ( | const std::string & | field, |
| sort_order | order = sort_order::asc ) const |
ORDER BY clause - specifies sorting.
| field | Field name to sort by. |
| order | Sort order (asc or desc). |
Definition at line 100 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, limit_, offset_, order_by_, select_fields_, and table_.

| immutable_query_builder database::immutable_query_builder::select | ( | std::vector< std::string > | fields | ) | const |
SELECT clause - specifies which columns to select.
| fields | Vector of column names to select. |
Definition at line 49 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, limit_, offset_, order_by_, and table_.

| immutable_query_builder database::immutable_query_builder::where | ( | const query_condition & | condition | ) | const |
WHERE clause - adds a query_condition.
| condition | Pre-built query_condition. |
Definition at line 82 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, limit_, offset_, order_by_, select_fields_, and table_.

| immutable_query_builder database::immutable_query_builder::where | ( | const std::string & | field, |
| const std::string & | op, | ||
| const core::database_value & | value ) const |
WHERE clause - adds a condition.
| field | Field name. |
| op | Operator (e.g., "=", ">", "<", "LIKE"). |
| value | Value to compare against. |
Definition at line 64 of file immutable_query_builder.cpp.
References conditions_, group_by_fields_, having_clause_, immutable_query_builder(), joins_, limit_, offset_, order_by_, select_fields_, and table_.

|
private |
Definition at line 139 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), limit(), offset(), order_by(), select(), where(), and where().
|
private |
Definition at line 144 of file immutable_query_builder.h.
Referenced by build_for_database(), having(), join(), limit(), offset(), order_by(), select(), where(), and where().
|
private |
Definition at line 145 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), join(), limit(), offset(), order_by(), select(), where(), and where().
|
private |
Definition at line 143 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), limit(), offset(), order_by(), select(), where(), and where().
|
private |
Definition at line 141 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), offset(), order_by(), select(), where(), and where().
|
private |
Definition at line 142 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), limit(), order_by(), select(), where(), and where().
|
private |
Definition at line 140 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), limit(), offset(), order_by(), select(), where(), and where().
|
private |
Definition at line 138 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), limit(), offset(), order_by(), where(), and where().
|
private |
Definition at line 137 of file immutable_query_builder.h.
Referenced by build_for_database(), group_by(), having(), join(), limit(), offset(), order_by(), select(), where(), and where().