sqler.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #pragma once
  2. #include "base/error.h"
  3. #include "mysql.h"
  4. #include <any>
  5. namespace ylib
  6. {
  7. struct where {
  8. std::string name;
  9. std::string expression;
  10. std::any value;
  11. // 0=普通 1=Like 2=自定义
  12. int type = 0;
  13. };
  14. struct limit {
  15. int64 start = -1;
  16. int64 count = -1;
  17. };
  18. struct keyvalue {
  19. std::string name;
  20. std::any value;
  21. int extra = 0;
  22. };
  23. /// <summary>
  24. /// MYSQL SELECT 查询器
  25. /// </summary>
  26. class select :public ylib::error_base {
  27. public:
  28. select(mysql::conn* conn);
  29. ~select();
  30. /// <summary>
  31. /// 表名
  32. /// </summary>
  33. /// <param name="field"></param>
  34. /// <returns></returns>
  35. select& table(const std::string& table_name);
  36. /// <summary>
  37. /// 查询字段
  38. /// </summary>
  39. /// <param name="field"></param>
  40. /// <param name="sort"></param>
  41. /// <returns></returns>
  42. select& field(const std::vector<std::string>& field);
  43. /// <summary>
  44. /// 条件[A=B]
  45. /// </summary>
  46. select& where(const std::string& name, const std::string& expression, const std::any& value);
  47. /// <summary>
  48. /// 条件[模糊查询]
  49. /// </summary>
  50. select& where_like(const std::string& name, const std::string& value);
  51. /// <summary>
  52. /// 条件[自定义]
  53. /// </summary>
  54. select& where(const std::string& expression);
  55. /// <summary>
  56. /// LIMIT[页]
  57. /// </summary>
  58. select& page(uint32 page, uint32 count);
  59. /// <summary>
  60. /// LIMIT
  61. /// </summary>
  62. select& limit(uint32 start, uint32 count);
  63. /// <summary>
  64. /// 排序
  65. /// </summary>
  66. select& orderby(const std::string& expression);
  67. /// <summary>
  68. /// 查询数量
  69. /// </summary>
  70. /// <returns></returns>
  71. uint64 count();
  72. /// <summary>
  73. /// 查询
  74. /// </summary>
  75. ylib::mysql::result* query();
  76. void clear();
  77. #if 0
  78. /// <summary>
  79. /// 查询转换为layui需求模板
  80. /// </summary>
  81. /// <returns></returns>
  82. ylib::json query_layui();
  83. #endif
  84. private:
  85. /// <summary>
  86. /// 生成SQL片段
  87. /// </summary>
  88. /// <param name="field_name"></param>
  89. /// <param name="where"></param>
  90. /// <param name="orderby"></param>
  91. /// <param name="limit"></param>
  92. void make_sql(std::string& field_name, std::string& where, std::string& orderby, std::string& limit, std::vector<std::any>& insert_values);
  93. public:
  94. mysql::conn* m_conn = nullptr;
  95. private:
  96. std::vector<ylib::where> m_wheres;
  97. std::string m_table_name;
  98. std::vector<std::string> m_fields;
  99. ylib::limit m_limit;
  100. std::string m_orderby;
  101. };
  102. /// <summary>
  103. /// MYSQL UPDATE
  104. /// </summary>
  105. class update :public ylib::error_base {
  106. struct set {
  107. std::string name;
  108. std::any value;
  109. std::string expression;
  110. // 0=普通 1=表达式
  111. int type = 0;
  112. };
  113. public:
  114. update(mysql::conn* conn);
  115. ~update();
  116. /// <summary>
  117. /// 表名
  118. /// </summary>
  119. /// <param name="field"></param>
  120. /// <returns></returns>
  121. update& table(const std::string& table_name);
  122. /// <summary>
  123. /// 更新
  124. /// </summary>
  125. update& set(const std::string& name, const std::any& value);
  126. update& set(const std::string& expression);
  127. /// <summary>
  128. /// 条件[A=B]
  129. /// </summary>
  130. update& where(const std::string& name, const std::string& expression, const std::any& value);
  131. /// <summary>
  132. /// 条件[模糊查询]
  133. /// </summary>
  134. update& where_like(const std::string& name, const std::string& value);
  135. /// <summary>
  136. /// 条件[自定义]
  137. /// </summary>
  138. update& where(const std::string& expression);
  139. /// <summary>
  140. /// LIMIT[页]
  141. /// </summary>
  142. update& page(uint32 page, uint32 count);
  143. /// <summary>
  144. /// LIMIT
  145. /// </summary>
  146. update& limit(uint32 start, uint32 count);
  147. /// <summary>
  148. /// 排序
  149. /// </summary>
  150. update& orderby(const std::string& expression);
  151. /// <summary>
  152. /// 查询
  153. /// </summary>
  154. uint64 exec();
  155. void clear();
  156. private:
  157. /// <summary>
  158. /// 生成SQL片段
  159. /// </summary>
  160. /// <param name="set"></param>
  161. /// <param name="where"></param>
  162. /// <param name="orderby"></param>
  163. /// <param name="limit"></param>
  164. void make_sql(std::string& set, std::string& where, std::string& orderby, std::string& limit, std::vector<std::any>& insert_values);
  165. private:
  166. public:
  167. mysql::conn* m_conn = nullptr;
  168. private:
  169. std::vector<ylib::where> m_wheres;
  170. std::string m_table_name;
  171. std::vector<struct ylib::update::set> m_sets;
  172. ylib::limit m_limit;
  173. std::string m_orderby;
  174. };
  175. /// <summary>
  176. /// MYSQL INSERT
  177. /// </summary>
  178. class insert :public ylib::error_base {
  179. public:
  180. insert(mysql::conn* conn);
  181. ~insert();
  182. /// <summary>
  183. /// 表名
  184. /// </summary>
  185. /// <param name="field"></param>
  186. /// <returns></returns>
  187. insert& table(const std::string& table_name);
  188. /// <summary>
  189. /// 更新
  190. /// </summary>
  191. insert& set(const std::string& name, const std::any& value);
  192. insert& set_not_pret(const std::string& name, const std::string& value);
  193. /// <summary>
  194. /// 查询
  195. /// </summary>
  196. uint64 exec();
  197. void clear();
  198. public:
  199. mysql::conn* m_conn = nullptr;
  200. private:
  201. std::string m_table_name;
  202. std::vector<keyvalue> m_sets;
  203. };
  204. /// <summary>
  205. /// MYSQL DELETE
  206. /// </summary>
  207. class delete_ :public ylib::error_base {
  208. public:
  209. delete_(mysql::conn* conn);
  210. ~delete_();
  211. /// <summary>
  212. /// 表名
  213. /// </summary>
  214. /// <param name="field"></param>
  215. /// <returns></returns>
  216. delete_& table(const std::string& table_name);
  217. /// <summary>
  218. /// 条件[A=B]
  219. /// </summary>
  220. delete_& where(const std::string& name, const std::string& expression, const std::any& value);
  221. /// <summary>
  222. /// 条件[模糊查询]
  223. /// </summary>
  224. delete_& where_like(const std::string& name, const std::string& value);
  225. /// <summary>
  226. /// 条件[自定义]
  227. /// </summary>
  228. delete_& where(const std::string& expression);
  229. /// <summary>
  230. /// LIMIT[页]
  231. /// </summary>
  232. delete_& page(uint32 page, uint32 count);
  233. /// <summary>
  234. /// LIMIT
  235. /// </summary>
  236. delete_& limit(uint32 start, uint32 count);
  237. /// <summary>
  238. /// 排序
  239. /// </summary>
  240. delete_& orderby(const std::string& expression);
  241. /// <summary>
  242. /// 查询
  243. /// </summary>
  244. uint64 exec();
  245. void clear();
  246. private:
  247. /// <summary>
  248. /// 生成SQL片段
  249. /// </summary>
  250. /// <param name="where"></param>
  251. /// <param name="orderby"></param>
  252. /// <param name="limit"></param>
  253. void make_sql(std::string& where, std::string& orderby, std::string& limit, std::vector<std::any>& insert_values);
  254. public:
  255. mysql::conn* m_conn = nullptr;
  256. private:
  257. std::vector<ylib::where> m_wheres;
  258. std::string m_table_name;
  259. ylib::limit m_limit;
  260. std::string m_orderby;
  261. };
  262. }