operator.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package lang
  2. import "strings"
  3. // TODO: This logic is PostgreSQL-specific and needs to be refactored to support MySQL
  4. func IsComparisonOperator(s string) bool {
  5. switch s {
  6. case ">":
  7. case "<":
  8. case "<=":
  9. case ">=":
  10. case "=":
  11. case "<>":
  12. case "!=":
  13. default:
  14. return false
  15. }
  16. return true
  17. }
  18. func IsMathematicalOperator(s string) bool {
  19. switch s {
  20. case "+":
  21. case "-":
  22. case "*":
  23. case "/":
  24. case "%":
  25. case "^":
  26. case "|/":
  27. case "||/":
  28. case "!":
  29. case "!!":
  30. case "@":
  31. case "&":
  32. case "|":
  33. case "#":
  34. case "~":
  35. case "<<":
  36. case ">>":
  37. default:
  38. return false
  39. }
  40. return true
  41. }
  42. // https://www.postgresql.org/docs/current/sql-keywords-appendix.html
  43. func IsReservedKeyword(s string) bool {
  44. switch strings.ToLower(s) {
  45. case "all":
  46. case "analyse":
  47. case "analyze":
  48. case "and":
  49. case "any":
  50. case "array":
  51. case "as":
  52. case "asc":
  53. case "asymmetric":
  54. case "authorization":
  55. case "binary":
  56. case "both":
  57. case "case":
  58. case "cast":
  59. case "check":
  60. case "collate":
  61. case "collation":
  62. case "column":
  63. case "concurrently":
  64. case "constraint":
  65. case "create":
  66. case "cross":
  67. case "current_catalog":
  68. case "current_date":
  69. case "current_role":
  70. case "current_schema":
  71. case "current_time":
  72. case "current_timestamp":
  73. case "current_user":
  74. case "default":
  75. case "deferrable":
  76. case "desc":
  77. case "distinct":
  78. case "do":
  79. case "else":
  80. case "end":
  81. case "except":
  82. case "false":
  83. case "fetch":
  84. case "for":
  85. case "foreign":
  86. case "freeze":
  87. case "from":
  88. case "full":
  89. case "grant":
  90. case "group":
  91. case "having":
  92. case "ilike":
  93. case "in":
  94. case "initially":
  95. case "inner":
  96. case "intersect":
  97. case "into":
  98. case "is":
  99. case "isnull":
  100. case "join":
  101. case "lateral":
  102. case "leading":
  103. case "left":
  104. case "like":
  105. case "limit":
  106. case "localtime":
  107. case "localtimestamp":
  108. case "natural":
  109. case "not":
  110. case "notnull":
  111. case "null":
  112. case "offset":
  113. case "on":
  114. case "only":
  115. case "or":
  116. case "order":
  117. case "outer":
  118. case "overlaps":
  119. case "placing":
  120. case "primary":
  121. case "references":
  122. case "returning":
  123. case "right":
  124. case "select":
  125. case "session_user":
  126. case "similar":
  127. case "some":
  128. case "symmetric":
  129. case "table":
  130. case "tablesample":
  131. case "then":
  132. case "to":
  133. case "trailing":
  134. case "true":
  135. case "union":
  136. case "unique":
  137. case "user":
  138. case "using":
  139. case "variadic":
  140. case "verbose":
  141. case "when":
  142. case "where":
  143. case "window":
  144. case "with":
  145. default:
  146. return false
  147. }
  148. return true
  149. }