NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
sql_builder.hpp
浏览该文件的文档.
1#ifndef NEFORCE_DATABASE_SQL_BUILDER_HPP__
2#define NEFORCE_DATABASE_SQL_BUILDER_HPP__
3
10
14NEFORCE_BEGIN_NAMESPACE__
15
47
48#ifdef DELETE
49# undef DELETE
50#endif
51
62
73
78enum class sql_order {
81};
82
83
95class NEFORCE_API sql_builder {
96public:
111
120
128
129private:
130 sql_operate sql_type_ = sql_operate::SELECT;
131 string table_;
132 string table_alias_;
133 vector<string> where_conditions_;
134
135 unique_ptr<select_data> select_data_;
136 unique_ptr<insert_data> insert_data_;
137 unique_ptr<update_data> update_data_;
138
139private:
140 select_data* ensure_select_data();
141 insert_data* ensure_insert_data();
142 update_data* ensure_update_data();
143
144 void clear_data() noexcept;
145
146public:
150 sql_builder() = default;
151
155 ~sql_builder() = default;
156
162
168 sql_builder& operator=(const sql_builder& other);
169
170 sql_builder(sql_builder&&) noexcept = default;
171 sql_builder& operator=(sql_builder&&) noexcept = default;
172
178 sql_builder& select(vector<string> fields);
179
185 sql_builder& select(std::initializer_list<string> fields);
186
192 sql_builder& select(string field);
193
199
205
211 sql_builder& from(string table) noexcept;
212
219 sql_builder& from(string table, string alias) noexcept;
220
228 sql_builder& join(sql_join type, string table, string on_condition);
229
236 sql_builder& join(string table, string on_condition);
237
244 sql_builder& left_join(string table, string on_condition);
245
252 sql_builder& right_join(string table, string on_condition);
253
260 sql_builder& inner_join(string table, string on_condition);
261
268 sql_builder& full_join(string table, string on_condition);
269
275 sql_builder& where(string condition);
276
283 sql_builder& where_eq(string field, string value);
284
291 sql_builder& where_ne(string field, string value);
292
299 sql_builder& where_gt(string field, string value);
300
307 sql_builder& where_ge(string field, string value);
308
315 sql_builder& where_lt(string field, string value);
316
323 sql_builder& where_le(string field, string value);
324
331 sql_builder& where_like(string field, string pattern);
332
339 sql_builder& where_not_like(string field, string pattern);
340
347 sql_builder& where_in(string field, vector<string> values);
348
355 sql_builder& where_not_in(string field, vector<string> values);
356
364 sql_builder& where_between(string field, string start, string end);
365
373 sql_builder& where_not_between(string field, string start, string end);
374
381
388
394 sql_builder& where_exists(string subquery);
395
401 sql_builder& where_not_exists(string subquery);
402
410 sql_builder& or_where(string condition);
411
417 sql_builder& group_by(string field);
418
424 sql_builder& group_by(const vector<string>& fields);
425
431 sql_builder& having(string condition);
432
439 sql_builder& order_by(string field, sql_order order = sql_order::ASC);
440
446 sql_builder& order_by_asc(string field);
447
454
461
468
475 sql_builder& page(int page_num, int page_size);
476
483 sql_builder& insert_into(string table, vector<string> fields);
484
491
498
504 sql_builder& columns(vector<string> fields);
505
512
518 sql_builder& set(string assignment);
519
526 sql_builder& set(string field, string value);
527
534 sql_builder& set_increment(string field, int value = 1);
535
542 sql_builder& set_decrement(string field, int value = 1);
543
549
556
557 sql_builder& select_count(string field, string alias);
558 sql_builder& select_count(string field);
560
561 sql_builder& select_sum(string field, string alias);
562 sql_builder& select_sum(string field);
563
564 sql_builder& select_avg(string field, string alias);
565 sql_builder& select_avg(string field);
566
567 sql_builder& select_max(string field, string alias);
568 sql_builder& select_max(string field);
569
570 sql_builder& select_min(string field, string alias);
571 sql_builder& select_min(string field);
572
579
586 sql_builder& select_subquery(string subquery, string alias);
587
593 sql_builder& select_subquery(string subquery);
594
601 sql_builder& from_subquery(string subquery, string alias);
602
607 sql_builder& reset() noexcept;
608
613 NEFORCE_NODISCARD sql_operate type() const noexcept { return sql_type_; }
614
619 NEFORCE_NODISCARD string_view table() const noexcept { return table_.view(); }
620
625 NEFORCE_NODISCARD bool is_empty() const noexcept { return table_.empty(); }
626
634 NEFORCE_NODISCARD string build() const;
635};
636 // SQL
638
639NEFORCE_END_NAMESPACE__
640#endif // NEFORCE_DATABASE_SQL_BUILDER_HPP__
constexpr basic_string_view view(const size_type off, const size_type count=npos) const
获取子视图
sql_builder & reset() noexcept
重置构建器状态
sql_builder & where_exists(string subquery)
添加EXISTS条件
sql_builder & columns(vector< string > fields)
设置INSERT字段列表
sql_builder & set_decrement(string field, int value=1)
添加自减赋值
sql_builder & delete_from(string table)
设置DELETE FROM表名
sql_builder & offset(int count)
添加OFFSET偏移
sql_builder & where_gt(string field, string value)
添加大于条件
sql_builder & select_subquery(string subquery, string alias)
添加子查询作为SELECT字段
sql_builder & inner_join(string table, string on_condition)
添加INNER JOIN子句
sql_builder & left_join(string table, string on_condition)
添加LEFT JOIN子句
sql_builder & select_sum(string field, string alias)
SUM聚合
sql_builder & remove()
设置DELETE操作
sql_builder & from(string table) noexcept
设置主表
sql_builder & where_in(string field, vector< string > values)
添加IN条件
sql_builder & insert_into(string table, vector< string > fields)
设置INSERT INTO表名和字段
sql_builder & set(string assignment)
添加SET赋值
sql_builder & select_avg(string field, string alias)
AVG聚合
sql_builder & where_not_in(string field, vector< string > values)
添加NOT IN条件
sql_builder & from_subquery(string subquery, string alias)
使用子查询作为FROM表
sql_builder & join(sql_join type, string table, string on_condition)
添加JOIN子句
sql_builder & select_all() noexcept
选择所有字段(SELECT *)
sql_builder & update(string table)
设置UPDATE表名
sql_builder & where_not_exists(string subquery)
添加NOT EXISTS条件
bool is_empty() const noexcept
检查构建器是否为空
sql_builder & where_lt(string field, string value)
添加小于条件
sql_operate type() const noexcept
获取当前SQL操作类型
sql_builder & order_by_desc(string field)
添加降序排序
sql_builder & select_distinct(string field)
添加DISTINCT字段
sql_builder & distinct()
添加DISTINCT关键字
sql_builder & group_by(string field)
添加GROUP BY字段
sql_builder & where(string condition)
添加WHERE条件
string_view table() const noexcept
获取当前表名
sql_builder & where_ge(string field, string value)
添加大于等于条件
sql_builder()=default
默认构造函数
sql_builder & select_min(string field, string alias)
MIN聚合
sql_builder & where_not_like(string field, string pattern)
添加NOT LIKE条件
sql_builder & where_le(string field, string value)
添加小于等于条件
string build() const
构建最终的SQL语句
sql_builder & select(vector< string > fields)
列表设置SELECT字段
sql_builder & right_join(string table, string on_condition)
添加RIGHT JOIN子句
sql_builder & where_eq(string field, string value)
添加相等条件
sql_builder & or_where(string condition)
添加OR条件(与上一个条件组合)
sql_builder & values(vector< string > values)
设置VALUES占位符
sql_builder & having(string condition)
添加HAVING条件
sql_builder & full_join(string table, string on_condition)
添加FULL JOIN子句
sql_builder & where_is_null(string field)
添加IS NULL条件
sql_builder & select_count(string field, string alias)
COUNT聚合
sql_builder & order_by(string field, sql_order order=sql_order::ASC)
添加ORDER BY子句
sql_builder & where_like(string field, string pattern)
添加LIKE条件
sql_builder & where_ne(string field, string value)
添加不等条件
sql_builder & where_is_not_null(string field)
添加IS NOT NULL条件
sql_builder & where_between(string field, string start, string end)
添加BETWEEN条件
sql_builder & select_max(string field, string alias)
MAX聚合
sql_builder & where_not_between(string field, string start, string end)
添加NOT BETWEEN条件
sql_builder & limit(int count)
添加LIMIT限制
sql_builder & order_by_asc(string field)
添加升序排序
sql_builder & set_increment(string field, int value=1)
添加自增赋值
sql_builder & page(int page_num, int page_size)
添加分页
独占智能指针
动态大小数组容器
constexpr iter_difference_t< Iterator > count(Iterator first, Iterator last, const T &value)
统计范围内等于指定值的元素数量
sql_order
排序方向枚举
sql_operate
SQL操作类型枚举
sql_join
JOIN类型枚举
@ UPDATE
UPDATE更新
@ DELETE
DELETE删除
@ INSERT
INSERT插入
@ SELECT
SELECT查询
@ RIGHT
RIGHT JOIN
@ LEFT
LEFT JOIN
@ FULL
FULL JOIN
@ INNER
INNER JOIN
basic_string_view< char > string_view
字符字符串视图
constexpr decltype(auto) end(Container &cont) noexcept(noexcept(cont.end()))
获取容器的结束迭代器
占位符预定义实例命名空间
字符串类型别名和实用函数
INSERT语句的数据结构
vector< string > fields
插入字段列表
SELECT语句的数据结构
vector< string > fields
查询字段列表
vector< string > having_conditions
HAVING条件列表
vector< string > group_by_fields
GROUP BY字段列表
vector< string > order_by_clauses
ORDER BY子句列表
vector< string > join_clauses
JOIN子句列表
UPDATE语句的数据结构
vector< string > assignments
赋值表达式列表
独占智能指针
动态大小数组容器