You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mysql_keyword_checker.go 12 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. package mysql
  2. import (
  3. "strings"
  4. )
  5. var MySQLKeyword = map[string]string{
  6. "ACCESSIBLE": "ACCESSIBLE",
  7. "ADD": "ADD",
  8. "ALL": "ALL",
  9. "ALTER": "ALTER",
  10. "ANALYZE": "ANALYZE",
  11. "AND": "AND",
  12. "ARRAY": "ARRAY",
  13. "AS": "AS",
  14. "ASC": "ASC",
  15. "ASENSITIVE": "ASENSITIVE",
  16. "BEFORE": "BEFORE",
  17. "BETWEEN": "BETWEEN",
  18. "BIGINT": "BIGINT",
  19. "BINARY": "BINARY",
  20. "BLOB": "BLOB",
  21. "BOTH": "BOTH",
  22. "BY": "BY",
  23. "CALL": "CALL",
  24. "CASCADE": "CASCADE",
  25. "CASE": "CASE",
  26. "CHANGE": "CHANGE",
  27. "CHAR": "CHAR",
  28. "CHARACTER": "CHARACTER",
  29. "CHECK": "CHECK",
  30. "COLLATE": "COLLATE",
  31. "COLUMN": "COLUMN",
  32. "CONDITION": "CONDITION",
  33. "CONSTRAINT": "CONSTRAINT",
  34. "CONTINUE": "CONTINUE",
  35. "CONVERT": "CONVERT",
  36. "CREATE": "CREATE",
  37. "CROSS": "CROSS",
  38. "CUBE": "CUBE",
  39. "CUME_DIST": "CUME_DIST",
  40. "CURRENT_DATE": "CURRENT_DATE",
  41. "CURRENT_TIME": "CURRENT_TIME",
  42. "CURRENT_TIMESTAMP": "CURRENT_TIMESTAMP",
  43. "CURRENT_USER": "CURRENT_USER",
  44. "CURSOR": "CURSOR",
  45. "DATABASE": "DATABASE",
  46. "DATABASES": "DATABASES",
  47. "DAY_HOUR": "DAY_HOUR",
  48. "DAY_MICROSECOND": "DAY_MICROSECOND",
  49. "DAY_MINUTE": "DAY_MINUTE",
  50. "DAY_SECOND": "DAY_SECOND",
  51. "DEC": "DEC",
  52. "DECIMAL": "DECIMAL",
  53. "DECLARE": "DECLARE",
  54. "DEFAULT": "DEFAULT",
  55. "DELAYED": "DELAYED",
  56. "DELETE": "DELETE",
  57. "DENSE_RANK": "DENSE_RANK",
  58. "DESC": "DESC",
  59. "DESCRIBE": "DESCRIBE",
  60. "DETERMINISTIC": "DETERMINISTIC",
  61. "DISTINCT": "DISTINCT",
  62. "DISTINCTROW": "DISTINCTROW",
  63. "DIV": "DIV",
  64. "DOUBLE": "DOUBLE",
  65. "DROP": "DROP",
  66. "DUAL": "DUAL",
  67. "EACH": "EACH",
  68. "ELSE": "ELSE",
  69. "ELSEIF": "ELSEIF",
  70. "EMPTY": "EMPTY",
  71. "ENCLOSED": "ENCLOSED",
  72. "ESCAPED": "ESCAPED",
  73. "EXCEPT": "EXCEPT",
  74. "EXISTS": "EXISTS",
  75. "EXIT": "EXIT",
  76. "EXPLAIN": "EXPLAIN",
  77. "FALSE": "FALSE",
  78. "FETCH": "FETCH",
  79. "FIRST_VALUE": "FIRST_VALUE",
  80. "FLOAT": "FLOAT",
  81. "FLOAT4": "FLOAT4",
  82. "FLOAT8": "FLOAT8",
  83. "FOR": "FOR",
  84. "FORCE": "FORCE",
  85. "FOREIGN": "FOREIGN",
  86. "FROM": "FROM",
  87. "FULLTEXT": "FULLTEXT",
  88. "FUNCTION": "FUNCTION",
  89. "GENERATED": "GENERATED",
  90. "GET": "GET",
  91. "GRANT": "GRANT",
  92. "GROUP": "GROUP",
  93. "GROUPING": "GROUPING",
  94. "GROUPS": "GROUPS",
  95. "HAVING": "HAVING",
  96. "HIGH_PRIORITY": "HIGH_PRIORITY",
  97. "HOUR_MICROSECOND": "HOUR_MICROSECOND",
  98. "HOUR_MINUTE": "HOUR_MINUTE",
  99. "HOUR_SECOND": "HOUR_SECOND",
  100. "IF": "IF",
  101. "IGNORE": "IGNORE",
  102. "IN": "IN",
  103. "INDEX": "INDEX",
  104. "INFILE": "INFILE",
  105. "INNER": "INNER",
  106. "INOUT": "INOUT",
  107. "INSENSITIVE": "INSENSITIVE",
  108. "INSERT": "INSERT",
  109. "INT": "INT",
  110. "INT1": "INT1",
  111. "INT2": "INT2",
  112. "INT3": "INT3",
  113. "INT4": "INT4",
  114. "INT8": "INT8",
  115. "INTEGER": "INTEGER",
  116. "INTERVAL": "INTERVAL",
  117. "INTO": "INTO",
  118. "IO_AFTER_GTIDS": "IO_AFTER_GTIDS",
  119. "IO_BEFORE_GTIDS": "IO_BEFORE_GTIDS",
  120. "IS": "IS",
  121. "ITERATE": "ITERATE",
  122. "JOIN": "JOIN",
  123. "JSON_TABLE": "JSON_TABLE",
  124. "KEY": "KEY",
  125. "KEYS": "KEYS",
  126. "KILL": "KILL",
  127. "LAG": "LAG",
  128. "LAST_VALUE": "LAST_VALUE",
  129. "LATERAL": "LATERAL",
  130. "LEAD": "LEAD",
  131. "LEADING": "LEADING",
  132. "LEAVE": "LEAVE",
  133. "LEFT": "LEFT",
  134. "LIKE": "LIKE",
  135. "LIMIT": "LIMIT",
  136. "LINEAR": "LINEAR",
  137. "LINES": "LINES",
  138. "LOAD": "LOAD",
  139. "LOCALTIME": "LOCALTIME",
  140. "LOCALTIMESTAMP": "LOCALTIMESTAMP",
  141. "LOCK": "LOCK",
  142. "LONG": "LONG",
  143. "LONGBLOB": "LONGBLOB",
  144. "LONGTEXT": "LONGTEXT",
  145. "LOOP": "LOOP",
  146. "LOW_PRIORITY": "LOW_PRIORITY",
  147. "MASTER_BIND": "MASTER_BIND",
  148. "MASTER_SSL_VERIFY_SERVER_CERT": "MASTER_SSL_VERIFY_SERVER_CERT",
  149. "MATCH": "MATCH",
  150. "MAXVALUE": "MAXVALUE",
  151. "MEDIUMBLOB": "MEDIUMBLOB",
  152. "MEDIUMINT": "MEDIUMINT",
  153. "MEDIUMTEXT": "MEDIUMTEXT",
  154. "MEMBER": "MEMBER",
  155. "MIDDLEINT": "MIDDLEINT",
  156. "MINUTE_MICROSECOND": "MINUTE_MICROSECOND",
  157. "MINUTE_SECOND": "MINUTE_SECOND",
  158. "MOD": "MOD",
  159. "MODIFIES": "MODIFIES",
  160. "NATURAL": "NATURAL",
  161. "NOT": "NOT",
  162. "NO_WRITE_TO_BINLOG": "NO_WRITE_TO_BINLOG",
  163. "NTH_VALUE": "NTH_VALUE",
  164. "NTILE": "NTILE",
  165. "NULL": "NULL",
  166. "NUMERIC": "NUMERIC",
  167. "OF": "OF",
  168. "ON": "ON",
  169. "OPTIMIZE": "OPTIMIZE",
  170. "OPTIMIZER_COSTS": "OPTIMIZER_COSTS",
  171. "OPTION": "OPTION",
  172. "OPTIONALLY": "OPTIONALLY",
  173. "OR": "OR",
  174. "ORDER": "ORDER",
  175. "OUT": "OUT",
  176. "OUTER": "OUTER",
  177. "OUTFILE": "OUTFILE",
  178. "OVER": "OVER",
  179. "PARTITION": "PARTITION",
  180. "PERCENT_RANK": "PERCENT_RANK",
  181. "PRECISION": "PRECISION",
  182. "PRIMARY": "PRIMARY",
  183. "PROCEDURE": "PROCEDURE",
  184. "PURGE": "PURGE",
  185. "RANGE": "RANGE",
  186. "RANK": "RANK",
  187. "READ": "READ",
  188. "READS": "READS",
  189. "READ_WRITE": "READ_WRITE",
  190. "REAL": "REAL",
  191. "RECURSIVE": "RECURSIVE",
  192. "REFERENCES": "REFERENCES",
  193. "REGEXP": "REGEXP",
  194. "RELEASE": "RELEASE",
  195. "RENAME": "RENAME",
  196. "REPEAT": "REPEAT",
  197. "REPLACE": "REPLACE",
  198. "REQUIRE": "REQUIRE",
  199. "RESIGNAL": "RESIGNAL",
  200. "RESTRICT": "RESTRICT",
  201. "RETURN": "RETURN",
  202. "REVOKE": "REVOKE",
  203. "RIGHT": "RIGHT",
  204. "RLIKE": "RLIKE",
  205. "ROW": "ROW",
  206. "ROWS": "ROWS",
  207. "ROW_NUMBER": "ROW_NUMBER",
  208. "SCHEMA": "SCHEMA",
  209. "SCHEMAS": "SCHEMAS",
  210. "SECOND_MICROSECOND": "SECOND_MICROSECOND",
  211. "SELECT": "SELECT",
  212. "SENSITIVE": "SENSITIVE",
  213. "SEPARATOR": "SEPARATOR",
  214. "SET": "SET",
  215. "SHOW": "SHOW",
  216. "SIGNAL": "SIGNAL",
  217. "SMALLINT": "SMALLINT",
  218. "SPATIAL": "SPATIAL",
  219. "SPECIFIC": "SPECIFIC",
  220. "SQL": "SQL",
  221. "SQLEXCEPTION": "SQLEXCEPTION",
  222. "SQLSTATE": "SQLSTATE",
  223. "SQLWARNING": "SQLWARNING",
  224. "SQL_BIG_RESULT": "SQL_BIG_RESULT",
  225. "SQL_CALC_FOUND_ROWS": "SQL_CALC_FOUND_ROWS",
  226. "SQL_SMALL_RESULT": "SQL_SMALL_RESULT",
  227. "SSL": "SSL",
  228. "STARTING": "STARTING",
  229. "STORED": "STORED",
  230. "STRAIGHT_JOIN": "STRAIGHT_JOIN",
  231. "SYSTEM": "SYSTEM",
  232. "TABLE": "TABLE",
  233. "TERMINATED": "TERMINATED",
  234. "THEN": "THEN",
  235. "TINYBLOB": "TINYBLOB",
  236. "TINYINT": "TINYINT",
  237. "TINYTEXT": "TINYTEXT",
  238. "TO": "TO",
  239. "TRAILING": "TRAILING",
  240. "TRIGGER": "TRIGGER",
  241. "TRUE": "TRUE",
  242. "UNDO": "UNDO",
  243. "UNION": "UNION",
  244. "UNIQUE": "UNIQUE",
  245. "UNLOCK": "UNLOCK",
  246. "UNSIGNED": "UNSIGNED",
  247. "UPDATE": "UPDATE",
  248. "USAGE": "USAGE",
  249. "USE": "USE",
  250. "USING": "USING",
  251. "UTC_DATE": "UTC_DATE",
  252. "UTC_TIME": "UTC_TIME",
  253. "UTC_TIMESTAMP": "UTC_TIMESTAMP",
  254. "VALUES": "VALUES",
  255. "VARBINARY": "VARBINARY",
  256. "VARCHAR": "VARCHAR",
  257. "VARCHARACTER": "VARCHARACTER",
  258. "VARYING": "VARYING",
  259. "VIRTUAL": "VIRTUAL",
  260. "WHEN": "WHEN",
  261. "WHERE": "WHERE",
  262. "WHILE": "WHILE",
  263. "WINDOW": "WINDOW",
  264. "WITH": "WITH",
  265. "WRITE": "WRITE",
  266. "XOR": "XOR",
  267. "YEAR_MONTH": "YEAR_MONTH",
  268. "ZEROFILL": "ZEROFILL",
  269. }
  270. func Check(fieldOrTableName string) bool {
  271. _, ok := MySQLKeyword[fieldOrTableName]
  272. if ok {
  273. return true
  274. }
  275. if fieldOrTableName != "" {
  276. fieldOrTableName = strings.ToUpper(fieldOrTableName)
  277. }
  278. _, ok = MySQLKeyword[fieldOrTableName]
  279. return ok
  280. }
  281. func CheckEscape(fieldOrTableName string) bool {
  282. return Check(fieldOrTableName)
  283. }
  284. func CheckAndReplace(fieldOrTableName string) string {
  285. if Check(fieldOrTableName) {
  286. return "`" + fieldOrTableName + "`"
  287. } else {
  288. return fieldOrTableName
  289. }
  290. }