@supabase/pg-delta 1.0.0-alpha.4 → 1.0.0-alpha.6

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 (359) hide show
  1. package/README.md +40 -23
  2. package/dist/cli/app.js +26 -3
  3. package/dist/cli/bin/cli.js +5 -0
  4. package/dist/cli/commands/catalog-export.d.ts +5 -0
  5. package/dist/cli/commands/catalog-export.js +64 -0
  6. package/dist/cli/commands/declarative-apply.d.ts +6 -0
  7. package/dist/cli/commands/declarative-apply.js +288 -0
  8. package/dist/cli/commands/declarative-export.d.ts +5 -0
  9. package/dist/cli/commands/declarative-export.js +245 -0
  10. package/dist/cli/commands/plan.js +19 -6
  11. package/dist/cli/exit-code.d.ts +2 -0
  12. package/dist/cli/exit-code.js +7 -0
  13. package/dist/cli/formatters/tree/tree.js +3 -2
  14. package/dist/cli/utils/apply-display.d.ts +52 -0
  15. package/dist/cli/utils/apply-display.js +183 -0
  16. package/dist/cli/utils/export-display.d.ts +43 -0
  17. package/dist/cli/utils/export-display.js +202 -0
  18. package/dist/cli/utils/resolve-input.d.ts +7 -0
  19. package/dist/cli/utils/resolve-input.js +13 -0
  20. package/dist/core/catalog-export/index.d.ts +11 -0
  21. package/dist/core/catalog-export/index.js +10 -0
  22. package/dist/core/catalog.diff.d.ts +1 -0
  23. package/dist/core/catalog.diff.js +64 -48
  24. package/dist/core/catalog.model.d.ts +14 -1
  25. package/dist/core/catalog.model.js +103 -1
  26. package/dist/core/catalog.snapshot.d.ts +66 -0
  27. package/dist/core/catalog.snapshot.js +206 -0
  28. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  29. package/dist/core/declarative-apply/discover-sql.js +86 -0
  30. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  31. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  32. package/dist/core/declarative-apply/index.d.ts +49 -0
  33. package/dist/core/declarative-apply/index.js +134 -0
  34. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  35. package/dist/core/declarative-apply/round-apply.js +378 -0
  36. package/dist/core/export/file-mapper.d.ts +71 -0
  37. package/dist/core/export/file-mapper.js +474 -0
  38. package/dist/core/export/grouper.d.ts +13 -0
  39. package/dist/core/export/grouper.js +76 -0
  40. package/dist/core/export/index.d.ts +45 -0
  41. package/dist/core/export/index.js +63 -0
  42. package/dist/core/export/types.d.ts +84 -0
  43. package/dist/core/export/types.js +25 -0
  44. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  45. package/dist/core/integrations/filter/dsl.d.ts +38 -1
  46. package/dist/core/integrations/filter/dsl.js +20 -2
  47. package/dist/core/integrations/filter/extractors.js +42 -0
  48. package/dist/core/integrations/integration-dsl.d.ts +10 -0
  49. package/dist/core/integrations/supabase.d.ts +8 -0
  50. package/dist/core/integrations/supabase.js +9 -0
  51. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  52. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  53. package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
  54. package/dist/core/objects/aggregate/aggregate.model.js +1 -1
  55. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  56. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  57. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  58. package/dist/core/objects/base.privilege-diff.js +104 -22
  59. package/dist/core/objects/base.privilege.d.ts +1 -0
  60. package/dist/core/objects/base.privilege.js +9 -2
  61. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  62. package/dist/core/objects/diff-context.d.ts +15 -0
  63. package/dist/core/objects/diff-context.js +1 -0
  64. package/dist/core/objects/domain/changes/domain.create.js +4 -2
  65. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  66. package/dist/core/objects/domain/domain.diff.js +16 -77
  67. package/dist/core/objects/domain/domain.model.js +1 -1
  68. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  69. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  70. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  71. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
  72. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  73. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  74. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
  75. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  76. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  77. package/dist/core/objects/language/language.diff.d.ts +2 -5
  78. package/dist/core/objects/language/language.diff.js +7 -39
  79. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  80. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  81. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
  82. package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
  83. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  84. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  85. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  86. package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
  87. package/dist/core/objects/procedure/procedure.model.js +1 -1
  88. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  89. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  90. package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
  91. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  92. package/dist/core/objects/publication/publication.diff.js +8 -13
  93. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  94. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
  95. package/dist/core/objects/role/role.diff.js +22 -1
  96. package/dist/core/objects/role/role.model.d.ts +4 -3
  97. package/dist/core/objects/role/role.model.js +118 -12
  98. package/dist/core/objects/rule/rule.model.d.ts +1 -1
  99. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  100. package/dist/core/objects/schema/schema.diff.js +16 -77
  101. package/dist/core/objects/schema/schema.model.js +1 -1
  102. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  103. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  104. package/dist/core/objects/sequence/sequence.model.js +1 -1
  105. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  106. package/dist/core/objects/table/changes/table.create.js +3 -0
  107. package/dist/core/objects/table/table.diff.d.ts +2 -8
  108. package/dist/core/objects/table/table.diff.js +26 -157
  109. package/dist/core/objects/table/table.model.d.ts +23 -22
  110. package/dist/core/objects/table/table.model.js +1 -1
  111. package/dist/core/objects/trigger/changes/trigger.create.js +2 -4
  112. package/dist/core/objects/trigger/trigger.model.d.ts +8 -0
  113. package/dist/core/objects/trigger/trigger.model.js +11 -0
  114. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  115. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  116. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
  117. package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
  118. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  119. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  120. package/dist/core/objects/type/enum/enum.model.js +1 -1
  121. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  122. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  123. package/dist/core/objects/type/range/range.diff.js +16 -77
  124. package/dist/core/objects/type/range/range.model.js +1 -1
  125. package/dist/core/objects/view/view.diff.d.ts +2 -8
  126. package/dist/core/objects/view/view.diff.js +16 -158
  127. package/dist/core/objects/view/view.model.d.ts +18 -4
  128. package/dist/core/objects/view/view.model.js +3 -13
  129. package/dist/core/plan/apply.js +9 -26
  130. package/dist/core/plan/create.d.ts +19 -6
  131. package/dist/core/plan/create.js +134 -174
  132. package/dist/core/plan/serialize.js +16 -4
  133. package/dist/core/plan/sql-format/fixtures.js +3 -5
  134. package/dist/core/plan/sql-format/keyword-case.js +26 -1
  135. package/dist/core/plan/ssl-config.d.ts +32 -0
  136. package/dist/core/plan/ssl-config.js +115 -0
  137. package/dist/core/plan/types.d.ts +6 -0
  138. package/dist/core/postgres-config.d.ts +14 -0
  139. package/dist/core/postgres-config.js +53 -2
  140. package/dist/core/sort/graph-builder.js +10 -0
  141. package/dist/core/sort/logical-sort.js +31 -23
  142. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  143. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  144. package/dist/index.d.ts +6 -0
  145. package/dist/index.js +6 -1
  146. package/package.json +21 -4
  147. package/src/cli/app.ts +27 -3
  148. package/src/cli/bin/cli.ts +6 -0
  149. package/src/cli/commands/catalog-export.ts +78 -0
  150. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  151. package/src/cli/commands/declarative-apply.ts +380 -0
  152. package/src/cli/commands/declarative-export.ts +330 -0
  153. package/src/cli/commands/plan.ts +28 -7
  154. package/src/cli/exit-code.test.ts +19 -0
  155. package/src/cli/exit-code.ts +7 -0
  156. package/src/cli/formatters/tree/tree.ts +3 -2
  157. package/src/cli/utils/apply-display.test.ts +348 -0
  158. package/src/cli/utils/apply-display.ts +238 -0
  159. package/src/cli/utils/export-display.test.ts +103 -0
  160. package/src/cli/utils/export-display.ts +275 -0
  161. package/src/cli/utils/integrations.test.ts +44 -0
  162. package/src/cli/utils/resolve-input.test.ts +38 -0
  163. package/src/cli/utils/resolve-input.ts +17 -0
  164. package/src/core/catalog-export/index.ts +20 -0
  165. package/src/core/catalog.diff.ts +79 -78
  166. package/src/core/catalog.model.test.ts +122 -0
  167. package/src/core/catalog.model.ts +127 -1
  168. package/src/core/catalog.snapshot.test.ts +464 -0
  169. package/src/core/catalog.snapshot.ts +289 -0
  170. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  171. package/src/core/declarative-apply/discover-sql.ts +107 -0
  172. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  173. package/src/core/declarative-apply/index.test.ts +67 -0
  174. package/src/core/declarative-apply/index.ts +205 -0
  175. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  176. package/src/core/declarative-apply/round-apply.ts +562 -0
  177. package/src/core/expand-replace-dependencies.test.ts +70 -0
  178. package/src/core/export/file-mapper.test.ts +816 -0
  179. package/src/core/export/file-mapper.ts +574 -0
  180. package/src/core/export/grouper.ts +108 -0
  181. package/src/core/export/index.ts +129 -0
  182. package/src/core/export/types.ts +104 -0
  183. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  184. package/src/core/integrations/filter/dsl.test.ts +211 -0
  185. package/src/core/integrations/filter/dsl.ts +65 -3
  186. package/src/core/integrations/filter/extractors.test.ts +244 -0
  187. package/src/core/integrations/filter/extractors.ts +42 -0
  188. package/src/core/integrations/integration-dsl.ts +10 -0
  189. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  190. package/src/core/integrations/supabase.ts +9 -0
  191. package/src/core/objects/aggregate/aggregate.diff.ts +39 -95
  192. package/src/core/objects/aggregate/aggregate.model.ts +1 -1
  193. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +3 -1
  194. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +5 -2
  195. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +6 -3
  196. package/src/core/objects/aggregate/changes/aggregate.create.ts +1 -1
  197. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +7 -3
  198. package/src/core/objects/aggregate/changes/aggregate.drop.ts +1 -1
  199. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +9 -3
  200. package/src/core/objects/base.privilege-diff.ts +178 -30
  201. package/src/core/objects/base.privilege.ts +9 -2
  202. package/src/core/objects/collation/changes/collation.alter.test.ts +7 -2
  203. package/src/core/objects/collation/changes/collation.create.test.ts +7 -2
  204. package/src/core/objects/collation/changes/collation.drop.test.ts +4 -1
  205. package/src/core/objects/collation/collation.diff.test.ts +9 -12
  206. package/src/core/objects/collation/collation.diff.ts +2 -1
  207. package/src/core/objects/diff-context.ts +16 -0
  208. package/src/core/objects/domain/changes/domain.alter.test.ts +28 -9
  209. package/src/core/objects/domain/changes/domain.create.test.ts +32 -2
  210. package/src/core/objects/domain/changes/domain.create.ts +7 -1
  211. package/src/core/objects/domain/changes/domain.drop.test.ts +4 -1
  212. package/src/core/objects/domain/domain.diff.ts +39 -102
  213. package/src/core/objects/domain/domain.model.ts +1 -1
  214. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +10 -3
  215. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +4 -1
  216. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +4 -1
  217. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +12 -7
  218. package/src/core/objects/event-trigger/event-trigger.diff.ts +2 -1
  219. package/src/core/objects/extension/changes/extension.alter.test.ts +7 -2
  220. package/src/core/objects/extension/changes/extension.create.test.ts +4 -1
  221. package/src/core/objects/extension/changes/extension.drop.test.ts +4 -1
  222. package/src/core/objects/extension/extension.model.test.ts +98 -0
  223. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +16 -5
  224. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +51 -16
  225. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +4 -1
  226. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +111 -4
  227. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +31 -101
  228. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +2 -2
  229. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +46 -15
  230. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +13 -4
  231. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +4 -1
  232. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +39 -102
  233. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +1 -1
  234. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +22 -7
  235. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +19 -6
  236. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +4 -1
  237. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +95 -0
  238. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +31 -101
  239. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +13 -4
  240. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +16 -5
  241. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +10 -3
  242. package/src/core/objects/index/changes/index.alter.test.ts +13 -4
  243. package/src/core/objects/index/changes/index.create.test.ts +4 -1
  244. package/src/core/objects/index/changes/index.drop.test.ts +4 -1
  245. package/src/core/objects/language/changes/language.alter.test.ts +4 -1
  246. package/src/core/objects/language/changes/language.create.test.ts +4 -1
  247. package/src/core/objects/language/changes/language.drop.test.ts +4 -1
  248. package/src/core/objects/language/language.diff.test.ts +86 -4
  249. package/src/core/objects/language/language.diff.ts +17 -49
  250. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +10 -3
  251. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +7 -2
  252. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +4 -1
  253. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +162 -0
  254. package/src/core/objects/materialized-view/materialized-view.diff.ts +41 -191
  255. package/src/core/objects/materialized-view/materialized-view.model.ts +1 -1
  256. package/src/core/objects/procedure/changes/procedure.alter.test.ts +121 -49
  257. package/src/core/objects/procedure/changes/procedure.alter.ts +15 -12
  258. package/src/core/objects/procedure/changes/procedure.create.test.ts +4 -1
  259. package/src/core/objects/procedure/changes/procedure.drop.test.ts +7 -2
  260. package/src/core/objects/procedure/procedure.diff.ts +39 -102
  261. package/src/core/objects/procedure/procedure.model.ts +1 -1
  262. package/src/core/objects/publication/changes/publication.alter.test.ts +15 -21
  263. package/src/core/objects/publication/changes/publication.alter.ts +0 -18
  264. package/src/core/objects/publication/changes/publication.comment.test.ts +5 -2
  265. package/src/core/objects/publication/changes/publication.create.test.ts +5 -2
  266. package/src/core/objects/publication/changes/publication.drop.test.ts +3 -1
  267. package/src/core/objects/publication/changes/publication.types.ts +0 -2
  268. package/src/core/objects/publication/publication.diff.test.ts +24 -19
  269. package/src/core/objects/publication/publication.diff.ts +9 -15
  270. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +31 -14
  271. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +3 -3
  272. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +10 -3
  273. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +4 -1
  274. package/src/core/objects/role/changes/role.alter.test.ts +31 -15
  275. package/src/core/objects/role/changes/role.create.test.ts +6 -2
  276. package/src/core/objects/role/changes/role.drop.test.ts +4 -1
  277. package/src/core/objects/role/role.diff.test.ts +235 -0
  278. package/src/core/objects/role/role.diff.ts +21 -1
  279. package/src/core/objects/role/role.model.ts +122 -14
  280. package/src/core/objects/rule/changes/rule.alter.test.ts +7 -3
  281. package/src/core/objects/rule/changes/rule.comment.test.ts +5 -2
  282. package/src/core/objects/rule/changes/rule.create.test.ts +6 -2
  283. package/src/core/objects/rule/changes/rule.drop.test.ts +3 -1
  284. package/src/core/objects/schema/changes/schema.alter.test.ts +4 -1
  285. package/src/core/objects/schema/changes/schema.create.test.ts +4 -1
  286. package/src/core/objects/schema/changes/schema.drop.test.ts +4 -1
  287. package/src/core/objects/schema/schema.diff.ts +39 -102
  288. package/src/core/objects/schema/schema.model.ts +1 -1
  289. package/src/core/objects/sequence/changes/sequence.alter.test.ts +11 -5
  290. package/src/core/objects/sequence/changes/sequence.create.test.ts +8 -3
  291. package/src/core/objects/sequence/changes/sequence.drop.test.ts +4 -1
  292. package/src/core/objects/sequence/sequence.diff.test.ts +114 -0
  293. package/src/core/objects/sequence/sequence.diff.ts +39 -104
  294. package/src/core/objects/sequence/sequence.model.ts +1 -1
  295. package/src/core/objects/subscription/changes/subscription.alter.test.ts +15 -5
  296. package/src/core/objects/subscription/changes/subscription.comment.test.ts +5 -2
  297. package/src/core/objects/subscription/changes/subscription.create.test.ts +5 -2
  298. package/src/core/objects/subscription/changes/subscription.drop.test.ts +3 -1
  299. package/src/core/objects/subscription/subscription.diff.test.ts +16 -11
  300. package/src/core/objects/subscription/subscription.diff.ts +2 -1
  301. package/src/core/objects/table/changes/table.alter.test.ts +38 -15
  302. package/src/core/objects/table/changes/table.create.test.ts +41 -3
  303. package/src/core/objects/table/changes/table.create.ts +4 -0
  304. package/src/core/objects/table/changes/table.drop.test.ts +3 -1
  305. package/src/core/objects/table/table.diff.test.ts +157 -0
  306. package/src/core/objects/table/table.diff.ts +54 -190
  307. package/src/core/objects/table/table.model.ts +1 -1
  308. package/src/core/objects/trigger/changes/trigger.alter.test.ts +8 -4
  309. package/src/core/objects/trigger/changes/trigger.create.test.ts +5 -1
  310. package/src/core/objects/trigger/changes/trigger.create.ts +7 -4
  311. package/src/core/objects/trigger/changes/trigger.drop.test.ts +5 -1
  312. package/src/core/objects/trigger/trigger.diff.test.ts +1 -0
  313. package/src/core/objects/trigger/trigger.model.ts +12 -0
  314. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +10 -4
  315. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +7 -2
  316. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +4 -1
  317. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +78 -0
  318. package/src/core/objects/type/composite-type/composite-type.diff.ts +39 -101
  319. package/src/core/objects/type/composite-type/composite-type.model.ts +2 -1
  320. package/src/core/objects/type/enum/changes/enum.alter.test.ts +14 -5
  321. package/src/core/objects/type/enum/changes/enum.create.test.ts +4 -1
  322. package/src/core/objects/type/enum/changes/enum.drop.test.ts +4 -1
  323. package/src/core/objects/type/enum/enum.diff.test.ts +181 -0
  324. package/src/core/objects/type/enum/enum.diff.ts +58 -146
  325. package/src/core/objects/type/enum/enum.model.ts +1 -1
  326. package/src/core/objects/type/range/changes/range.alter.test.ts +3 -1
  327. package/src/core/objects/type/range/changes/range.create.test.ts +5 -2
  328. package/src/core/objects/type/range/changes/range.create.ts +6 -2
  329. package/src/core/objects/type/range/changes/range.drop.test.ts +3 -1
  330. package/src/core/objects/type/range/range.diff.test.ts +77 -0
  331. package/src/core/objects/type/range/range.diff.ts +39 -101
  332. package/src/core/objects/type/range/range.model.ts +1 -1
  333. package/src/core/objects/view/changes/view.alter.test.ts +8 -3
  334. package/src/core/objects/view/changes/view.create.test.ts +7 -2
  335. package/src/core/objects/view/changes/view.drop.test.ts +4 -1
  336. package/src/core/objects/view/view.diff.test.ts +82 -0
  337. package/src/core/objects/view/view.diff.ts +41 -191
  338. package/src/core/objects/view/view.model.ts +3 -17
  339. package/src/core/plan/apply.ts +9 -27
  340. package/src/core/plan/create.ts +173 -237
  341. package/src/core/plan/serialize.test.ts +317 -0
  342. package/src/core/plan/serialize.ts +18 -4
  343. package/src/core/plan/sql-format/fixtures.ts +2 -5
  344. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +52 -0
  345. package/src/core/plan/sql-format/format-off.test.ts +14 -17
  346. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +27 -22
  347. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +17 -21
  348. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +25 -20
  349. package/src/core/plan/sql-format/format-pretty-upper.test.ts +23 -20
  350. package/src/core/plan/sql-format/keyword-case.ts +36 -1
  351. package/src/core/plan/ssl-config.ts +172 -0
  352. package/src/core/plan/types.ts +6 -0
  353. package/src/core/postgres-config.ts +71 -2
  354. package/src/core/sort/graph-builder.ts +12 -0
  355. package/src/core/sort/logical-sort.test.ts +371 -0
  356. package/src/core/sort/logical-sort.ts +32 -25
  357. package/src/core/sort/topological-sort.test.ts +275 -0
  358. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  359. package/src/index.ts +26 -2
@@ -0,0 +1,317 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import type { Change } from "../change.types.ts";
3
+ import { getObjectName, getObjectSchema, getParentInfo } from "./serialize.ts";
4
+
5
+ describe("getObjectName", () => {
6
+ const cases: [string, unknown, string][] = [
7
+ [
8
+ "aggregate",
9
+ { objectType: "aggregate", aggregate: { name: "my_agg" } },
10
+ "my_agg",
11
+ ],
12
+ [
13
+ "collation",
14
+ { objectType: "collation", collation: { name: "my_coll" } },
15
+ "my_coll",
16
+ ],
17
+ [
18
+ "composite_type",
19
+ { objectType: "composite_type", compositeType: { name: "my_comp" } },
20
+ "my_comp",
21
+ ],
22
+ [
23
+ "domain",
24
+ { objectType: "domain", domain: { name: "my_domain" } },
25
+ "my_domain",
26
+ ],
27
+ ["enum", { objectType: "enum", enum: { name: "my_enum" } }, "my_enum"],
28
+ [
29
+ "event_trigger",
30
+ { objectType: "event_trigger", eventTrigger: { name: "my_evt" } },
31
+ "my_evt",
32
+ ],
33
+ [
34
+ "extension",
35
+ { objectType: "extension", extension: { name: "my_ext" } },
36
+ "my_ext",
37
+ ],
38
+ [
39
+ "foreign_data_wrapper",
40
+ {
41
+ objectType: "foreign_data_wrapper",
42
+ foreignDataWrapper: { name: "my_fdw" },
43
+ },
44
+ "my_fdw",
45
+ ],
46
+ [
47
+ "foreign_table",
48
+ { objectType: "foreign_table", foreignTable: { name: "my_ft" } },
49
+ "my_ft",
50
+ ],
51
+ ["index", { objectType: "index", index: { name: "my_idx" } }, "my_idx"],
52
+ [
53
+ "language",
54
+ { objectType: "language", language: { name: "plpgsql" } },
55
+ "plpgsql",
56
+ ],
57
+ [
58
+ "materialized_view",
59
+ { objectType: "materialized_view", materializedView: { name: "my_mv" } },
60
+ "my_mv",
61
+ ],
62
+ [
63
+ "procedure",
64
+ { objectType: "procedure", procedure: { name: "my_proc" } },
65
+ "my_proc",
66
+ ],
67
+ [
68
+ "publication",
69
+ { objectType: "publication", publication: { name: "my_pub" } },
70
+ "my_pub",
71
+ ],
72
+ ["range", { objectType: "range", range: { name: "my_range" } }, "my_range"],
73
+ [
74
+ "rls_policy",
75
+ { objectType: "rls_policy", policy: { name: "my_policy" } },
76
+ "my_policy",
77
+ ],
78
+ ["role", { objectType: "role", role: { name: "my_role" } }, "my_role"],
79
+ ["rule", { objectType: "rule", rule: { name: "my_rule" } }, "my_rule"],
80
+ [
81
+ "schema",
82
+ { objectType: "schema", schema: { name: "my_schema" } },
83
+ "my_schema",
84
+ ],
85
+ [
86
+ "sequence",
87
+ { objectType: "sequence", sequence: { name: "my_seq" } },
88
+ "my_seq",
89
+ ],
90
+ [
91
+ "server",
92
+ { objectType: "server", server: { name: "my_server" } },
93
+ "my_server",
94
+ ],
95
+ [
96
+ "subscription",
97
+ { objectType: "subscription", subscription: { name: "my_sub" } },
98
+ "my_sub",
99
+ ],
100
+ ["table", { objectType: "table", table: { name: "my_table" } }, "my_table"],
101
+ [
102
+ "trigger",
103
+ { objectType: "trigger", trigger: { name: "my_trigger" } },
104
+ "my_trigger",
105
+ ],
106
+ [
107
+ "user_mapping",
108
+ {
109
+ objectType: "user_mapping",
110
+ userMapping: { user: "alice", server: "remote" },
111
+ },
112
+ "alice@remote",
113
+ ],
114
+ ["view", { objectType: "view", view: { name: "my_view" } }, "my_view"],
115
+ ];
116
+
117
+ for (const [label, stub, expected] of cases) {
118
+ test(label, () => {
119
+ expect(getObjectName(stub as unknown as Change)).toBe(expected);
120
+ });
121
+ }
122
+ });
123
+
124
+ describe("getObjectSchema", () => {
125
+ const withSchema: [string, unknown, string][] = [
126
+ [
127
+ "aggregate",
128
+ { objectType: "aggregate", aggregate: { schema: "public" } },
129
+ "public",
130
+ ],
131
+ [
132
+ "collation",
133
+ { objectType: "collation", collation: { schema: "pg_catalog" } },
134
+ "pg_catalog",
135
+ ],
136
+ [
137
+ "composite_type",
138
+ { objectType: "composite_type", compositeType: { schema: "public" } },
139
+ "public",
140
+ ],
141
+ [
142
+ "domain",
143
+ { objectType: "domain", domain: { schema: "public" } },
144
+ "public",
145
+ ],
146
+ ["enum", { objectType: "enum", enum: { schema: "public" } }, "public"],
147
+ [
148
+ "extension",
149
+ { objectType: "extension", extension: { schema: "public" } },
150
+ "public",
151
+ ],
152
+ [
153
+ "foreign_table",
154
+ { objectType: "foreign_table", foreignTable: { schema: "public" } },
155
+ "public",
156
+ ],
157
+ ["index", { objectType: "index", index: { schema: "public" } }, "public"],
158
+ [
159
+ "materialized_view",
160
+ {
161
+ objectType: "materialized_view",
162
+ materializedView: { schema: "public" },
163
+ },
164
+ "public",
165
+ ],
166
+ [
167
+ "procedure",
168
+ { objectType: "procedure", procedure: { schema: "public" } },
169
+ "public",
170
+ ],
171
+ ["range", { objectType: "range", range: { schema: "public" } }, "public"],
172
+ [
173
+ "rls_policy",
174
+ { objectType: "rls_policy", policy: { schema: "public" } },
175
+ "public",
176
+ ],
177
+ ["rule", { objectType: "rule", rule: { schema: "public" } }, "public"],
178
+ [
179
+ "schema",
180
+ { objectType: "schema", schema: { name: "my_schema" } },
181
+ "my_schema",
182
+ ],
183
+ [
184
+ "sequence",
185
+ { objectType: "sequence", sequence: { schema: "public" } },
186
+ "public",
187
+ ],
188
+ ["table", { objectType: "table", table: { schema: "public" } }, "public"],
189
+ [
190
+ "trigger",
191
+ { objectType: "trigger", trigger: { schema: "public" } },
192
+ "public",
193
+ ],
194
+ ["view", { objectType: "view", view: { schema: "public" } }, "public"],
195
+ ];
196
+
197
+ for (const [label, stub, expected] of withSchema) {
198
+ test(`${label} returns schema`, () => {
199
+ expect(getObjectSchema(stub as unknown as Change)).toBe(expected);
200
+ });
201
+ }
202
+
203
+ const withoutSchema: [string, unknown][] = [
204
+ ["event_trigger", { objectType: "event_trigger" }],
205
+ ["foreign_data_wrapper", { objectType: "foreign_data_wrapper" }],
206
+ ["language", { objectType: "language" }],
207
+ ["publication", { objectType: "publication" }],
208
+ ["role", { objectType: "role" }],
209
+ ["server", { objectType: "server" }],
210
+ ["subscription", { objectType: "subscription" }],
211
+ ["user_mapping", { objectType: "user_mapping" }],
212
+ ];
213
+
214
+ for (const [label, stub] of withoutSchema) {
215
+ test(`${label} returns null`, () => {
216
+ expect(getObjectSchema(stub as unknown as Change)).toBeNull();
217
+ });
218
+ }
219
+ });
220
+
221
+ describe("getParentInfo", () => {
222
+ test("index on table", () => {
223
+ const change = {
224
+ objectType: "index",
225
+ index: { table_name: "users", table_relkind: "r" },
226
+ } as unknown as Change;
227
+ expect(getParentInfo(change)).toEqual({ type: "table", name: "users" });
228
+ });
229
+
230
+ test("index on materialized view", () => {
231
+ const change = {
232
+ objectType: "index",
233
+ index: { table_name: "user_stats", table_relkind: "m" },
234
+ } as unknown as Change;
235
+ expect(getParentInfo(change)).toEqual({
236
+ type: "materialized_view",
237
+ name: "user_stats",
238
+ });
239
+ });
240
+
241
+ test("trigger on table", () => {
242
+ const change = {
243
+ objectType: "trigger",
244
+ trigger: { table_name: "orders", table_relkind: "r" },
245
+ } as unknown as Change;
246
+ expect(getParentInfo(change)).toEqual({ type: "table", name: "orders" });
247
+ });
248
+
249
+ test("trigger on view", () => {
250
+ const change = {
251
+ objectType: "trigger",
252
+ trigger: { table_name: "order_view", table_relkind: "v" },
253
+ } as unknown as Change;
254
+ expect(getParentInfo(change)).toEqual({ type: "view", name: "order_view" });
255
+ });
256
+
257
+ test("trigger on materialized view", () => {
258
+ const change = {
259
+ objectType: "trigger",
260
+ trigger: { table_name: "order_mv", table_relkind: "m" },
261
+ } as unknown as Change;
262
+ expect(getParentInfo(change)).toEqual({
263
+ type: "materialized_view",
264
+ name: "order_mv",
265
+ });
266
+ });
267
+
268
+ test("rule on table", () => {
269
+ const change = {
270
+ objectType: "rule",
271
+ rule: { table_name: "items", relation_kind: "r" },
272
+ } as unknown as Change;
273
+ expect(getParentInfo(change)).toEqual({ type: "table", name: "items" });
274
+ });
275
+
276
+ test("rule on view", () => {
277
+ const change = {
278
+ objectType: "rule",
279
+ rule: { table_name: "item_view", relation_kind: "v" },
280
+ } as unknown as Change;
281
+ expect(getParentInfo(change)).toEqual({ type: "view", name: "item_view" });
282
+ });
283
+
284
+ test("rule on materialized view", () => {
285
+ const change = {
286
+ objectType: "rule",
287
+ rule: { table_name: "item_mv", relation_kind: "m" },
288
+ } as unknown as Change;
289
+ expect(getParentInfo(change)).toEqual({
290
+ type: "materialized_view",
291
+ name: "item_mv",
292
+ });
293
+ });
294
+
295
+ test("rls_policy", () => {
296
+ const change = {
297
+ objectType: "rls_policy",
298
+ policy: { table_name: "secrets" },
299
+ } as unknown as Change;
300
+ expect(getParentInfo(change)).toEqual({ type: "table", name: "secrets" });
301
+ });
302
+
303
+ const nullCases = [
304
+ "table",
305
+ "view",
306
+ "schema",
307
+ "sequence",
308
+ "role",
309
+ "extension",
310
+ ] as const;
311
+ for (const objectType of nullCases) {
312
+ test(`${objectType} returns null`, () => {
313
+ const change = { objectType } as unknown as Change;
314
+ expect(getParentInfo(change)).toBeNull();
315
+ });
316
+ }
317
+ });
@@ -158,10 +158,24 @@ export function getParentInfo(change: Change): ParentInfo | null {
158
158
  change.index.table_relkind === "m" ? "materialized_view" : "table";
159
159
  return { type: parentType, name: change.index.table_name };
160
160
  }
161
- case "trigger":
162
- return { type: "table", name: change.trigger.table_name };
163
- case "rule":
164
- return { type: "table", name: change.rule.table_name };
161
+ case "trigger": {
162
+ const parentType =
163
+ change.trigger.table_relkind === "v"
164
+ ? "view"
165
+ : change.trigger.table_relkind === "m"
166
+ ? "materialized_view"
167
+ : "table";
168
+ return { type: parentType, name: change.trigger.table_name };
169
+ }
170
+ case "rule": {
171
+ const parentType =
172
+ change.rule.relation_kind === "v"
173
+ ? "view"
174
+ : change.rule.relation_kind === "m"
175
+ ? "materialized_view"
176
+ : "table";
177
+ return { type: parentType, name: change.rule.table_name };
178
+ }
165
179
  case "rls_policy":
166
180
  return { type: "table", name: change.policy.table_name };
167
181
  case "aggregate":
@@ -213,7 +213,6 @@ import {
213
213
  AlterPublicationAddTables,
214
214
  AlterPublicationDropSchemas,
215
215
  AlterPublicationDropTables,
216
- AlterPublicationSetForAllTables,
217
216
  AlterPublicationSetList,
218
217
  AlterPublicationSetOptions,
219
218
  AlterPublicationSetOwner,
@@ -1080,6 +1079,7 @@ const trigger = new Trigger({
1080
1079
  schema: "public",
1081
1080
  name: "trg_audit",
1082
1081
  table_name: "table_with_very_long_name_for_formatting_and_wrapping_test",
1082
+ table_relkind: "r",
1083
1083
  function_schema: "public",
1084
1084
  function_name: "audit_trigger_fn",
1085
1085
  trigger_type: 7,
@@ -1252,6 +1252,7 @@ const role = new Role({
1252
1252
  objtype: "r",
1253
1253
  grantee: "app_reader",
1254
1254
  privileges: [{ privilege: "SELECT", grantable: false }],
1255
+ is_implicit: false,
1255
1256
  },
1256
1257
  ],
1257
1258
  });
@@ -1908,10 +1909,6 @@ const changeCases: ChangeCase[] = [
1908
1909
  setPublishViaPartitionRoot: true,
1909
1910
  }),
1910
1911
  },
1911
- {
1912
- label: "publication.alter.set_all_tables",
1913
- change: new AlterPublicationSetForAllTables({ publication }),
1914
- },
1915
1912
  {
1916
1913
  label: "publication.alter.set_list",
1917
1914
  change: new AlterPublicationSetList({ publication }),
@@ -52,6 +52,58 @@ describe("lowercase coverage formatting", () => {
52
52
  );
53
53
  });
54
54
 
55
+ test("lowercases all ALTER DEFAULT PRIVILEGES object-type keywords", () => {
56
+ const statements = [
57
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user IN SCHEMA public GRANT ALL ON TABLES TO app_reader;",
58
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user GRANT ALL ON SEQUENCES TO app_reader;",
59
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user GRANT ALL ON ROUTINES TO PUBLIC;",
60
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user GRANT ALL ON TYPES TO PUBLIC;",
61
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user IN SCHEMA api GRANT ALL ON SCHEMAS TO app_admin;",
62
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user REVOKE ALL ON SEQUENCES FROM app_reader;",
63
+ "ALTER DEFAULT PRIVILEGES FOR ROLE app_user REVOKE ALL ON TYPES FROM PUBLIC;",
64
+ ];
65
+
66
+ const formatted = formatSqlStatements(statements, {
67
+ keywordCase: "lower",
68
+ });
69
+
70
+ const normalized = formatted.map((v) => v.replace(/\s+/g, " ").trim());
71
+ expect(normalized).toMatchInlineSnapshot(`
72
+ [
73
+ "alter default privileges for role app_user in schema public grant all on tables to app_reader",
74
+ "alter default privileges for role app_user grant all on sequences to app_reader",
75
+ "alter default privileges for role app_user grant all on routines to public",
76
+ "alter default privileges for role app_user grant all on types to public",
77
+ "alter default privileges for role app_user in schema api grant all on schemas to app_admin",
78
+ "alter default privileges for role app_user revoke all on sequences from app_reader",
79
+ "alter default privileges for role app_user revoke all on types from public",
80
+ ]
81
+ `);
82
+ });
83
+
84
+ test("lowercases PUBLIC in standalone GRANT/REVOKE statements", () => {
85
+ const statements = [
86
+ "GRANT ALL ON SCHEMA public TO PUBLIC;",
87
+ "GRANT EXECUTE ON FUNCTION public.my_fn() TO PUBLIC;",
88
+ "REVOKE ALL ON SCHEMA public FROM PUBLIC;",
89
+ "GRANT USAGE ON TYPE public.my_type TO PUBLIC;",
90
+ ];
91
+
92
+ const formatted = formatSqlStatements(statements, {
93
+ keywordCase: "lower",
94
+ });
95
+
96
+ const normalized = formatted.map((v) => v.replace(/\s+/g, " ").trim());
97
+ expect(normalized).toMatchInlineSnapshot(`
98
+ [
99
+ "grant all on schema public to public",
100
+ "grant execute on function public.my_fn() to public",
101
+ "revoke all on schema public from public",
102
+ "grant usage on type public.my_type to public",
103
+ ]
104
+ `);
105
+ });
106
+
55
107
  test("preserves full CHECK clause text while casing surrounding structure", () => {
56
108
  const [formatted] = formatSqlStatements(
57
109
  [
@@ -314,9 +314,6 @@ describe("sql formatting snapshots", () => {
314
314
  -- publication.alter.set_options
315
315
  ALTER PUBLICATION pub_custom SET (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
316
316
 
317
- -- publication.alter.set_all_tables
318
- ALTER PUBLICATION pub_custom SET FOR ALL TABLES;
319
-
320
317
  -- publication.alter.set_list
321
318
  ALTER PUBLICATION pub_custom SET TABLE public.articles_with_a_very_long_name_very_very_long_name_that_will_go_above_the_wrapping_limit (id, title) WHERE (published = true), TABLE public.comments_a_little_smaller_name_than_the_previous_one, TABLES IN SCHEMA analytics;
322
319
 
@@ -403,25 +400,25 @@ describe("sql formatting snapshots", () => {
403
400
  DROP FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(IN "p_schema_name_for_analytics" text, IN "p_table_name_for_metrics" text, IN "p_limit_count_default" integer);
404
401
 
405
402
  -- function.alter.change_owner
406
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name OWNER TO new_admin;
403
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) OWNER TO new_admin;
407
404
 
408
405
  -- function.alter.set_security
409
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name SECURITY INVOKER;
406
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) SECURITY INVOKER;
410
407
 
411
408
  -- function.alter.set_config
412
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name SET work_mem TO '256MB';
409
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) SET work_mem TO '256MB';
413
410
 
414
411
  -- function.alter.set_volatility
415
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name IMMUTABLE;
412
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) IMMUTABLE;
416
413
 
417
414
  -- function.alter.set_strictness
418
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name CALLED ON NULL INPUT;
415
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) CALLED ON NULL INPUT;
419
416
 
420
417
  -- function.alter.set_leakproof
421
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name LEAKPROOF;
418
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) LEAKPROOF;
422
419
 
423
420
  -- function.alter.set_parallel
424
- ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name PARALLEL RESTRICTED;
421
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) PARALLEL RESTRICTED;
425
422
 
426
423
  -- function.comment
427
424
  COMMENT ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text,text,integer) IS 'Calculate metrics for a given table';
@@ -475,13 +472,13 @@ describe("sql formatting snapshots", () => {
475
472
  DROP POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test;
476
473
 
477
474
  -- policy.alter.set_roles
478
- ALTER POLICY public.allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test TO authenticated, anon;
475
+ ALTER POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test TO authenticated, anon;
479
476
 
480
477
  -- policy.alter.set_using
481
- ALTER POLICY public.allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test USING (auth.uid() = user_id AND status = 'active');
478
+ ALTER POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test USING (auth.uid() = user_id AND status = 'active');
482
479
 
483
480
  -- policy.alter.set_with_check
484
- ALTER POLICY public.allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test WITH CHECK (auth.uid() = user_id);
481
+ ALTER POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test WITH CHECK (auth.uid() = user_id);
485
482
 
486
483
  -- policy.comment
487
484
  COMMENT ON POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS 'rls policy comment';
@@ -563,7 +560,7 @@ describe("sql formatting snapshots", () => {
563
560
  REVOKE GRANT OPTION FOR SELECT ON analytics.daily_stats FROM app_reader;
564
561
 
565
562
  -- aggregate.create
566
- CREATE AGGREGATE public.array_cat_agg(anycompatiblearray) (SFUNC = array_cat, STYPE = anycompatiblearray, COMBINEFUNC = array_cat, INITCOND = '{}', PARALLEL SAFE, STRICT);
563
+ CREATE AGGREGATE public.array_cat_agg(anycompatiblearray) (SFUNC = array_cat, STYPE = anycompatiblearray, COMBINEFUNC = array_cat, INITCOND = '{}', PARALLEL = SAFE, STRICT);
567
564
 
568
565
  -- aggregate.drop
569
566
  DROP AGGREGATE public.array_cat_agg(anycompatiblearray);
@@ -758,13 +755,13 @@ describe("sql formatting snapshots", () => {
758
755
  COMMENT ON FOREIGN TABLE public.remote_users IS NULL;
759
756
 
760
757
  -- foreign_table.grant
761
- GRANT SELECT ON FOREIGN TABLE public.remote_users TO app_reader;
758
+ GRANT SELECT ON TABLE public.remote_users TO app_reader;
762
759
 
763
760
  -- foreign_table.revoke
764
- REVOKE SELECT ON FOREIGN TABLE public.remote_users FROM app_reader;
761
+ REVOKE SELECT ON TABLE public.remote_users FROM app_reader;
765
762
 
766
763
  -- foreign_table.revoke_grant_option
767
- REVOKE GRANT OPTION FOR SELECT ON FOREIGN TABLE public.remote_users FROM app_reader;
764
+ REVOKE GRANT OPTION FOR SELECT ON TABLE public.remote_users FROM app_reader;
768
765
 
769
766
  -- server.create
770
767
  CREATE SERVER remote_server TYPE 'postgresql' VERSION '16.0' FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'remote.host', port '5432', dbname 'remote_db');
@@ -403,9 +403,6 @@ describe("sql formatting snapshots", () => {
403
403
  alter publication pub_custom
404
404
  set (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
405
405
 
406
- -- publication.alter.set_all_tables
407
- alter publication pub_custom set for all tables;
408
-
409
406
  -- publication.alter.set_list
410
407
  alter publication pub_custom
411
408
  set table
@@ -520,29 +517,39 @@ describe("sql formatting snapshots", () => {
520
517
  in "p_table_name_for_metrics" text, in "p_limit_count_default" integer);
521
518
 
522
519
  -- function.alter.change_owner
523
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name owner to
524
- new_admin;
520
+ alter function
521
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) owner
522
+ to new_admin;
525
523
 
526
524
  -- function.alter.set_security
527
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name security invoker;
525
+ alter function
526
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
527
+ security invoker;
528
528
 
529
529
  -- function.alter.set_config
530
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name
530
+ alter function
531
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
531
532
  set work_mem to '256MB';
532
533
 
533
534
  -- function.alter.set_volatility
534
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name immutable;
535
+ alter function
536
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
537
+ immutable;
535
538
 
536
539
  -- function.alter.set_strictness
537
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name called
540
+ alter function
541
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) called
538
542
  on null input;
539
543
 
540
544
  -- function.alter.set_leakproof
541
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name leakproof;
545
+ alter function
546
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
547
+ leakproof;
542
548
 
543
549
  -- function.alter.set_parallel
544
- alter function public.calculate_metrics_for_analytics_dashboard_with_extended_name parallel
545
- restricted;
550
+ alter function
551
+ public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer)
552
+ parallel restricted;
546
553
 
547
554
  -- function.comment
548
555
  comment on function
@@ -622,18 +629,16 @@ describe("sql formatting snapshots", () => {
622
629
  drop policy allow_select_own on public.table_with_very_long_name_for_formatting_and_wrapping_test;
623
630
 
624
631
  -- policy.alter.set_roles
625
- alter policy public.allow_select_own
632
+ alter policy allow_select_own
626
633
  on public.table_with_very_long_name_for_formatting_and_wrapping_test to authenticated, anon;
627
634
 
628
635
  -- policy.alter.set_using
629
- alter policy public.allow_select_own
630
- on public.table_with_very_long_name_for_formatting_and_wrapping_test
636
+ alter policy allow_select_own on public.table_with_very_long_name_for_formatting_and_wrapping_test
631
637
  using (auth.uid() = user_id AND status = 'active');
632
638
 
633
639
  -- policy.alter.set_with_check
634
- alter policy public.allow_select_own
635
- on public.table_with_very_long_name_for_formatting_and_wrapping_test with
636
- check (auth.uid() = user_id);
640
+ alter policy allow_select_own on public.table_with_very_long_name_for_formatting_and_wrapping_test
641
+ with check (auth.uid() = user_id);
637
642
 
638
643
  -- policy.comment
639
644
  comment on policy allow_select_own
@@ -745,7 +750,7 @@ describe("sql formatting snapshots", () => {
745
750
  , stype = anycompatiblearray
746
751
  , combinefunc = array_cat
747
752
  , initcond = '{}'
748
- , parallel safe
753
+ , parallel = SAFE
749
754
  , strict
750
755
  );
751
756
 
@@ -990,13 +995,13 @@ describe("sql formatting snapshots", () => {
990
995
  comment on foreign table public.remote_users is null;
991
996
 
992
997
  -- foreign_table.grant
993
- grant select on foreign table public.remote_users to app_reader;
998
+ grant select on table public.remote_users to app_reader;
994
999
 
995
1000
  -- foreign_table.revoke
996
- revoke select on foreign table public.remote_users from app_reader;
1001
+ revoke select on table public.remote_users from app_reader;
997
1002
 
998
1003
  -- foreign_table.revoke_grant_option
999
- revoke grant option for select on foreign table public.remote_users from app_reader;
1004
+ revoke grant option for select on table public.remote_users from app_reader;
1000
1005
 
1001
1006
  -- server.create
1002
1007
  create server remote_server