happy-sql 2.1.1 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/ChangeLog +71 -0
  2. package/lib/parser/visitors/clause/alter-table/alter-table.js +40 -0
  3. package/lib/parser/visitors/clause/attach/attach.js +12 -0
  4. package/lib/parser/visitors/clause/binary.js +158 -0
  5. package/lib/parser/visitors/clause/case-when/case-when.js +24 -0
  6. package/lib/parser/visitors/clause/column-definition/column-definition.js +57 -8
  7. package/lib/parser/visitors/clause/create-index/create-index.js +29 -0
  8. package/lib/parser/visitors/clause/create-table/create-table.js +8 -4
  9. package/lib/parser/visitors/clause/delete/delete.js +3 -0
  10. package/lib/parser/visitors/clause/drop-index/drop-index.js +12 -0
  11. package/lib/parser/visitors/clause/drop-table/drop-table.js +18 -0
  12. package/lib/parser/visitors/clause/from/from.js +112 -75
  13. package/lib/parser/visitors/clause/index.js +28 -2
  14. package/lib/parser/visitors/clause/insert/insert.js +25 -18
  15. package/lib/parser/visitors/clause/operand.js +51 -1
  16. package/lib/parser/visitors/clause/pragma/pragma.js +12 -0
  17. package/lib/parser/visitors/clause/returning.js +32 -0
  18. package/lib/parser/visitors/clause/select/select.js +92 -18
  19. package/lib/parser/visitors/clause/transaction/transaction.js +20 -0
  20. package/lib/parser/visitors/clause/union/union.js +19 -2
  21. package/lib/parser/visitors/clause/update/update.js +9 -0
  22. package/lib/parser/visitors/clause/where/where.js +31 -73
  23. package/lib/printer/visitors/array-expression.js +8 -1
  24. package/lib/printer/visitors/boolean-literal.js +8 -0
  25. package/lib/printer/visitors/call-expression/call-expression.js +18 -1
  26. package/lib/printer/visitors/call-expression/clauses/add-column/add-column.js +4 -0
  27. package/lib/printer/visitors/call-expression/clauses/all/all.js +10 -0
  28. package/lib/printer/visitors/call-expression/clauses/alter-column-type/alter-column-type.js +8 -0
  29. package/lib/printer/visitors/call-expression/clauses/alter-table/alter-table.js +12 -0
  30. package/lib/printer/visitors/call-expression/clauses/any/any.js +10 -0
  31. package/lib/printer/visitors/call-expression/clauses/array/array.js +14 -0
  32. package/lib/printer/visitors/call-expression/clauses/attach/attach.js +8 -0
  33. package/lib/printer/visitors/call-expression/clauses/begin/begin.js +3 -0
  34. package/lib/printer/visitors/call-expression/clauses/case-when/case-when.js +33 -0
  35. package/lib/printer/visitors/call-expression/clauses/cast/cast.js +9 -0
  36. package/lib/printer/visitors/call-expression/clauses/check/check.js +8 -0
  37. package/lib/printer/visitors/call-expression/clauses/clauses.js +114 -0
  38. package/lib/printer/visitors/call-expression/clauses/commit/commit.js +3 -0
  39. package/lib/printer/visitors/call-expression/clauses/concat/concat.js +7 -0
  40. package/lib/printer/visitors/call-expression/clauses/create-index/create-index.js +20 -0
  41. package/lib/printer/visitors/call-expression/clauses/create-index/create-unique-index.js +20 -0
  42. package/lib/printer/visitors/call-expression/clauses/create-table/create-table.js +6 -2
  43. package/lib/printer/visitors/call-expression/clauses/create-table-if-not-exists/create-table-if-not-exists.js +6 -0
  44. package/lib/printer/visitors/call-expression/clauses/cross-join/cross-join.js +9 -0
  45. package/lib/printer/visitors/call-expression/clauses/default/default.js +6 -0
  46. package/lib/printer/visitors/call-expression/clauses/delete/delete.js +3 -5
  47. package/lib/printer/visitors/call-expression/clauses/drop-column/drop-column.js +4 -0
  48. package/lib/printer/visitors/call-expression/clauses/drop-index/drop-index.js +12 -0
  49. package/lib/printer/visitors/call-expression/clauses/drop-table/drop-table.js +25 -0
  50. package/lib/printer/visitors/call-expression/clauses/exists/exists.js +5 -0
  51. package/lib/printer/visitors/call-expression/clauses/extract/extract.js +9 -0
  52. package/lib/printer/visitors/call-expression/clauses/from/from.js +11 -2
  53. package/lib/printer/visitors/call-expression/clauses/full-outer-join/full-outer-join.js +9 -0
  54. package/lib/printer/visitors/call-expression/clauses/ilike/ilike.js +7 -0
  55. package/lib/printer/visitors/call-expression/clauses/in-query/in-query.js +8 -0
  56. package/lib/printer/visitors/call-expression/clauses/inner-join/inner-join.js +8 -0
  57. package/lib/printer/visitors/call-expression/clauses/insert/insert.js +17 -4
  58. package/lib/printer/visitors/call-expression/clauses/into/into.js +1 -1
  59. package/lib/printer/visitors/call-expression/clauses/is-distinct-from/is-distinct-from.js +7 -0
  60. package/lib/printer/visitors/call-expression/clauses/join/join.js +11 -8
  61. package/lib/printer/visitors/call-expression/clauses/json-op.js +21 -0
  62. package/lib/printer/visitors/call-expression/clauses/lateral-join/lateral-join.js +19 -0
  63. package/lib/printer/visitors/call-expression/clauses/lateral-subquery/lateral-subquery.js +8 -0
  64. package/lib/printer/visitors/call-expression/clauses/left-join/left-join.js +8 -0
  65. package/lib/printer/visitors/call-expression/clauses/left-outer-join/left-outer-join.js +8 -0
  66. package/lib/printer/visitors/call-expression/clauses/natural-join/natural-join.js +9 -0
  67. package/lib/printer/visitors/call-expression/clauses/not-between/not-between.js +9 -0
  68. package/lib/printer/visitors/call-expression/clauses/not-exists/not-exists.js +5 -0
  69. package/lib/printer/visitors/call-expression/clauses/not-like/not-like.js +7 -0
  70. package/lib/printer/visitors/call-expression/clauses/not-null/not-null.js +3 -0
  71. package/lib/printer/visitors/call-expression/clauses/or-ignore/or-ignore.js +3 -0
  72. package/lib/printer/visitors/call-expression/clauses/or-replace/or-replace.js +3 -0
  73. package/lib/printer/visitors/call-expression/clauses/over/over.js +17 -0
  74. package/lib/printer/visitors/call-expression/clauses/partition-by/partition-by.js +12 -0
  75. package/lib/printer/visitors/call-expression/clauses/pg-cast/pg-cast.js +7 -0
  76. package/lib/printer/visitors/call-expression/clauses/pragma/pragma.js +9 -0
  77. package/lib/printer/visitors/call-expression/clauses/references/references.js +17 -0
  78. package/lib/printer/visitors/call-expression/clauses/rename-column/rename-column.js +8 -0
  79. package/lib/printer/visitors/call-expression/clauses/right-join/right-join.js +8 -0
  80. package/lib/printer/visitors/call-expression/clauses/rollback/rollback.js +3 -0
  81. package/lib/printer/visitors/call-expression/clauses/rollback-to/rollback-to.js +4 -0
  82. package/lib/printer/visitors/call-expression/clauses/row/row.js +14 -0
  83. package/lib/printer/visitors/call-expression/clauses/row-number/row-number.js +3 -0
  84. package/lib/printer/visitors/call-expression/clauses/savepoint/savepoint.js +4 -0
  85. package/lib/printer/visitors/call-expression/clauses/select/select.js +30 -10
  86. package/lib/printer/visitors/call-expression/clauses/similar-to/similar-to.js +7 -0
  87. package/lib/printer/visitors/call-expression/clauses/subquery/subquery.js +5 -0
  88. package/lib/printer/visitors/call-expression/clauses/union/union.js +9 -0
  89. package/lib/printer/visitors/call-expression/clauses/unique/unique.js +3 -0
  90. package/lib/printer/visitors/call-expression/clauses/update/update.js +2 -3
  91. package/lib/printer/visitors/call-expression/clauses/update-from/update-from.js +4 -0
  92. package/lib/printer/visitors/call-expression/clauses/vacuum/vacuum.js +3 -0
  93. package/lib/printer/visitors/call-expression/clauses/values/values.js +21 -3
  94. package/lib/printer/visitors/call-expression/clauses/where/where.js +10 -0
  95. package/lib/printer/visitors/index.js +5 -1
  96. package/lib/printer/visitors/logical-expression.js +37 -4
  97. package/lib/printer/visitors/null-literal.js +3 -0
  98. package/package.json +11 -1
  99. package/lib/parser/fixture/comment-fix.js +0 -8
  100. package/lib/parser/fixture/comment.sql +0 -2
  101. package/lib/parser/fixture/section-multi-fix.js +0 -24
  102. package/lib/parser/fixture/section-multi.sql +0 -3
  103. package/lib/parser/fixture/select-fix.js +0 -8
  104. package/lib/parser/fixture/select.sql +0 -1
  105. package/lib/parser/fixture/with-named-fix.js +0 -43
  106. package/lib/parser/fixture/with-named-insert-fix.js +0 -44
  107. package/lib/parser/fixture/with-named-insert.sql +0 -13
  108. package/lib/parser/fixture/with-named.sql +0 -8
  109. package/lib/parser/visitors/clause/count/fixture/count-fix.js +0 -10
  110. package/lib/parser/visitors/clause/count/fixture/count-one-fix.js +0 -10
  111. package/lib/parser/visitors/clause/count/fixture/count-one.sql +0 -1
  112. package/lib/parser/visitors/clause/count/fixture/count.sql +0 -1
  113. package/lib/parser/visitors/clause/create-sequence/fixture/create-sequence-fix.js +0 -5
  114. package/lib/parser/visitors/clause/create-sequence/fixture/create-sequence.sql +0 -2
  115. package/lib/parser/visitors/clause/create-table/fixture/create-table-autoincrement-fix.js +0 -12
  116. package/lib/parser/visitors/clause/create-table/fixture/create-table-autoincrement.sql +0 -1
  117. package/lib/parser/visitors/clause/create-table/fixture/create-table-default-fix.js +0 -11
  118. package/lib/parser/visitors/clause/create-table/fixture/create-table-default.sql +0 -1
  119. package/lib/parser/visitors/clause/create-table/fixture/create-table-identity-always-fix.js +0 -12
  120. package/lib/parser/visitors/clause/create-table/fixture/create-table-identity-always.sql +0 -1
  121. package/lib/parser/visitors/clause/create-table/fixture/create-table-identity-by-default-fix.js +0 -12
  122. package/lib/parser/visitors/clause/create-table/fixture/create-table-identity-by-default.sql +0 -1
  123. package/lib/parser/visitors/clause/create-table/fixture/create-table-nextval-fix.js +0 -18
  124. package/lib/parser/visitors/clause/create-table/fixture/create-table-nextval.sql +0 -1
  125. package/lib/parser/visitors/clause/create-table/fixture/create-table-not-null-fix.js +0 -11
  126. package/lib/parser/visitors/clause/create-table/fixture/create-table-not-null.sql +0 -1
  127. package/lib/parser/visitors/clause/create-table/fixture/create-table-serial-fix.js +0 -11
  128. package/lib/parser/visitors/clause/create-table/fixture/create-table-serial.sql +0 -1
  129. package/lib/parser/visitors/clause/delete/fixture/delete-fix.js +0 -10
  130. package/lib/parser/visitors/clause/delete/fixture/delete-where-between-fix.js +0 -14
  131. package/lib/parser/visitors/clause/delete/fixture/delete-where-between.sql +0 -1
  132. package/lib/parser/visitors/clause/delete/fixture/delete.sql +0 -1
  133. package/lib/parser/visitors/clause/from/fixture/from-fix.js +0 -8
  134. package/lib/parser/visitors/clause/from/fixture/from-where-fix.js +0 -12
  135. package/lib/parser/visitors/clause/from/fixture/from-where.sql +0 -3
  136. package/lib/parser/visitors/clause/from/fixture/from.sql +0 -1
  137. package/lib/parser/visitors/clause/from/fixture/generate-series-fix.js +0 -12
  138. package/lib/parser/visitors/clause/from/fixture/generate-series.sql +0 -1
  139. package/lib/parser/visitors/clause/from/fixture/group-by-fix.js +0 -14
  140. package/lib/parser/visitors/clause/from/fixture/group-by-having-fix.js +0 -22
  141. package/lib/parser/visitors/clause/from/fixture/group-by-having.sql +0 -1
  142. package/lib/parser/visitors/clause/from/fixture/group-by-multi-fix.js +0 -13
  143. package/lib/parser/visitors/clause/from/fixture/group-by-multi.sql +0 -1
  144. package/lib/parser/visitors/clause/from/fixture/group-by-order-by-fix.js +0 -17
  145. package/lib/parser/visitors/clause/from/fixture/group-by-order-by.sql +0 -1
  146. package/lib/parser/visitors/clause/from/fixture/group-by-sum-fix.js +0 -14
  147. package/lib/parser/visitors/clause/from/fixture/group-by-sum-having-fix.js +0 -19
  148. package/lib/parser/visitors/clause/from/fixture/group-by-sum-having.sql +0 -1
  149. package/lib/parser/visitors/clause/from/fixture/group-by-sum.sql +0 -1
  150. package/lib/parser/visitors/clause/from/fixture/group-by.sql +0 -1
  151. package/lib/parser/visitors/clause/from/fixture/join-fix.js +0 -14
  152. package/lib/parser/visitors/clause/from/fixture/join-multi-fix.js +0 -21
  153. package/lib/parser/visitors/clause/from/fixture/join-multi.sql +0 -1
  154. package/lib/parser/visitors/clause/from/fixture/join-on-in-fix.js +0 -19
  155. package/lib/parser/visitors/clause/from/fixture/join-on-in.sql +0 -1
  156. package/lib/parser/visitors/clause/from/fixture/join-on-is-not-null-fix.js +0 -16
  157. package/lib/parser/visitors/clause/from/fixture/join-on-is-not-null.sql +0 -1
  158. package/lib/parser/visitors/clause/from/fixture/join-on-is-null-fix.js +0 -16
  159. package/lib/parser/visitors/clause/from/fixture/join-on-is-null.sql +0 -1
  160. package/lib/parser/visitors/clause/from/fixture/join-on-like-fix.js +0 -17
  161. package/lib/parser/visitors/clause/from/fixture/join-on-like.sql +0 -1
  162. package/lib/parser/visitors/clause/from/fixture/join-on-not-eq-fix.js +0 -14
  163. package/lib/parser/visitors/clause/from/fixture/join-on-not-eq.sql +0 -1
  164. package/lib/parser/visitors/clause/from/fixture/join-on-number-fix.js +0 -14
  165. package/lib/parser/visitors/clause/from/fixture/join-on-number.sql +0 -1
  166. package/lib/parser/visitors/clause/from/fixture/join-on-or-fix.js +0 -14
  167. package/lib/parser/visitors/clause/from/fixture/join-on-or.sql +0 -1
  168. package/lib/parser/visitors/clause/from/fixture/join-on-param-fix.js +0 -14
  169. package/lib/parser/visitors/clause/from/fixture/join-on-param.sql +0 -1
  170. package/lib/parser/visitors/clause/from/fixture/join.sql +0 -1
  171. package/lib/parser/visitors/clause/from/fixture/json-each-fix.js +0 -10
  172. package/lib/parser/visitors/clause/from/fixture/json-each.sql +0 -1
  173. package/lib/parser/visitors/clause/from/fixture/limit-fix.js +0 -11
  174. package/lib/parser/visitors/clause/from/fixture/limit-offset-fix.js +0 -12
  175. package/lib/parser/visitors/clause/from/fixture/limit-offset.sql +0 -1
  176. package/lib/parser/visitors/clause/from/fixture/limit.sql +0 -1
  177. package/lib/parser/visitors/clause/from/fixture/order-by-desc-fix.js +0 -13
  178. package/lib/parser/visitors/clause/from/fixture/order-by-desc.sql +0 -1
  179. package/lib/parser/visitors/clause/from/fixture/order-by-fix.js +0 -11
  180. package/lib/parser/visitors/clause/from/fixture/order-by-multi-fix.js +0 -14
  181. package/lib/parser/visitors/clause/from/fixture/order-by-multi.sql +0 -1
  182. package/lib/parser/visitors/clause/from/fixture/order-by.sql +0 -1
  183. package/lib/parser/visitors/clause/from/fixture/unnest-fix.js +0 -10
  184. package/lib/parser/visitors/clause/from/fixture/unnest.sql +0 -1
  185. package/lib/parser/visitors/clause/insert/fixture/insert-fix.js +0 -11
  186. package/lib/parser/visitors/clause/insert/fixture/insert-identifier-fix.js +0 -17
  187. package/lib/parser/visitors/clause/insert/fixture/insert-identifier.sql +0 -1
  188. package/lib/parser/visitors/clause/insert/fixture/insert-multi-fix.js +0 -11
  189. package/lib/parser/visitors/clause/insert/fixture/insert-multi.sql +0 -1
  190. package/lib/parser/visitors/clause/insert/fixture/insert-number-fix.js +0 -18
  191. package/lib/parser/visitors/clause/insert/fixture/insert-number.sql +0 -1
  192. package/lib/parser/visitors/clause/insert/fixture/insert-returning-conflict-fix.js +0 -20
  193. package/lib/parser/visitors/clause/insert/fixture/insert-returning-conflict.sql +0 -1
  194. package/lib/parser/visitors/clause/insert/fixture/insert-returning-fix.js +0 -14
  195. package/lib/parser/visitors/clause/insert/fixture/insert-returning-id-fix.js +0 -14
  196. package/lib/parser/visitors/clause/insert/fixture/insert-returning-id.sql +0 -1
  197. package/lib/parser/visitors/clause/insert/fixture/insert-returning.sql +0 -1
  198. package/lib/parser/visitors/clause/insert/fixture/insert-string-fix.js +0 -17
  199. package/lib/parser/visitors/clause/insert/fixture/insert-string.sql +0 -1
  200. package/lib/parser/visitors/clause/insert/fixture/insert.sql +0 -1
  201. package/lib/parser/visitors/clause/on-conflict/fixture/on-conflict-fix.js +0 -17
  202. package/lib/parser/visitors/clause/on-conflict/fixture/on-conflict-nothing-fix.js +0 -14
  203. package/lib/parser/visitors/clause/on-conflict/fixture/on-conflict-nothing.sql +0 -1
  204. package/lib/parser/visitors/clause/on-conflict/fixture/on-conflict.sql +0 -1
  205. package/lib/parser/visitors/clause/select/fixture/select-abs-fix.js +0 -8
  206. package/lib/parser/visitors/clause/select/fixture/select-abs.sql +0 -1
  207. package/lib/parser/visitors/clause/select/fixture/select-alias-fix.js +0 -9
  208. package/lib/parser/visitors/clause/select/fixture/select-alias-param-fix.js +0 -8
  209. package/lib/parser/visitors/clause/select/fixture/select-alias-param.sql +0 -1
  210. package/lib/parser/visitors/clause/select/fixture/select-alias.sql +0 -1
  211. package/lib/parser/visitors/clause/select/fixture/select-avg-fix.js +0 -10
  212. package/lib/parser/visitors/clause/select/fixture/select-avg.sql +0 -1
  213. package/lib/parser/visitors/clause/select/fixture/select-count-col-fix.js +0 -10
  214. package/lib/parser/visitors/clause/select/fixture/select-count-col.sql +0 -1
  215. package/lib/parser/visitors/clause/select/fixture/select-distinct-fix.js +0 -10
  216. package/lib/parser/visitors/clause/select/fixture/select-distinct-multi-fix.js +0 -11
  217. package/lib/parser/visitors/clause/select/fixture/select-distinct-multi.sql +0 -1
  218. package/lib/parser/visitors/clause/select/fixture/select-distinct.sql +0 -1
  219. package/lib/parser/visitors/clause/select/fixture/select-fix.js +0 -8
  220. package/lib/parser/visitors/clause/select/fixture/select-last-insert-rowid-fix.js +0 -8
  221. package/lib/parser/visitors/clause/select/fixture/select-last-insert-rowid.sql +0 -1
  222. package/lib/parser/visitors/clause/select/fixture/select-lastval-fix.js +0 -8
  223. package/lib/parser/visitors/clause/select/fixture/select-lastval.sql +0 -1
  224. package/lib/parser/visitors/clause/select/fixture/select-min-max-fix.js +0 -13
  225. package/lib/parser/visitors/clause/select/fixture/select-min-max.sql +0 -1
  226. package/lib/parser/visitors/clause/select/fixture/select-number-fix.js +0 -11
  227. package/lib/parser/visitors/clause/select/fixture/select-number.sql +0 -1
  228. package/lib/parser/visitors/clause/select/fixture/select-param-fix.js +0 -9
  229. package/lib/parser/visitors/clause/select/fixture/select-param.sql +0 -1
  230. package/lib/parser/visitors/clause/select/fixture/select-sum-fix.js +0 -10
  231. package/lib/parser/visitors/clause/select/fixture/select-sum.sql +0 -1
  232. package/lib/parser/visitors/clause/select/fixture/select.sql +0 -1
  233. package/lib/parser/visitors/clause/union/fixture/union-all-fix.js +0 -10
  234. package/lib/parser/visitors/clause/union/fixture/union-all.sql +0 -1
  235. package/lib/parser/visitors/clause/update/fixture/update-fix.js +0 -11
  236. package/lib/parser/visitors/clause/update/fixture/update-identifier-fix.js +0 -11
  237. package/lib/parser/visitors/clause/update/fixture/update-identifier.sql +0 -1
  238. package/lib/parser/visitors/clause/update/fixture/update-no-where-fix.js +0 -8
  239. package/lib/parser/visitors/clause/update/fixture/update-no-where.sql +0 -1
  240. package/lib/parser/visitors/clause/update/fixture/update-number-fix.js +0 -11
  241. package/lib/parser/visitors/clause/update/fixture/update-number.sql +0 -1
  242. package/lib/parser/visitors/clause/update/fixture/update-string-fix.js +0 -11
  243. package/lib/parser/visitors/clause/update/fixture/update-string.sql +0 -1
  244. package/lib/parser/visitors/clause/update/fixture/update-where-and-fix.js +0 -11
  245. package/lib/parser/visitors/clause/update/fixture/update-where-and.sql +0 -1
  246. package/lib/parser/visitors/clause/update/fixture/update-where-in-fix.js +0 -16
  247. package/lib/parser/visitors/clause/update/fixture/update-where-in.sql +0 -1
  248. package/lib/parser/visitors/clause/update/fixture/update-where-is-not-null-fix.js +0 -13
  249. package/lib/parser/visitors/clause/update/fixture/update-where-is-not-null.sql +0 -1
  250. package/lib/parser/visitors/clause/update/fixture/update-where-is-null-fix.js +0 -13
  251. package/lib/parser/visitors/clause/update/fixture/update-where-is-null.sql +0 -1
  252. package/lib/parser/visitors/clause/update/fixture/update-where-like-fix.js +0 -14
  253. package/lib/parser/visitors/clause/update/fixture/update-where-like.sql +0 -1
  254. package/lib/parser/visitors/clause/update/fixture/update-where-not-in-fix.js +0 -16
  255. package/lib/parser/visitors/clause/update/fixture/update-where-not-in.sql +0 -1
  256. package/lib/parser/visitors/clause/update/fixture/update-where-or-fix.js +0 -11
  257. package/lib/parser/visitors/clause/update/fixture/update-where-or.sql +0 -1
  258. package/lib/parser/visitors/clause/update/fixture/update.sql +0 -1
  259. package/lib/parser/visitors/clause/where/fixture/where-between-fix.js +0 -15
  260. package/lib/parser/visitors/clause/where/fixture/where-between.sql +0 -1
  261. package/lib/parser/visitors/clause/where/fixture/where-boolean-fix.js +0 -11
  262. package/lib/parser/visitors/clause/where/fixture/where-boolean.sql +0 -1
  263. package/lib/parser/visitors/clause/where/fixture/where-compare-fix.js +0 -11
  264. package/lib/parser/visitors/clause/where/fixture/where-compare.sql +0 -1
  265. package/lib/parser/visitors/clause/where/fixture/where-fix.js +0 -11
  266. package/lib/parser/visitors/clause/where/fixture/where-gte-fix.js +0 -11
  267. package/lib/parser/visitors/clause/where/fixture/where-gte.sql +0 -1
  268. package/lib/parser/visitors/clause/where/fixture/where-in-fix.js +0 -16
  269. package/lib/parser/visitors/clause/where/fixture/where-in.sql +0 -1
  270. package/lib/parser/visitors/clause/where/fixture/where-is-not-null-fix.js +0 -13
  271. package/lib/parser/visitors/clause/where/fixture/where-is-not-null.sql +0 -1
  272. package/lib/parser/visitors/clause/where/fixture/where-is-null-fix.js +0 -13
  273. package/lib/parser/visitors/clause/where/fixture/where-is-null.sql +0 -1
  274. package/lib/parser/visitors/clause/where/fixture/where-like-fix.js +0 -14
  275. package/lib/parser/visitors/clause/where/fixture/where-like.sql +0 -1
  276. package/lib/parser/visitors/clause/where/fixture/where-member-fix.js +0 -11
  277. package/lib/parser/visitors/clause/where/fixture/where-member.sql +0 -1
  278. package/lib/parser/visitors/clause/where/fixture/where-not-eq-fix.js +0 -11
  279. package/lib/parser/visitors/clause/where/fixture/where-not-eq.sql +0 -1
  280. package/lib/parser/visitors/clause/where/fixture/where-not-in-fix.js +0 -16
  281. package/lib/parser/visitors/clause/where/fixture/where-not-in.sql +0 -1
  282. package/lib/parser/visitors/clause/where/fixture/where-null-fix.js +0 -11
  283. package/lib/parser/visitors/clause/where/fixture/where-null.sql +0 -1
  284. package/lib/parser/visitors/clause/where/fixture/where-number-fix.js +0 -11
  285. package/lib/parser/visitors/clause/where/fixture/where-number.sql +0 -1
  286. package/lib/parser/visitors/clause/where/fixture/where-or-fix.js +0 -11
  287. package/lib/parser/visitors/clause/where/fixture/where-or.sql +0 -1
  288. package/lib/parser/visitors/clause/where/fixture/where.sql +0 -1
  289. package/lib/parser/visitors/clause/with-named/fixture/with-named-select-fix.js +0 -19
  290. package/lib/parser/visitors/clause/with-named/fixture/with-named-select.sql +0 -1
  291. package/lib/parser/visitors/clause/with-named/fixture/with-recursive-fix.js +0 -27
  292. package/lib/parser/visitors/clause/with-named/fixture/with-recursive-multi-fix.js +0 -38
  293. package/lib/parser/visitors/clause/with-named/fixture/with-recursive-multi.sql +0 -1
  294. package/lib/parser/visitors/clause/with-named/fixture/with-recursive-no-columns-fix.js +0 -20
  295. package/lib/parser/visitors/clause/with-named/fixture/with-recursive-no-columns.sql +0 -1
  296. package/lib/parser/visitors/clause/with-named/fixture/with-recursive.sql +0 -1
  297. package/lib/printer/fixture/select-fix.sql +0 -2
  298. package/lib/printer/fixture/select.js +0 -3
  299. package/lib/printer/visitors/call-expression/clauses/avg/fixture/avg-fix.sql +0 -2
  300. package/lib/printer/visitors/call-expression/clauses/avg/fixture/avg.js +0 -1
  301. package/lib/printer/visitors/call-expression/clauses/between/fixture/between-fix.sql +0 -3
  302. package/lib/printer/visitors/call-expression/clauses/between/fixture/between.js +0 -3
  303. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-fix.sql +0 -2
  304. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one-fix.js +0 -3
  305. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one-fix.sql +0 -2
  306. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one.js +0 -1
  307. package/lib/printer/visitors/call-expression/clauses/count/fixture/count.js +0 -1
  308. package/lib/printer/visitors/call-expression/clauses/create-sequence/fixture/create-sequence-fix.sql +0 -1
  309. package/lib/printer/visitors/call-expression/clauses/create-sequence/fixture/create-sequence.js +0 -3
  310. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTable-fix.sql +0 -2
  311. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTable.js +0 -5
  312. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableIdentity-fix.sql +0 -2
  313. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableIdentity.js +0 -5
  314. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableIdentityByDefault-fix.sql +0 -2
  315. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableIdentityByDefault.js +0 -5
  316. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableSerial-fix.sql +0 -2
  317. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableSerial.js +0 -5
  318. package/lib/printer/visitors/call-expression/clauses/delete/fixture/delete-fix.sql +0 -2
  319. package/lib/printer/visitors/call-expression/clauses/delete/fixture/delete.js +0 -3
  320. package/lib/printer/visitors/call-expression/clauses/desc/fixture/desc-fix.sql +0 -3
  321. package/lib/printer/visitors/call-expression/clauses/desc/fixture/desc.js +0 -13
  322. package/lib/printer/visitors/call-expression/clauses/distinct/fixture/distinct-fix.sql +0 -2
  323. package/lib/printer/visitors/call-expression/clauses/distinct/fixture/distinct-multi-fix.sql +0 -2
  324. package/lib/printer/visitors/call-expression/clauses/distinct/fixture/distinct-multi.js +0 -11
  325. package/lib/printer/visitors/call-expression/clauses/distinct/fixture/distinct.js +0 -10
  326. package/lib/printer/visitors/call-expression/clauses/from/fixture/from-fix.js +0 -3
  327. package/lib/printer/visitors/call-expression/clauses/from/fixture/from-fix.sql +0 -2
  328. package/lib/printer/visitors/call-expression/clauses/from/fixture/from.js +0 -1
  329. package/lib/printer/visitors/call-expression/clauses/from/fixture/generate-series-fix.sql +0 -2
  330. package/lib/printer/visitors/call-expression/clauses/from/fixture/generate-series.js +0 -3
  331. package/lib/printer/visitors/call-expression/clauses/from/fixture/group-by-having-fix.sql +0 -5
  332. package/lib/printer/visitors/call-expression/clauses/from/fixture/group-by-having.js +0 -22
  333. package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-fix.sql +0 -3
  334. package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-multi-fix.sql +0 -3
  335. package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-multi.js +0 -13
  336. package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-sum-fix.sql +0 -4
  337. package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-sum.js +0 -19
  338. package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by.js +0 -14
  339. package/lib/printer/visitors/call-expression/clauses/having/fixture/having-fix.sql +0 -3
  340. package/lib/printer/visitors/call-expression/clauses/having/fixture/having.js +0 -16
  341. package/lib/printer/visitors/call-expression/clauses/insert/fixture/insert-fix.sql +0 -1
  342. package/lib/printer/visitors/call-expression/clauses/insert/fixture/insert.js +0 -3
  343. package/lib/printer/visitors/call-expression/clauses/into/fixture/into-fix.js +0 -3
  344. package/lib/printer/visitors/call-expression/clauses/into/fixture/into-fix.sql +0 -1
  345. package/lib/printer/visitors/call-expression/clauses/into/fixture/into.js +0 -1
  346. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column-fix.js +0 -3
  347. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column-fix.sql +0 -1
  348. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column.js +0 -3
  349. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-bare-fix.sql +0 -3
  350. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-bare.js +0 -1
  351. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-fix.sql +0 -4
  352. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-multi-fix.sql +0 -4
  353. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-multi.js +0 -1
  354. package/lib/printer/visitors/call-expression/clauses/join/fixture/join.js +0 -1
  355. package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/fixture/lastInsertRowid-fix.sql +0 -2
  356. package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/fixture/lastInsertRowid.js +0 -3
  357. package/lib/printer/visitors/call-expression/clauses/lastval/fixture/lastval-fix.sql +0 -2
  358. package/lib/printer/visitors/call-expression/clauses/lastval/fixture/lastval.js +0 -3
  359. package/lib/printer/visitors/call-expression/clauses/limit/fixture/limit-fix.sql +0 -3
  360. package/lib/printer/visitors/call-expression/clauses/limit/fixture/limit-offset-fix.sql +0 -4
  361. package/lib/printer/visitors/call-expression/clauses/limit/fixture/limit-offset.js +0 -12
  362. package/lib/printer/visitors/call-expression/clauses/limit/fixture/limit.js +0 -11
  363. package/lib/printer/visitors/call-expression/clauses/max/fixture/max-fix.sql +0 -2
  364. package/lib/printer/visitors/call-expression/clauses/max/fixture/max.js +0 -1
  365. package/lib/printer/visitors/call-expression/clauses/min/fixture/min-fix.sql +0 -2
  366. package/lib/printer/visitors/call-expression/clauses/min/fixture/min.js +0 -1
  367. package/lib/printer/visitors/call-expression/clauses/nextval/fixture/nextval-fix.sql +0 -3
  368. package/lib/printer/visitors/call-expression/clauses/nextval/fixture/nextval.js +0 -6
  369. package/lib/printer/visitors/call-expression/clauses/not-in-list/fixture/not-in-list-fix.sql +0 -3
  370. package/lib/printer/visitors/call-expression/clauses/not-in-list/fixture/not-in-list.js +0 -3
  371. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict-fix.sql +0 -2
  372. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict-multi-fix.sql +0 -2
  373. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict-multi.js +0 -3
  374. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict.js +0 -3
  375. package/lib/printer/visitors/call-expression/clauses/order-by/fixture/order-by-fix.sql +0 -3
  376. package/lib/printer/visitors/call-expression/clauses/order-by/fixture/order-by-multi-fix.sql +0 -3
  377. package/lib/printer/visitors/call-expression/clauses/order-by/fixture/order-by-multi.js +0 -14
  378. package/lib/printer/visitors/call-expression/clauses/order-by/fixture/order-by.js +0 -11
  379. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-conflict-fix.sql +0 -3
  380. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-conflict.js +0 -3
  381. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-fix.sql +0 -2
  382. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-id-fix.sql +0 -2
  383. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-id.js +0 -7
  384. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-multi-fix.sql +0 -2
  385. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-multi.js +0 -3
  386. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning.js +0 -7
  387. package/lib/printer/visitors/call-expression/clauses/section/fixture/section-fix.sql +0 -3
  388. package/lib/printer/visitors/call-expression/clauses/section/fixture/section-multi-fix.sql +0 -8
  389. package/lib/printer/visitors/call-expression/clauses/section/fixture/section-multi.js +0 -6
  390. package/lib/printer/visitors/call-expression/clauses/section/fixture/section.js +0 -3
  391. package/lib/printer/visitors/call-expression/clauses/select/fixture/select-fix.sql +0 -2
  392. package/lib/printer/visitors/call-expression/clauses/select/fixture/select.js +0 -3
  393. package/lib/printer/visitors/call-expression/clauses/select/fixture/string-fix.sql +0 -1
  394. package/lib/printer/visitors/call-expression/clauses/select/fixture/string.js +0 -3
  395. package/lib/printer/visitors/call-expression/clauses/set/fixture/set-fix.sql +0 -1
  396. package/lib/printer/visitors/call-expression/clauses/sum/fixture/sum-fix.sql +0 -2
  397. package/lib/printer/visitors/call-expression/clauses/sum/fixture/sum.js +0 -1
  398. package/lib/printer/visitors/call-expression/clauses/union-all/fixture/union-all-fix.sql +0 -3
  399. package/lib/printer/visitors/call-expression/clauses/union-all/fixture/union-all.js +0 -1
  400. package/lib/printer/visitors/call-expression/clauses/update/fixture/update-fix.sql +0 -3
  401. package/lib/printer/visitors/call-expression/clauses/update/fixture/update.js +0 -3
  402. package/lib/printer/visitors/call-expression/clauses/values/fixture/values-fix.sql +0 -1
  403. package/lib/printer/visitors/call-expression/clauses/values/fixture/values-quoted-fix.sql +0 -1
  404. package/lib/printer/visitors/call-expression/clauses/values/fixture/values-quoted.js +0 -1
  405. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-fix.sql +0 -1
  406. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-gte-fix.sql +0 -1
  407. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-gte.js +0 -3
  408. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-in-fix.sql +0 -1
  409. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-in.js +0 -3
  410. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-is-not-null-fix.sql +0 -1
  411. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-is-not-null.js +0 -3
  412. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-is-null-fix.sql +0 -1
  413. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-is-null.js +0 -3
  414. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-like-fix.sql +0 -1
  415. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-like.js +0 -3
  416. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-ne-fix.sql +0 -1
  417. package/lib/printer/visitors/call-expression/clauses/where/fixture/where-ne.js +0 -3
  418. package/lib/printer/visitors/call-expression/clauses/where/fixture/where.js +0 -3
  419. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-insert-fix.sql +0 -12
  420. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-insert.js +0 -11
  421. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-select-fix.sql +0 -8
  422. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-select.js +0 -19
  423. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/withNamed-fix.sql +0 -12
  424. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/withNamed.js +0 -11
  425. package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-fix.sql +0 -10
  426. package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-multi-fix.sql +0 -14
  427. package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-multi.js +0 -38
  428. package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-no-columns-fix.sql +0 -8
  429. package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-no-columns.js +0 -20
  430. package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive.js +0 -27
  431. package/lib/printer/visitors/fixture/binary-expression-fix.sql +0 -1
  432. package/lib/printer/visitors/fixture/binary-expression.js +0 -3
@@ -3,8 +3,25 @@ import {convertClause} from '#parser/clause';
3
3
 
4
4
  const {callExpression, identifier} = types;
5
5
 
6
- export const convertUnionAll = (stmt) => {
7
- return callExpression(identifier('unionAll'), [
6
+ const getOpNames = (operator) => {
7
+ if (Array.isArray(operator)) {
8
+ const names = [];
9
+
10
+ for (const kw of operator)
11
+ names.push(kw.name);
12
+
13
+ return names;
14
+ }
15
+
16
+ return [operator.name];
17
+ };
18
+
19
+ export const convertUnion = (stmt) => {
20
+ const ops = getOpNames(stmt.operator);
21
+ const isAll = ops.includes('ALL');
22
+ const name = isAll ? 'unionAll' : 'union';
23
+
24
+ return callExpression(identifier(name), [
8
25
  convertClause(stmt.left),
9
26
  convertClause(stmt.right),
10
27
  ]);
@@ -1,6 +1,7 @@
1
1
  import {types} from '@putout/babel';
2
2
  import {convertWhere} from '#parser/clause/where';
3
3
  import {convertOperand} from '#parser/clause/operand';
4
+ import {convertReturning} from '#parser/clause/returning';
4
5
  import {findClause} from '#parser/clause/find';
5
6
 
6
7
  const {
@@ -12,7 +13,9 @@ const {
12
13
  export const convertUpdate = ({clauses}) => {
13
14
  const updateClause = findClause(clauses, 'update_clause');
14
15
  const setClause = findClause(clauses, 'set_clause');
16
+ const fromClause = findClause(clauses, 'from_clause');
15
17
  const whereClause = findClause(clauses, 'where_clause');
18
+ const returningClause = findClause(clauses, 'returning_clause');
16
19
 
17
20
  const table = identifier(updateClause.tables.items[0].name);
18
21
  const setArgs = [];
@@ -26,8 +29,14 @@ export const convertUpdate = ({clauses}) => {
26
29
  const args = [
27
30
  table,
28
31
  setCall,
32
+ fromClause && convertFromClause(fromClause),
29
33
  whereClause && convertWhere(whereClause),
34
+ returningClause && convertReturning(returningClause),
30
35
  ].filter(Boolean);
31
36
 
32
37
  return callExpression(identifier('update'), args);
33
38
  };
39
+
40
+ const convertFromClause = (fromClause) => callExpression(identifier('updateFrom'), [
41
+ identifier(fromClause.expr.name),
42
+ ]);
@@ -1,101 +1,59 @@
1
1
  import {types} from '@putout/babel';
2
2
  import {convertOperand} from '#parser/clause/operand';
3
-
4
- const isString = (a) => typeof a === 'string';
3
+ import {convertClause} from '#parser/clause';
4
+ import {convertBinary} from '#parser/clause/binary';
5
5
 
6
6
  const {
7
7
  logicalExpression,
8
8
  identifier,
9
9
  callExpression,
10
- binaryExpression,
11
10
  } = types;
12
11
 
13
- const opName = (op) => {
14
- if (Array.isArray(op))
15
- return op
16
- .map((k) => k.name)
17
- .join(' ');
18
-
19
- if (isString(op))
20
- return op;
21
-
22
- return op?.name ?? '';
23
- };
24
-
25
- const SQL_TO_JS_OP = {
26
- '=': '===',
27
- '!=': '!==',
28
- '>=': '>=',
29
- '<=': '<=',
30
- '>': '>',
31
- '<': '<',
32
- };
33
-
34
12
  const convertAnd = (node) => logicalExpression('&&', convertCondition(node.left), convertCondition(node.right));
35
13
  const convertOr = (node) => logicalExpression('||', convertCondition(node.left), convertCondition(node.right));
36
14
 
37
- export const convertBetween = (node) => callExpression(identifier('between'), [
38
- convertOperand(node.left),
39
- convertOperand(node.begin),
40
- convertOperand(node.end),
41
- ]);
15
+ const isNotBetween = (node) => Array.isArray(node.betweenKw) && node.betweenKw[0].name === 'NOT';
42
16
 
43
- const convertBinary = (node) => {
44
- const op = opName(node.operator);
45
-
46
- if (op === 'LIKE')
47
- return callExpression(identifier('like'), [
48
- convertOperand(node.left),
49
- convertOperand(node.right),
50
- ]);
51
-
52
- if (op === 'IS')
53
- return callExpression(identifier('isNull'), [
54
- convertOperand(node.left),
55
- ]);
56
-
57
- if (op === 'IS NOT')
58
- return callExpression(identifier('isNotNull'), [
59
- convertOperand(node.left),
60
- ]);
61
-
62
- if (op === 'IN') {
63
- const items = node.right.expr.items.map(convertOperand);
64
-
65
- return callExpression(identifier('inList'), [
66
- convertOperand(node.left),
67
- ...items,
68
- ]);
69
- }
70
-
71
- if (op === 'NOT IN') {
72
- const items = node.right.expr.items.map(convertOperand);
73
-
74
- return callExpression(identifier('notInList'), [
75
- convertOperand(node.left),
76
- ...items,
77
- ]);
78
- }
17
+ export const convertBetween = (node) => {
18
+ const args = [
19
+ convertOperand(node.left),
20
+ convertOperand(node.begin),
21
+ convertOperand(node.end),
22
+ ];
79
23
 
80
- const jsOp = SQL_TO_JS_OP[op] ?? '===';
24
+ if (isNotBetween(node))
25
+ return callExpression(identifier('notBetween'), args);
81
26
 
82
- return binaryExpression(
83
- jsOp,
84
- convertOperand(node.left),
85
- convertOperand(node.right),
86
- );
27
+ return callExpression(identifier('between'), args);
87
28
  };
88
29
 
30
+ const isExists = (node) => node.type === 'prefix_op_expr' && node.operator.name === 'EXISTS';
31
+ const isNotExists = (node) => node.type === 'prefix_op_expr' && node.operator.name === 'NOT' && isExists(node.expr);
32
+ const isParenExpr = (node) => node.type === 'paren_expr';
33
+
89
34
  export const convertCondition = (node) => {
90
- if (node.operator?.name === 'AND')
35
+ if (node.operator && node.operator.name === 'AND')
91
36
  return convertAnd(node);
92
37
 
93
- if (node.operator?.name === 'OR')
38
+ if (node.operator && node.operator.name === 'OR')
94
39
  return convertOr(node);
95
40
 
96
41
  if (node.type === 'between_expr')
97
42
  return convertBetween(node);
98
43
 
44
+ if (isNotExists(node))
45
+ return callExpression(identifier('notExists'), [
46
+ convertClause(node.expr.expr.expr),
47
+ ]);
48
+
49
+ if (isExists(node))
50
+ return callExpression(identifier('exists'), [
51
+ convertClause(node.expr.expr),
52
+ ]);
53
+
54
+ if (isParenExpr(node))
55
+ return convertCondition(node.expr);
56
+
99
57
  return convertBinary(node);
100
58
  };
101
59
 
@@ -1,4 +1,11 @@
1
- export const ArrayExpression = (path, {write, traverse}) => {
1
+ import {isJsonTuple, printJsonTuple} from './call-expression/clauses/json-op.js';
2
+
3
+ export const ArrayExpression = (path, printer) => {
4
+ const {write, traverse} = printer;
5
+
6
+ if (isJsonTuple(path.node))
7
+ return printJsonTuple(path, printer);
8
+
2
9
  const elements = path.get('elements');
3
10
  const n = elements.length - 1;
4
11
 
@@ -0,0 +1,8 @@
1
+ export const BooleanLiteral = (path, {write}) => {
2
+ const {value} = path.node;
3
+
4
+ if (value)
5
+ return write('TRUE');
6
+
7
+ write('FALSE');
8
+ };
@@ -1,11 +1,28 @@
1
1
  import {clauses} from './clauses/clauses.js';
2
2
 
3
+ const printGenericCall = (path, {write, traverse}) => {
4
+ const {name} = path.node.callee;
5
+ const args = path.get('arguments');
6
+
7
+ write(name);
8
+ write('(');
9
+
10
+ for (const [i, arg] of args.entries()) {
11
+ if (i > 0)
12
+ write(', ');
13
+
14
+ traverse(arg);
15
+ }
16
+
17
+ write(')');
18
+ };
19
+
3
20
  export const CallExpression = (path, printer) => {
4
21
  const {name} = path.node.callee;
5
22
  const visit = clauses[name];
6
23
 
7
24
  if (!visit)
8
- throw Error(`${name} not supported yet`);
25
+ return printGenericCall(path, printer);
9
26
 
10
27
  visit(path, printer);
11
28
  };
@@ -0,0 +1,4 @@
1
+ export const addColumn = (path, {write, traverse}) => {
2
+ write('ADD COLUMN ');
3
+ traverse(path.get('arguments')[0]);
4
+ };
@@ -0,0 +1,10 @@
1
+ export const ALL = (path, {write, traverse}) => {
2
+ write('ALL(');
3
+
4
+ const args = path.get('arguments');
5
+
6
+ for (const arg of args)
7
+ traverse(arg);
8
+
9
+ write(')');
10
+ };
@@ -0,0 +1,8 @@
1
+ export const alterColumnType = (path, {write, traverse}) => {
2
+ const [col, type] = path.get('arguments');
3
+
4
+ write('ALTER COLUMN ');
5
+ traverse(col);
6
+ write(' TYPE ');
7
+ traverse(type);
8
+ };
@@ -0,0 +1,12 @@
1
+ export const alterTable = (path, {write, traverse}) => {
2
+ const args = path.get('arguments');
3
+ const [table] = args;
4
+
5
+ write('ALTER TABLE ');
6
+ traverse(table);
7
+
8
+ for (const arg of args.slice(1)) {
9
+ write.newline();
10
+ traverse(arg);
11
+ }
12
+ };
@@ -0,0 +1,10 @@
1
+ export const ANY = (path, {write, traverse}) => {
2
+ write('ANY(');
3
+
4
+ const args = path.get('arguments');
5
+
6
+ for (const arg of args)
7
+ traverse(arg);
8
+
9
+ write(')');
10
+ };
@@ -0,0 +1,14 @@
1
+ export const array = (path, {write, traverse}) => {
2
+ const args = path.get('arguments');
3
+
4
+ write('ARRAY[');
5
+
6
+ for (const [i, arg] of args.entries()) {
7
+ if (i > 0)
8
+ write(', ');
9
+
10
+ traverse(arg);
11
+ }
12
+
13
+ write(']');
14
+ };
@@ -0,0 +1,8 @@
1
+ export const attach = (path, {write, traverse}) => {
2
+ const [file, schema] = path.get('arguments');
3
+
4
+ write('ATTACH DATABASE ');
5
+ traverse(file);
6
+ write(' AS ');
7
+ traverse(schema);
8
+ };
@@ -0,0 +1,3 @@
1
+ export const begin = (path, {write}) => {
2
+ write('BEGIN');
3
+ };
@@ -0,0 +1,33 @@
1
+ const isElseClause = (path) => {
2
+ const {callee} = path.node;
3
+
4
+ return callee && callee.name === 'else_';
5
+ };
6
+
7
+ export const caseWhen = (path, printer) => {
8
+ const {write} = printer;
9
+ const args = path.get('arguments');
10
+ const lastArg = args.at(-1);
11
+ const hasElse = isElseClause(lastArg);
12
+
13
+ write('CASE ');
14
+
15
+ for (let i = 0; i < args.length - 1; i += 2) {
16
+ write('WHEN ');
17
+ printer.traverse(args[i]);
18
+ write(' THEN ');
19
+ printer.traverse(args[i + 1]);
20
+
21
+ // space between clauses / before ELSE — but not trailing
22
+ if (i < args.length - 3)
23
+ write(' ');
24
+ }
25
+
26
+ if (hasElse) {
27
+ write(' ');
28
+ write('ELSE ');
29
+ printer.traverse(lastArg.get('arguments')[0]);
30
+ }
31
+
32
+ write(' END');
33
+ };
@@ -0,0 +1,9 @@
1
+ export const cast = (path, {write, traverse}) => {
2
+ const [expr, typeArg] = path.get('arguments');
3
+
4
+ write('CAST(');
5
+ traverse(expr);
6
+ write(' AS ');
7
+ traverse(typeArg);
8
+ write(')');
9
+ };
@@ -0,0 +1,8 @@
1
+ export const check = (path, {write, traverse}) => {
2
+ write('CHECK (');
3
+
4
+ const [arg] = path.get('arguments');
5
+ traverse(arg);
6
+
7
+ write(')');
8
+ };
@@ -1,4 +1,10 @@
1
+ import {fullOuterJoin} from './full-outer-join/full-outer-join.js';
1
2
  import {join} from './join/join.js';
3
+ import {naturalJoin} from './natural-join/natural-join.js';
4
+ import {notLike} from './not-like/not-like.js';
5
+ import {ilike} from './ilike/ilike.js';
6
+ import {similarTo} from './similar-to/similar-to.js';
7
+ import {isDistinctFrom} from './is-distinct-from/is-distinct-from.js';
2
8
  import {on} from './on/on.js';
3
9
  import {select} from './select/select.js';
4
10
  import {from} from './from/from.js';
@@ -8,6 +14,7 @@ import {into} from './into/into.js';
8
14
  import {values} from './values/values.js';
9
15
  import {onConflict} from './on-conflict/on-conflict.js';
10
16
  import {update} from './update/update.js';
17
+ import {updateFrom} from './update-from/update-from.js';
11
18
  import {set} from './set/set.js';
12
19
  import {deleteFrom} from './delete/delete.js';
13
20
  import {section} from './section/section.js';
@@ -16,6 +23,7 @@ import {returning} from './returning/returning.js';
16
23
  import {withNamed} from './with-named/with-named.js';
17
24
  import {withRecursive} from './with-recursive/with-recursive.js';
18
25
  import {unionAll} from './union-all/union-all.js';
26
+ import {union} from './union/union.js';
19
27
  import {groupBy} from './group-by/group-by.js';
20
28
  import {having} from './having/having.js';
21
29
  import {sum} from './sum/sum.js';
@@ -28,8 +36,55 @@ import {limit} from './limit/limit.js';
28
36
  import {distinct} from './distinct/distinct.js';
29
37
  import {notInList} from './not-in-list/not-in-list.js';
30
38
  import {between} from './between/between.js';
39
+ import {notBetween} from './not-between/not-between.js';
40
+ import {subquery} from './subquery/subquery.js';
41
+ import {inQuery} from './in-query/in-query.js';
42
+ import {exists} from './exists/exists.js';
43
+ import {notExists} from './not-exists/not-exists.js';
44
+ import {cast} from './cast/cast.js';
45
+ import {pgCast} from './pg-cast/pg-cast.js';
46
+ import {ANY} from './any/any.js';
47
+ import {ALL} from './all/all.js';
48
+ import {lateralJoin} from './lateral-join/lateral-join.js';
49
+ import {lateralSubquery} from './lateral-subquery/lateral-subquery.js';
50
+ import {createIndex} from './create-index/create-index.js';
51
+ import {createUniqueIndex} from './create-index/create-unique-index.js';
52
+ import {vacuum} from './vacuum/vacuum.js';
53
+ import {row} from './row/row.js';
54
+ import {notNull} from './not-null/not-null.js';
55
+ import {default_} from './default/default.js';
56
+ import {unique} from './unique/unique.js';
57
+ import {check} from './check/check.js';
58
+ import {references} from './references/references.js';
59
+ import {createTableIfNotExists} from './create-table-if-not-exists/create-table-if-not-exists.js';
60
+ import {caseWhen} from './case-when/case-when.js';
61
+ import {leftJoin} from './left-join/left-join.js';
62
+ import {rightJoin} from './right-join/right-join.js';
63
+ import {innerJoin} from './inner-join/inner-join.js';
64
+ import {leftOuterJoin} from './left-outer-join/left-outer-join.js';
65
+ import {crossJoin} from './cross-join/cross-join.js';
31
66
  import {createTable} from './create-table/create-table.js';
67
+ import {alterTable} from './alter-table/alter-table.js';
68
+ import {addColumn} from './add-column/add-column.js';
69
+ import {dropColumn} from './drop-column/drop-column.js';
70
+ import {renameColumn} from './rename-column/rename-column.js';
71
+ import {alterColumnType} from './alter-column-type/alter-column-type.js';
72
+ import {begin} from './begin/begin.js';
73
+ import {commit} from './commit/commit.js';
74
+ import {rollback} from './rollback/rollback.js';
75
+ import {rollbackTo} from './rollback-to/rollback-to.js';
76
+ import {savepoint} from './savepoint/savepoint.js';
32
77
  import {createSequence} from './create-sequence/create-sequence.js';
78
+ import {extract} from './extract/extract.js';
79
+ import {concat} from './concat/concat.js';
80
+ import {array} from './array/array.js';
81
+ import {over} from './over/over.js';
82
+ import {partitionBy} from './partition-by/partition-by.js';
83
+ import {rowNumber} from './row-number/row-number.js';
84
+ import {dropTable} from './drop-table/drop-table.js';
85
+ import {dropIndex} from './drop-index/drop-index.js';
86
+ import {pragma} from './pragma/pragma.js';
87
+ import {attach} from './attach/attach.js';
33
88
  import {column} from './column/column.js';
34
89
  import {autoIncrement} from './auto-increment/auto-increment.js';
35
90
  import {serial} from './serial/serial.js';
@@ -39,6 +94,8 @@ import {lastval} from './lastval/lastval.js';
39
94
  import {nextval} from './nextval/nextval.js';
40
95
  import {like} from './like/like.js';
41
96
  import {isNull, isNotNull} from './is-null/is-null.js';
97
+ import {orReplace} from './or-replace/or-replace.js';
98
+ import {orIgnore} from './or-ignore/or-ignore.js';
42
99
  import {inList} from './in-list/in-list.js';
43
100
  import {
44
101
  identity,
@@ -54,9 +111,27 @@ export const clauses = {
54
111
  where,
55
112
  insert,
56
113
  into,
114
+ orReplace,
115
+ orIgnore,
116
+ pgCast,
117
+ ANY,
118
+ ALL,
119
+ lateralJoin,
120
+ lateralSubquery,
121
+ createIndex,
122
+ createUniqueIndex,
123
+ vacuum,
124
+ row,
125
+ notNull,
126
+ default_,
127
+ unique,
128
+ check,
129
+ references,
130
+ createTableIfNotExists,
57
131
  values,
58
132
  onConflict,
59
133
  update,
134
+ updateFrom,
60
135
  set,
61
136
  deleteFrom,
62
137
  section,
@@ -64,6 +139,7 @@ export const clauses = {
64
139
  withNamed,
65
140
  withRecursive,
66
141
  unionAll,
142
+ union,
67
143
  groupBy,
68
144
  having,
69
145
  sum,
@@ -75,9 +151,43 @@ export const clauses = {
75
151
  limit,
76
152
  distinct,
77
153
  notInList,
154
+ notBetween,
78
155
  between,
156
+ subquery,
157
+ inQuery,
158
+ exists,
159
+ notExists,
160
+ cast,
161
+ caseWhen,
162
+ leftJoin,
163
+ rightJoin,
164
+ innerJoin,
165
+ leftOuterJoin,
166
+ fullOuterJoin,
167
+ naturalJoin,
168
+ crossJoin,
79
169
  createTable,
170
+ alterTable,
171
+ addColumn,
172
+ dropColumn,
173
+ renameColumn,
174
+ alterColumnType,
175
+ begin,
176
+ commit,
177
+ rollback,
178
+ rollbackTo,
179
+ savepoint,
80
180
  createSequence,
181
+ extract,
182
+ concat,
183
+ array,
184
+ over,
185
+ partitionBy,
186
+ rowNumber,
187
+ dropTable,
188
+ dropIndex,
189
+ pragma,
190
+ attach,
81
191
  column,
82
192
  autoIncrement,
83
193
  serial,
@@ -86,6 +196,10 @@ export const clauses = {
86
196
  lastval,
87
197
  nextval,
88
198
  like,
199
+ notLike,
200
+ ilike,
201
+ similarTo,
202
+ isDistinctFrom,
89
203
  isNull,
90
204
  isNotNull,
91
205
  inList,
@@ -0,0 +1,3 @@
1
+ export const commit = (path, {write}) => {
2
+ write('COMMIT');
3
+ };
@@ -0,0 +1,7 @@
1
+ export const concat = (path, {write, traverse}) => {
2
+ const args = path.get('arguments');
3
+
4
+ traverse(args[0]);
5
+ write(' || ');
6
+ traverse(args[1]);
7
+ };
@@ -0,0 +1,20 @@
1
+ export const createIndex = (path, {write, traverse}) => {
2
+ const args = path.get('arguments');
3
+
4
+ write('CREATE INDEX ');
5
+ traverse(args[0]);
6
+ write(' ON ');
7
+ traverse(args[1]);
8
+ write(' (');
9
+
10
+ for (const [i, arg] of args
11
+ .slice(2)
12
+ .entries()) {
13
+ if (i > 0)
14
+ write(', ');
15
+
16
+ traverse(arg);
17
+ }
18
+
19
+ write(')');
20
+ };
@@ -0,0 +1,20 @@
1
+ export const createUniqueIndex = (path, {write, traverse}) => {
2
+ const args = path.get('arguments');
3
+
4
+ write('CREATE UNIQUE INDEX ');
5
+ traverse(args[0]);
6
+ write(' ON ');
7
+ traverse(args[1]);
8
+ write(' (');
9
+
10
+ for (const [i, arg] of args
11
+ .slice(2)
12
+ .entries()) {
13
+ if (i > 0)
14
+ write(', ');
15
+
16
+ traverse(arg);
17
+ }
18
+
19
+ write(')');
20
+ };
@@ -1,7 +1,6 @@
1
- export const createTable = (path, {write, traverse}) => {
1
+ export const printTableBody = (path, {write, traverse}) => {
2
2
  const [name, columns] = path.get('arguments');
3
3
 
4
- write('CREATE TABLE ');
5
4
  traverse(name);
6
5
  write.space();
7
6
  write('(');
@@ -20,3 +19,8 @@ export const createTable = (path, {write, traverse}) => {
20
19
 
21
20
  write(')');
22
21
  };
22
+
23
+ export const createTable = (path, printer) => {
24
+ printer.write('CREATE TABLE ');
25
+ printTableBody(path, printer);
26
+ };
@@ -0,0 +1,6 @@
1
+ import {printTableBody} from '../create-table/create-table.js';
2
+
3
+ export const createTableIfNotExists = (path, printer) => {
4
+ printer.write('CREATE TABLE IF NOT EXISTS ');
5
+ printTableBody(path, printer);
6
+ };
@@ -0,0 +1,9 @@
1
+ import {printTable} from '../join/join.js';
2
+
3
+ export const crossJoin = (path, printer) => {
4
+ const {write} = printer;
5
+
6
+ write.breakline();
7
+ write('CROSS JOIN ');
8
+ printTable(path.get('arguments')[0], printer);
9
+ };
@@ -0,0 +1,6 @@
1
+ export const default_ = (path, {write, traverse}) => {
2
+ write('DEFAULT ');
3
+
4
+ const [arg] = path.get('arguments');
5
+ traverse(arg);
6
+ };