SqlComEnum.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. package jnpf.database.sql.enums.base;
  2. import jnpf.database.model.dto.PrepSqlDTO;
  3. import jnpf.database.model.interfaces.DbSourceOrDbLink;
  4. import jnpf.database.sql.enums.*;
  5. import lombok.AllArgsConstructor;
  6. import lombok.Getter;
  7. import java.util.ArrayList;
  8. import java.util.Arrays;
  9. import java.util.Collections;
  10. import java.util.List;
  11. /**
  12. * 通用 SQL语句模板
  13. *
  14. * @author JNPF开发平台组 YanYu
  15. * @version V3.3
  16. * @copyright 引迈信息技术有限公司
  17. * @date 2022/3/17
  18. */
  19. @Getter
  20. @AllArgsConstructor
  21. public enum SqlComEnum implements SqlFrameBase {
  22. /*
  23. * []:可选、<>:必填 《》:配置开关填写、{}:参数、【】:循环 N:(选择框架 =========================================
  24. */
  25. /* =============================== 系统语句 ==================================== */
  26. TABLES( SqlMySQLEnum.TABLES,
  27. SqlOracleEnum.TABLES,
  28. SqlSQLServerEnum.TABLES,
  29. SqlDMEnum.TABLES,
  30. SqlKingbaseESEnum.TABLES,
  31. SqlPostgreSQLEnum.TABLES
  32. ),
  33. TABLESANDVIEW( SqlMySQLEnum.TABLESANDVIEW,
  34. SqlOracleEnum.TABLESANDVIEW,
  35. SqlSQLServerEnum.TABLESANDVIEW,
  36. SqlDMEnum.TABLESANDVIEW,
  37. SqlKingbaseESEnum.TABLESANDVIEW,
  38. SqlPostgreSQLEnum.TABLESANDVIEW
  39. ),
  40. TABLE( SqlMySQLEnum.TABLE,
  41. SqlOracleEnum.TABLE,
  42. SqlSQLServerEnum.TABLE,
  43. SqlDMEnum.TABLE,
  44. SqlKingbaseESEnum.TABLE,
  45. SqlPostgreSQLEnum.TABLE
  46. ),
  47. FIELDS( SqlMySQLEnum.FIELDS,
  48. SqlOracleEnum.FIELDS,
  49. SqlSQLServerEnum.FIELDS,
  50. SqlDMEnum.FIELDS,
  51. SqlKingbaseESEnum.FIELDS,
  52. SqlPostgreSQLEnum.FIELDS
  53. ),
  54. EXISTS_TABLE( SqlMySQLEnum.EXISTS_TABLE,
  55. SqlOracleEnum.EXISTS_TABLE,
  56. SqlSQLServerEnum.EXISTS_TABLE,
  57. SqlDMEnum.EXISTS_TABLE,
  58. SqlKingbaseESEnum.EXISTS_TABLE,
  59. SqlPostgreSQLEnum.EXISTS_TABLE
  60. ),
  61. /* =============================== 定义语句 ==================================== */
  62. // (Data Definition Language)简称 DDL:用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop
  63. /**
  64. * 创表
  65. */
  66. CREATE_TABLE (SqlOracleEnum.CREATE_TABLE,
  67. Arrays.asList(
  68. "{table}",
  69. "{column}",
  70. "{dataType}",
  71. "[<DEFAULT> {defaultValue}]",
  72. "[[NOT] [NULL]]",
  73. "[AUTO_INCREMENT]",
  74. "[<COMMENT> {comment}]",
  75. "{primarykeys}"
  76. ),
  77. SqlMySQLEnum.CREATE_TABLE,
  78. SqlSQLServerEnum.CREATE_TABLE,
  79. SqlDMEnum.CREATE_TABLE,
  80. SqlKingbaseESEnum.CREATE_TABLE,
  81. SqlPostgreSQLEnum.CREATE_TABLE
  82. ),
  83. ADD_COLUMN (SqlMySQLEnum.ALTER_ADD_MODIFY,
  84. Arrays.asList(
  85. "<ADD|MODIFY>",
  86. "{table}",
  87. "{column}",
  88. "{dataType}",
  89. "[[NOT] [NULL]]",
  90. "[<DEFAULT> {defaultValue}]",
  91. "{comment}"
  92. ),
  93. SqlOracleEnum.ADD_COLUMN,
  94. SqlPostgreSQLEnum.ADD_COLUMN,
  95. SqlDMEnum.ALTER_ADD,
  96. SqlKingbaseESEnum.ALTER_ADD,
  97. SqlSQLServerEnum.ALTER_COLUMN
  98. ),
  99. /**
  100. * 删除表
  101. */
  102. DROP_TABLE (SqlOracleEnum.DROP_TABLE,
  103. Arrays.asList(
  104. "{table}"
  105. ),
  106. SqlMySQLEnum.DROP_TABLE
  107. ),
  108. /**
  109. * 表重命名
  110. */
  111. RE_TABLE_NAME (SqlMySQLEnum.RE_TABLE_NAME,
  112. Arrays.asList(
  113. "{oldTable}",
  114. "{newTable}"
  115. ),
  116. SqlKingbaseESEnum.RE_TABLE_NAME,
  117. SqlPostgreSQLEnum.RE_TABLE_NAME,
  118. SqlSQLServerEnum.RE_TABLE_NAME
  119. ),
  120. /**
  121. * 表注释
  122. */
  123. COMMENT_TABLE (SqlOracleEnum.COMMENT_TABLE,
  124. Arrays.asList(
  125. "{table}",
  126. "'{comment}'"
  127. ),
  128. SqlMySQLEnum.COMMENT_TABLE,
  129. SqlSQLServerEnum.COMMENT_TABLE
  130. ),
  131. /**
  132. * 字段注释
  133. */
  134. COMMENT_COLUMN (SqlOracleEnum.COMMENT_COLUMN,
  135. Arrays.asList(
  136. "{table}",
  137. "{column}",
  138. "'{comment}'",
  139. "{dataType}",
  140. "[DEFAULT {defaultValue}]"
  141. ),
  142. SqlMySQLEnum.COMMENT_COLUMN,
  143. SqlSQLServerEnum.COMMENT_COLUMN
  144. ),
  145. /* =============================== DML操作语句 ==================================== */
  146. // (Data Manipulation Language)简称 DML:用来操纵数据库中数据的命令。包括:select、insert、update、delete。
  147. /**
  148. * 获取表数据SQL
  149. */
  150. SELECT_TABLE (SqlMySQLEnum.SELECT_TABLE,
  151. Arrays.asList(
  152. "{table}"
  153. )
  154. ),
  155. COUNT_SIZE (SqlMySQLEnum.COUNT_SIZE,
  156. Arrays.asList(
  157. "{totalAlias}",
  158. "{selectSql}"
  159. )
  160. ),
  161. COUNT_SIZE_TABLE(SqlMySQLEnum.COUNT_TABLE_SIZE,
  162. Arrays.asList(
  163. "{totalAlias}",
  164. "{table}"
  165. )
  166. ),
  167. INSERT (SqlMySQLEnum.INSERT,
  168. Arrays.asList(
  169. "{table}",
  170. "[【{column},】]",
  171. "【{value},】"
  172. )
  173. ),
  174. DELETE_ALL (SqlMySQLEnum.DELETE_ALL,
  175. Collections.singletonList(
  176. "{table}"
  177. )
  178. ),
  179. /* =============================== 后缀 ==================================== */
  180. /**
  181. * beginIndex(起始下标)
  182. * = (currentPage - 1) * pageSize(当前页 * 页大小)
  183. * endIndex(结束下标)
  184. * = currentPage * pageSize
  185. * 先查询还是先排序
  186. */
  187. ORDER_PAGE (SqlMySQLEnum.ORDER_PAGE,
  188. Arrays.asList(
  189. "{selectSql}",
  190. "{orderColumn}",
  191. "{beginIndex}",
  192. "{endIndex}",
  193. "{pageSize}",
  194. "[DESC]"
  195. ),
  196. SqlOracleEnum.ORDER_PAGE,
  197. SqlSQLServerEnum.ORDER_PAGE,
  198. SqlPostgreSQLEnum.ORDER_PAGE
  199. ),
  200. /**
  201. * ASC(ascend):升序 1234 放空默认
  202. * DESC(descend):降序 4321
  203. */
  204. ORDER (SqlMySQLEnum.ORDER,
  205. Arrays.asList(
  206. "{column}",
  207. "[DESC]"
  208. )
  209. ),
  210. /**
  211. * 模糊查询
  212. * * : 多字符, c*c代表cc,cBc,cbc,cabdfec等
  213. * % : 多个字符, %c%代表agdcagd等
  214. * ? : 单个字符, %c%代表agdcagd等
  215. * # : 单数字, k#k代表k1k,k8k,k0k
  216. * [*] : 特殊字符, a[*]a代表a*a
  217. * [a-z] : 字符范围, [a-z]代表a到z的26个字母中任意一个 指定一个范围中任意一个
  218. */
  219. LIKE (SqlMySQLEnum.LIKE,
  220. Arrays.asList(
  221. "{selectSql}",
  222. "{column}",
  223. "{condition}"
  224. )
  225. ),
  226. ;
  227. private String sqlFrame;
  228. private SqlFrameBase baseSqlEnum;
  229. private List<SqlFrameBase> frameEnums;
  230. private List<String> frameParamList;
  231. private final String dbEncode = "common";
  232. /**
  233. * 构造
  234. * @param baseSqlEnum 基础枚举(其他数据库没有独特SQL,遵循这个枚举的SQL)
  235. */
  236. SqlComEnum(SqlFrameBase baseSqlEnum, List<String> frameParamList) {
  237. this.baseSqlEnum = baseSqlEnum;
  238. this.sqlFrame = baseSqlEnum.getSqlFrame();
  239. this.frameParamList = frameParamList;
  240. this.frameEnums = new ArrayList<>();
  241. this.frameEnums.add(baseSqlEnum);
  242. }
  243. /**
  244. * 构造
  245. * @param frameEnums 不同库自身对应的SQL框架
  246. */
  247. SqlComEnum(SqlFrameBase baseSqlEnum, List<String> frameParamList, SqlFrameBase... frameEnums) {
  248. this.baseSqlEnum = baseSqlEnum;
  249. this.sqlFrame = baseSqlEnum.getSqlFrame();
  250. this.frameParamList = frameParamList;
  251. List<SqlFrameBase> frameEnumsList = new ArrayList<>(Arrays.asList(frameEnums));
  252. frameEnumsList.add(baseSqlEnum);
  253. this.frameEnums = frameEnumsList;
  254. }
  255. SqlComEnum(SqlFrameBase... frameEnums) {
  256. this.frameEnums = Arrays.asList(frameEnums);
  257. }
  258. /**
  259. * 获取子类的枚举
  260. * @return 返回子类枚举
  261. */
  262. public SqlFrameBase getSqlFrameEnum(String dbEncode){
  263. if(this.getFrameEnums() != null){
  264. for (SqlFrameBase sqlEnum : this.getFrameEnums()) {
  265. if(sqlEnum.getDbEncode().equals(dbEncode)){
  266. return sqlEnum;
  267. }
  268. }
  269. }
  270. return null;
  271. }
  272. public SqlFrameBase getSqlFrameEnum(SqlFrameBase sqlFrameBase){
  273. if(this.getFrameEnums() != null){
  274. for (SqlFrameBase sqlEnum : this.getFrameEnums()) {
  275. if(sqlEnum.equals(sqlFrameBase)){
  276. return sqlEnum;
  277. }
  278. }
  279. }
  280. return null;
  281. }
  282. public PrepSqlDTO getPrepSqlDto(DbSourceOrDbLink dataSourceMod, String table){
  283. SqlFrameBase sysTemSqlEnum = getSqlFrameEnum(dataSourceMod.init().getDbType());
  284. return sysTemSqlEnum.getPrepSqlDto(dataSourceMod, table);
  285. }
  286. }