1#ifndef NEFORCE_DATABASE_SQL_BUILDER_HPP__
2#define NEFORCE_DATABASE_SQL_BUILDER_HPP__
14NEFORCE_BEGIN_NAMESPACE__
291 size_t param_seq_ = 0;
297 bool drop_if_exists_ =
false;
316 void clear_data() noexcept;
318 NEFORCE_NODISCARD
string make_placeholder(
size_t index) const;
980 static string make_cast(
string expression,
string target_type);
1381 NEFORCE_NODISCARD
bool is_empty() const noexcept {
return table_.empty(); }
1409 NEFORCE_NODISCARD
size_t param_count() const noexcept {
return param_seq_; }
1417 NEFORCE_NODISCARD
string placeholder(
const size_t index)
const {
return make_placeholder(index); }
1450NEFORCE_END_NAMESPACE__
constexpr basic_string_view view(const size_type off, const size_type count=npos) const
获取子视图
sql_builder & distinct()
添加DISTINCT关键字
sql_builder & where_eq(string field, string value)
添加相等条件
sql_builder & select_first_value(string field, string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加FIRST_VALUE窗口函数
sql_builder & from(string table) noexcept
设置主表
sql_builder & add_column(string name, string type)
添加列(ALTER TABLE ADD COLUMN)
sql_builder & column_default(string name, string type, string default_val)
添加带DEFAULT值的列定义
sql_builder & right_join(string table, string on_condition)
添加RIGHT JOIN子句
bool is_empty() const noexcept
检查构建器是否为空
sql_builder & where_lt(string field, string value)
添加小于条件
sql_builder & intersect_all(string query)
添加INTERSECT ALL集合操作
sql_builder & alter_table(string table)
修改表
sql_builder & column_not_null(string name, string type)
添加带NOT NULL约束的列定义
sql_builder & select_sum(string field)
添加SUM聚合函数(无别名)
static string make_cast(string expression, string target_type)
构建CAST类型转换表达式
sql_builder & create_unique_index(string index_name, string table, vector< string > columns)
创建唯一索引(CREATE UNIQUE INDEX)
sql_builder & select_lead(string field, string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加LEAD窗口函数
sql_builder & where_le(string field, string value)
添加小于等于条件
sql_builder & table_foreign_key(string column, string ref_table, string ref_column)
添加表级FOREIGN KEY约束
sql_builder & order_by_asc(string field)
添加升序排序
sql_builder & set_param(string field)
添加 SET 赋值
sql_builder & table_check(string expr)
添加表级CHECK约束
sql_builder & where_gt(string field, string value)
添加大于条件
sql_builder & union_(string query)
添加UNION集合操作
sql_builder & reset() noexcept
重置构建器状态
string_view table() const noexcept
获取当前表名
sql_builder & column_auto_increment(string name, string type)
添加自增主键列定义(事实标准:AUTO_INCREMENT)
sql_builder & with_(string name, string query)
添加CTE(WITH子句)
sql_builder & create_or_replace_view(string view_name, string select_query)
创建视图(OR REPLACE)
sql_builder & select_max(string field)
添加MAX聚合函数(无别名)
sql_builder & order_by_desc(string field)
添加降序排序
sql_builder & create_view(string view_name, string select_query)
创建视图
sql_builder & select_max(string field, string alias)
添加MAX聚合函数(带别名)
sql_builder & where_ge(string field, string value)
添加大于等于条件
sql_builder & group_by_rollup(vector< string > fields)
添加GROUP BY ROLLUP子句
sql_builder & column(string name, string type)
添加基础列定义
sql_builder & select_count(string field, string alias)
添加COUNT聚合函数(带别名)
sql_builder & columns(vector< string > fields)
设置INSERT字段列表
sql_builder()=default
默认构造函数
sql_builder & truncate(string table)
截断表(TRUNCATE TABLE)
sql_builder & add_primary_key(vector< string > columns)
添加主键约束(ALTER TABLE ADD PRIMARY KEY)
sql_builder & page(int page_num, int page_size)
添加分页
sql_builder & select_count(string field)
添加COUNT聚合函数(无别名)
sql_builder & union_all(string query)
添加UNION ALL集合操作
sql_builder & cross_join(string table)
添加CROSS JOIN子句
sql_builder & select_subquery(string subquery)
添加子查询作为SELECT字段(无别名)
sql_builder & set_dialect(const sql_dialect dialect) noexcept
设置数据库方言
sql_builder & where_in(string field, vector< string > values)
添加IN条件
sql_builder & create_table(string table)
创建表
sql_builder & table_unique(vector< string > columns)
添加表级UNIQUE约束
sql_builder & select_ntile(int buckets, string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加NTILE窗口函数
sql_builder & column_unique(string name, string type)
添加带UNIQUE约束的列定义
sql_builder & column_check(string name, string type, string check_expr)
添加带CHECK约束的列定义
sql_builder & intersect(string query)
添加INTERSECT集合操作
sql_builder & create_index(string index_name, string table, vector< string > columns)
创建索引(CREATE INDEX)
sql_builder & alter_column_drop_default(string name)
删除列默认值(ALTER TABLE ALTER COLUMN DROP DEFAULT)
sql_builder & except_all(string query)
添加EXCEPT ALL集合操作
sql_builder & where_like(string field, string pattern)
添加LIKE条件
sql_builder & where_not_exists(string subquery)
添加NOT EXISTS条件
sql_builder & add_values(vector< string > values)
追加一行VALUES(用于多行INSERT)
static string make_case_simple(string field, vector< pair< string, string > > when_then, string else_val="")
构建简单CASE表达式(CASE field WHEN ... THEN ... ELSE ... END)
sql_builder & group_by_cube(vector< string > fields)
添加GROUP BY CUBE子句
string placeholder(const size_t index) const
生成方言感知的参数占位符
sql_builder & rename_column(string old_name, string new_name)
重命名列(ALTER TABLE RENAME COLUMN)
sql_builder & drop_view_if_exists(string view_name)
删除视图(IF EXISTS)
sql_builder & where_exists(string subquery)
添加EXISTS条件
sql_builder & where_is_not_null(string field)
添加IS NOT NULL条件
sql_builder & drop_index_if_exists(string index_name)
删除索引(DROP INDEX IF EXISTS)
sql_builder & group_by(string field)
添加GROUP BY字段
sql_builder & alter_column_set_not_null(string name)
设置列非空约束(ALTER TABLE ALTER COLUMN SET NOT NULL)
sql_builder & where_is_null(string field)
添加IS NULL条件
sql_builder & select_min(string field)
添加MIN聚合函数(无别名)
sql_builder & order_by(string field, sql_order order=sql_order::ASC)
添加ORDER BY子句
sql_operate type() const noexcept
获取当前SQL操作类型
sql_builder & select_distinct(string field)
添加DISTINCT字段
sql_builder & except_(string query)
添加EXCEPT集合操作
sql_builder & where_not_like(string field, string pattern)
添加NOT LIKE条件
sql_builder & drop_view(string view_name)
删除视图
sql_builder & drop_table(string table)
删除表
sql_builder & remove()
设置DELETE操作
sql_builder & select_subquery(string subquery, string alias)
添加子查询作为SELECT字段
sql_builder & set_increment(string field, int value=1)
添加自增赋值
sql_builder & create_temp_table_if_not_exists(string table)
创建临时表(TEMP TABLE IF NOT EXISTS)
sql_builder & values(vector< string > values)
设置VALUES占位符
static string make_case_searched(vector< pair< string, string > > when_then, string else_val="")
构建搜索CASE表达式(CASE WHEN condition THEN ... ELSE ... END)
sql_builder & where(string condition)
添加WHERE条件
sql_builder & set_decrement(string field, int value=1)
添加自减赋值
sql_builder & offset(int count)
添加OFFSET偏移
string build() const
构建最终的SQL语句
sql_builder & select_min(string field, string alias)
添加MIN聚合函数(带别名)
sql_builder & select_all() noexcept
选择所有字段(SELECT *)
sql_builder & select_sum(string field, string alias)
添加SUM聚合函数(带别名)
sql_builder & left_join(string table, string on_condition)
添加LEFT JOIN子句
sql_builder & select_count()
添加COUNT(*)聚合函数
sql_builder & select_rank(string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加RANK窗口函数
sql_builder & fetch_first(int row_count)
添加FETCH FIRST分页
sql_builder & from_subquery(string subquery, string alias)
使用子查询作为FROM表
sql_builder & select_lag(string field, string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加LAG窗口函数
sql_builder & drop_index(string index_name)
删除索引(DROP INDEX)
sql_builder & select_avg(string field, string alias)
添加AVG聚合函数(带别名)
sql_builder & alter_column_set_default(string name, string default_val)
设置列默认值(ALTER TABLE ALTER COLUMN SET DEFAULT)
sql_builder & select_row_number(string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加ROW_NUMBER窗口函数
sql_builder & or_where(string condition)
添加OR条件(与上一个条件组合)
sql_builder & select(vector< string > fields)
列表设置SELECT字段
sql_builder & column_primary_key(string name, string type)
添加PRIMARY KEY列定义
size_t param_count() const noexcept
获取当前语句的参数占位符数量
string next_placeholder()
获取下一个参数占位符
sql_builder & update(string table)
设置UPDATE表名
sql_builder & having(string condition)
添加HAVING条件
sql_builder & where_between(string field, string start, string end)
添加BETWEEN条件
sql_builder & select_avg(string field)
添加AVG聚合函数(无别名)
sql_builder & full_join(string table, string on_condition)
添加FULL JOIN子句
sql_builder & delete_from(string table)
设置DELETE FROM表名
sql_builder & alter_column_drop_not_null(string name)
删除列非空约束(ALTER TABLE ALTER COLUMN DROP NOT NULL)
sql_builder & drop_table_if_exists(string table)
删除表(IF EXISTS)
sql_builder & select_dense_rank(string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加DENSE_RANK窗口函数
sql_builder & insert_into(string table, vector< string > fields)
设置INSERT INTO表名和字段
sql_builder & drop_constraint(string constraint_name)
删除约束(ALTER TABLE DROP CONSTRAINT)
sql_builder & create_table_if_not_exists(string table)
创建表(IF NOT EXISTS)
sql_builder & drop_column(string name)
删除列(ALTER TABLE DROP COLUMN)
sql_builder & with_recursive(string name, string query)
添加递归CTE(WITH RECURSIVE子句)
sql_builder & inner_join(string table, string on_condition)
添加INNER JOIN子句
sql_builder & where_not_between(string field, string start, string end)
添加NOT BETWEEN条件
sql_builder & table_primary_key(vector< string > columns)
添加表级PRIMARY KEY约束
sql_builder & select_last_value(string field, string alias, const vector< string > &partition_by={}, const vector< string > &order_by={})
添加LAST_VALUE窗口函数
sql_builder & limit(int count)
添加LIMIT限制
sql_builder & set(string assignment)
添加SET赋值
sql_builder & where_not_in(string field, vector< string > values)
添加NOT IN条件
sql_builder & join(sql_join type, string table, string on_condition)
添加JOIN子句
sql_builder & alter_column_set_type(string name, string new_type)
修改列数据类型(ALTER TABLE ALTER COLUMN SET DATA TYPE)
sql_builder & create_temp_table(string table)
创建临时表(TEMP TABLE)
sql_builder & where_ne(string field, string value)
添加不等条件
sql_dialect dialect() const noexcept
获取当前数据库方言
unsigned char uint8_t
8位无符号整数类型
constexpr iter_difference_t< Iterator > count(Iterator first, Iterator last, const T &value)
统计范围内等于指定值的元素数量
@ POSTGRESQL
PostgreSQL数据库
@ INTERSECT_ALL
INTERSECT ALL
@ TRUNCATE
TRUNCATE TABLE截断表
@ CREATE_VIEW
CREATE VIEW创建视图
@ DROP_INDEX
DROP INDEX删除索引
@ DROP_TABLE
DROP TABLE删除表
@ CREATE_TABLE
CREATE TABLE建表
@ ALTER_TABLE
ALTER TABLE修改表
@ CREATE_INDEX
CREATE INDEX创建索引
@ MSSQL
Microsoft SQL Server
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
constexpr decltype(auto) end(Container &cont) noexcept(noexcept(cont.end()))
获取容器的结束迭代器
vector< string > actions
预组装的ALTER操作子句
bool primary_key
PRIMARY KEY约束
string check_expr
CHECK表达式
string default_value
DEFAULT值
bool auto_increment
AUTO_INCREMENT(事实标准)
vector< string > columns
列列表
bool temporary
是否创建临时表(TEMP TABLE)
bool if_not_exists
是否使用IF NOT EXISTS
vector< string > table_constraints
表级约束(预组装的SQL子句)
vector< column_definition > columns
列定义列表
bool or_replace
是否使用OR REPLACE
vector< string > fields
插入字段列表
vector< vector< string > > extra_rows
额外的多行VALUES(用于批量插入)
vector< string > rollup_fields
GROUP BY ROLLUP字段列表
vector< string > fields
查询字段列表
int fetch_count
FETCH FIRST 行数(SQL:2008分页)
vector< string > join_clauses
JOIN子句列表
vector< string > cube_fields
GROUP BY CUBE字段列表
vector< string > group_by_fields
GROUP BY字段列表
vector< string > having_conditions
HAVING条件列表
vector< string > order_by_clauses
ORDER BY子句列表
vector< string > assignments
赋值表达式列表