SqlPostgreSQLEnum.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. package jnpf.database.sql.enums;
  2. import jnpf.database.enums.DbAliasEnum;
  3. import jnpf.database.enums.ParamEnum;
  4. import jnpf.database.source.DbBase;
  5. import jnpf.database.sql.enums.base.SqlFrameBase;
  6. import jnpf.database.sql.model.DbStruct;
  7. import jnpf.util.StringUtil;
  8. import lombok.AllArgsConstructor;
  9. import lombok.Getter;
  10. import java.util.List;
  11. import java.util.Map;
  12. /**
  13. * Postgre SQL语句模板
  14. *
  15. * @author JNPF开发平台组 YanYu
  16. * @version V3.3
  17. * @copyright 引迈信息技术有限公司
  18. * @date 2022/3/17
  19. */
  20. @Getter
  21. @AllArgsConstructor
  22. public enum SqlPostgreSQLEnum implements SqlFrameBase {
  23. /* =============================== 系统语句 ==================================== */
  24. FIELDS(
  25. "SELECT\n" +
  26. "\tcol.column_name AS " + DbAliasEnum.FIELD.getAlias() + ",\n" +
  27. "\tcol.udt_name AS " + DbAliasEnum.DATA_TYPE.getAlias() + ",\n" +
  28. "\tis_nullable AS " + DbAliasEnum.ALLOW_NULL.getAlias() + ",\n" +
  29. "\tcol_description (pa.pg_oid, attnum) " + DbAliasEnum.FIELD_COMMENT.getAlias() + ",\n" +
  30. "\tcharacter_maximum_length AS " + DbAliasEnum.CHAR_LENGTH.getAlias() + ",\n" +
  31. "\tnumeric_precision AS " + DbAliasEnum.NUM_PRECISION.getAlias() + ",\n" +
  32. "\tcolumn_default AS " + DbAliasEnum.COLUMN_DEFAULT.getAlias() + ",\n" +
  33. "\ttable_name AS " + DbAliasEnum.TABLE_NAME.getAlias() + ",\n" +
  34. "\tnumeric_scale AS " + DbAliasEnum.NUM_SCALE.getAlias() + ",\n" +
  35. "\t(CASE WHEN ( SELECT pa.attnum = ANY ( conkey ) FROM pg_constraint WHERE conrelid = pa.pg_oid AND contype = 'p' ) = 't' \n" +
  36. "\tTHEN 1 ELSE 0 END ) " + DbAliasEnum.PRIMARY_KEY.getAlias() + "\t\n" +
  37. "FROM\n" +
  38. "\tinformation_schema.COLUMNS AS col\n" +
  39. "LEFT JOIN (\n" +
  40. "\tSELECT\n" +
  41. "\t\t\t\t\t* \n" +
  42. "\tFROM\n" +
  43. " (SELECT *,oid AS pg_oid FROM pg_class WHERE relnamespace IN ( SELECT oid FROM pg_namespace WHERE nspname = " + ParamEnum.DB_SCHEMA.getParamSign() + " )) AS pc\n" +
  44. "\tLEFT JOIN\n" +
  45. "\t pg_attribute AS pat \n" +
  46. "\tON \n" +
  47. "\t\tpat.attrelid = pc.pg_oid\n" +
  48. "\tWHERE \n" +
  49. "\t\t\tpc.relname = " + ParamEnum.TABLE.getParamSign() + "\n" +
  50. "\t) AS pa \n" +
  51. "ON \n" +
  52. "\tpa.attname = col.column_name \n" +
  53. "WHERE\n" +
  54. "\tcol.table_schema = " + ParamEnum.DB_SCHEMA.getParamSign() + " \n" +
  55. "\tAND TABLE_NAME = " + ParamEnum.TABLE.getParamSign()
  56. ){
  57. @Override
  58. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  59. list.add(dbStruct.getPostGreDbSchema());
  60. list.add(table);
  61. list.add(dbStruct.getPostGreDbSchema());
  62. list.add(table);
  63. }
  64. },
  65. /* POSITION()函数返回一个整数,该整数表示子字符串在字符串中的位置。如果在字符串中未找到子字符串,则POSITION()函数将返回零(0)。
  66. 如果子字符串或字符串参数为null,则返回null */
  67. TABLES(
  68. "SELECT\n" +
  69. " pt.*,\n" +
  70. " pg_tab.relname AS " + DbAliasEnum.TABLE_NAME.getAlias() + ",\n" +
  71. " pg_tab.reltuples AS " + DbAliasEnum.TABLE_SUM.getAlias() + ",\n" +
  72. " pg_tab.nspname,\n" +
  73. " CAST ( obj_description ( pg_tab.relfilenode, 'pg_class' ) AS VARCHAR ) AS " + DbAliasEnum.TABLE_COMMENT.getAlias() + "\n" +
  74. "FROM\n" +
  75. " pg_tables pt\n" +
  76. "LEFT JOIN \n" +
  77. "(SELECT \n" +
  78. " * \n" +
  79. "FROM\n" +
  80. " pg_class pc\n" +
  81. "LEFT JOIN \n" +
  82. " pg_namespace pns\n" +
  83. "ON\n" +
  84. " pns.oid = pc.relnamespace\n" +
  85. "WHERE\n" +
  86. " pns.nspname = " + ParamEnum.DB_SCHEMA.getParamSign() + ") AS pg_tab\n" +
  87. "ON\n" +
  88. " pt.tablename = pg_tab.relname\n" +
  89. "WHERE pt.schemaname = " + ParamEnum.DB_SCHEMA.getParamSign()
  90. ){
  91. @Override
  92. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  93. list.add(dbStruct.getPostGreDbSchema());
  94. list.add(dbStruct.getPostGreDbSchema());
  95. }
  96. },
  97. /* POSITION()函数返回一个整数,该整数表示子字符串在字符串中的位置。如果在字符串中未找到子字符串,则POSITION()函数将返回零(0)。
  98. 如果子字符串或字符串参数为null,则返回null */
  99. TABLESANDVIEW(
  100. "SELECT viewname as " + DbAliasEnum.TABLE_NAME.getAlias() + ", 'VIEW' as " + DbAliasEnum.TABLE_TYPE.getAlias() + " FROM pg_views WHERE schemaname = " + ParamEnum.DB_SCHEMA.getParamSign() + "\n" +
  101. "UNION\n" +
  102. "SELECT tablename as " + DbAliasEnum.TABLE_NAME.getAlias() + ",'TABLE' as " + DbAliasEnum.TABLE_TYPE.getAlias() + " FROM pg_tables WHERE schemaname = " + ParamEnum.DB_SCHEMA.getParamSign()
  103. ){
  104. @Override
  105. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  106. list.add(dbStruct.getPostGreDbSchema());
  107. list.add(dbStruct.getPostGreDbSchema());
  108. }
  109. },
  110. TABLE(
  111. TABLES.sqlFrame + " AND pg_tab.relname = " + ParamEnum.TABLE.getParamSign()
  112. ){
  113. @Override
  114. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  115. list.add(dbStruct.getPostGreDbSchema());
  116. list.add(dbStruct.getPostGreDbSchema());
  117. list.add(table);
  118. }
  119. },
  120. EXISTS_TABLE(
  121. "SELECT COUNT (*) AS TOTAL \n" +
  122. "FROM\n" +
  123. "( \n" +
  124. " SELECT relname AS F_TABLE_NAME FROM pg_class C WHERE relname = lower(" + ParamEnum.TABLE.getParamSign() + ") AND relnamespace IN \n" +
  125. " ( \n" +
  126. " SELECT oid FROM pg_namespace WHERE nspname = " + ParamEnum.DB_SCHEMA.getParamSign() + "\n" +
  127. " ) \n" +
  128. ") AS COUNT_TAB"
  129. ){
  130. @Override
  131. public void setStructParams(String table, DbStruct dbStruct, List<String> list) {
  132. list.add(table);
  133. list.add(dbStruct.getPostGreDbSchema());
  134. }
  135. },
  136. /* =============================== 定义语句 ==================================== */
  137. // (Data Definition Language)简称 DDL:用来建立数据库、数据库对象和定义列的命令。包括:create、alter、drop
  138. /**
  139. * 建表语句
  140. */
  141. CREATE(
  142. "CREATE TABLE 《schema》.{table}(\n" +
  143. "【 " +
  144. "1:(PRIMARY KEY ({primaryColumn}))|" +
  145. "2:({column} {dataType} [[NOT] [NULL]] [DEFAULT {defaultValue}])" +
  146. ",\n】)"
  147. ),
  148. // SERIAL自增标识,自增时:1、不定义数据类型;2、不定义默认值;3、非空;
  149. CREATE_TABLE ("<CREATE> <TABLE> 《schema》.{table} <(>\n" +
  150. "【{column} {dataType} [[NOT] [NULL]] [<DEFAULT> {defaultValue}] 】" +
  151. "\n{primarykeys}" +
  152. "\n<)>"){
  153. @Override
  154. public String createIncrement(String sqlFrame, Map<String, String> paramsMap) {
  155. // 自增标识:SERIAL
  156. if(StringUtil.isNotEmpty(paramsMap.get("[AUTO_INCREMENT]"))){
  157. sqlFrame = super.createIncrement(sqlFrame, paramsMap)
  158. .replace("{dataType}", "[SERIAL]");
  159. }
  160. return sqlFrame;
  161. }
  162. public String createIndex(){
  163. String model = "CREATE UNIQUE INDEX {indexName} ON {table}(【column】)";
  164. return null;
  165. }
  166. },
  167. COMMENT_TABLE ("COMMENT ON TABLE 《schema》.{table} IS {comment}"),
  168. COMMENT_COLUMN ("COMMENT ON COLUMN 《schema》.{table}.{column} IS {comment}"),
  169. DROP_TABLE ("DROP TABLE IF EXISTS 《schema》.{table}"),
  170. ADD_COLUMN ("<ALTER> <TABLE> 《schema》.{table} ADD {column} {dataType}"),
  171. DROP_COLUMN ("ALTER TABLE 《schema》.{table} DROP {column}"),
  172. MODIFY_TYPE ("<ALTER> <TABLE> 《schema》.{table} <ALTER> <COLUMN> {column} <TYPE> {dataType}"),
  173. RE_COLUMN_NAME ("<ALTER> <TABLE> 《schema》.{table} RENAME <COLUMN> {oldColumn} <TO> {newColumn}"),
  174. RE_TABLE_NAME ("<ALTER> <TABLE> 《schema》.{oldTable} RENAME <TO> {newTable}"),
  175. /**
  176. * 修改: NOT NULL 约束
  177. */
  178. ALTER_NOT_NULL ("<ALTER> <TABLE> 《schema》.{table} <MODIFY> {column} {datatype} [[NOT] [NULL]]"),
  179. /**
  180. * 修改: 默认值
  181. */
  182. ALTER_DEFAULT ("<ALTER> <TABLE> 《schema》.{table} <ALTER> {column} <SET> <DEFAULT> {defaultValue}"),
  183. /**
  184. * 添加: 主键约束
  185. */
  186. ALTER_PRIMARY ("<ALTER> <TABLE> 《schema》.{table} <ADD> CONSTRAINT {primaryKey} PRIMARY KEY (【{column},】)"),
  187. /* =============================== DML操作语句 ==================================== */
  188. // (Data Manipulation Language)简称 DML:用来操纵数据库中数据的命令。包括:select、insert、update、delete。
  189. INSERT ("INSERT INTO 《schema》.{table}(【{column},】) VALUES (【{value},】)"),
  190. DELETE_INFO ("DELETE FROM 《schema》.{table} WHERE {column} = {value}"),
  191. ORDER_PAGE ("{selectSql} ORDER BY {orderColumn} [DESC] LIMIT {pageSize} OFFSET {beginIndex}"),
  192. /* =============================== 其他 ==================================== */
  193. CREATE_DATABASE("CREATE DATABASE \"{database}\""),
  194. DROP_DATABASE("DROP DATABASE [IF EXISTS] {database}"),
  195. CREATE_SCHEMA("CREATE SCHEMA \"{schema}\";"),
  196. DROP_SCHEMA("DROP SCHEMA \"{schema}\" CASCADE"),
  197. ;
  198. private String sqlFrame;
  199. private final String dbEncode = DbBase.POSTGRE_SQL;
  200. }