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
13NEFORCE_BEGIN_NAMESPACE__
14
46
47#ifdef DELETE
48# undef DELETE
49#endif
50
61
72
77enum class sql_order {
80};
81
82
94class NEFORCE_API sql_builder {
95public:
110
119
127
128private:
129 sql_operate sql_type_ = sql_operate::SELECT;
130 string table_;
131 string table_alias_;
132 vector<string> where_conditions_;
133
134 unique_ptr<select_data> select_data_;
135 unique_ptr<insert_data> insert_data_;
136 unique_ptr<update_data> update_data_;
137
138private:
139 select_data* ensure_select_data();
140 insert_data* ensure_insert_data();
141 update_data* ensure_update_data();
142
143 void clear_data() noexcept;
144
145public:
149 sql_builder() = default;
150
154 ~sql_builder() = default;
155
161
167 sql_builder& operator=(const sql_builder& other);
168
169 sql_builder(sql_builder&&) noexcept = default;
170 sql_builder& operator=(sql_builder&&) noexcept = default;
171
177 sql_builder& select(vector<string> fields);
178
184 sql_builder& select(std::initializer_list<string> fields);
185
191 sql_builder& select(string field);
192
198
204
210 sql_builder& from(string table) noexcept;
211
218 sql_builder& from(string table, string alias) noexcept;
219
227 sql_builder& join(sql_join type, string table, string on_condition);
228
235 sql_builder& join(string table, string on_condition);
236
243 sql_builder& left_join(string table, string on_condition);
244
251 sql_builder& right_join(string table, string on_condition);
252
259 sql_builder& inner_join(string table, string on_condition);
260
267 sql_builder& full_join(string table, string on_condition);
268
274 sql_builder& where(string condition);
275
282 sql_builder& where_eq(string field, string value);
283
290 sql_builder& where_ne(string field, string value);
291
298 sql_builder& where_gt(string field, string value);
299
306 sql_builder& where_ge(string field, string value);
307
314 sql_builder& where_lt(string field, string value);
315
322 sql_builder& where_le(string field, string value);
323
330 sql_builder& where_like(string field, string pattern);
331
338 sql_builder& where_not_like(string field, string pattern);
339
346 sql_builder& where_in(string field, vector<string> values);
347
354 sql_builder& where_not_in(string field, vector<string> values);
355
363 sql_builder& where_between(string field, string start, string end);
364
372 sql_builder& where_not_between(string field, string start, string end);
373
380
387
393 sql_builder& where_exists(string subquery);
394
400 sql_builder& where_not_exists(string subquery);
401
409 sql_builder& or_where(string condition);
410
416 sql_builder& group_by(string field);
417
423 sql_builder& group_by(const vector<string>& fields);
424
430 sql_builder& having(string condition);
431
438 sql_builder& order_by(string field, sql_order order = sql_order::ASC);
439
445 sql_builder& order_by_asc(string field);
446
453
460
467
474 sql_builder& page(int page_num, int page_size);
475
482 sql_builder& insert_into(string table, vector<string> fields);
483
490
497
503 sql_builder& columns(vector<string> fields);
504
511
517 sql_builder& set(string assignment);
518
525 sql_builder& set(string field, string value);
526
533 sql_builder& set_increment(string field, int value = 1);
534
541 sql_builder& set_decrement(string field, int value = 1);
542
548
555
556 sql_builder& select_count(string field, string alias);
557 sql_builder& select_count(string field);
559
560 sql_builder& select_sum(string field, string alias);
561 sql_builder& select_sum(string field);
562
563 sql_builder& select_avg(string field, string alias);
564 sql_builder& select_avg(string field);
565
566 sql_builder& select_max(string field, string alias);
567 sql_builder& select_max(string field);
568
569 sql_builder& select_min(string field, string alias);
570 sql_builder& select_min(string field);
571
578
585 sql_builder& select_subquery(string subquery, string alias);
586
592 sql_builder& select_subquery(string subquery);
593
600 sql_builder& from_subquery(string subquery, string alias);
601
606 sql_builder& reset() noexcept;
607
612 NEFORCE_NODISCARD sql_operate type() const noexcept { return sql_type_; }
613
618 NEFORCE_NODISCARD string_view table() const noexcept { return table_.view(); }
619
624 NEFORCE_NODISCARD bool is_empty() const noexcept { return table_.empty(); }
625
633 NEFORCE_NODISCARD string build() const;
634};
635 // SQL
637
638NEFORCE_END_NAMESPACE__
639#endif // NEFORCE_DATABASE_SQL_BUILDER_HPP__
NEFORCE_NODISCARD constexpr basic_string_view view(const size_type off, 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子句
NEFORCE_NODISCARD sql_operate type() const noexcept
获取当前SQL操作类型
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
设置主表
NEFORCE_NODISCARD string build() const
构建最终的SQL语句
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条件
sql_builder & where_lt(string field, string value)
添加小于条件
sql_builder & order_by_desc(string field)
添加降序排序
sql_builder & select_distinct(string field)
添加DISTINCT字段
NEFORCE_NODISCARD bool is_empty() const noexcept
检查构建器是否为空
NEFORCE_NODISCARD string_view table() const noexcept
获取当前表名
sql_builder & distinct()
添加DISTINCT关键字
sql_builder & group_by(string field)
添加GROUP BY字段
sql_builder & where(string condition)
添加WHERE条件
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)
添加小于等于条件
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
字符字符串视图
NEFORCE_NODISCARD NEFORCE_ALWAYS_INLINE 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
赋值表达式列表
独占智能指针
动态大小数组容器