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

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