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

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 (463) hide show
  1. package/README.md +22 -0
  2. package/dist/cli/bin/cli.js +0 -0
  3. package/dist/cli/commands/plan.js +21 -0
  4. package/dist/cli/utils.d.ts +2 -0
  5. package/dist/cli/utils.js +1 -1
  6. package/dist/core/objects/table/table.model.d.ts +4 -2
  7. package/dist/core/objects/table/table.model.js +3 -0
  8. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  9. package/dist/core/objects/trigger/changes/trigger.create.js +2 -1
  10. package/dist/core/objects/trigger/trigger.model.d.ts +1 -0
  11. package/dist/core/objects/trigger/trigger.model.js +3 -0
  12. package/dist/core/plan/apply.js +3 -3
  13. package/dist/core/plan/create.js +34 -15
  14. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  15. package/dist/core/plan/sql-format/constants.js +11 -0
  16. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  17. package/dist/core/plan/sql-format/fixtures.js +2449 -0
  18. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  19. package/dist/core/plan/sql-format/format-utils.js +274 -0
  20. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  21. package/dist/core/plan/sql-format/formatters.js +737 -0
  22. package/dist/core/plan/sql-format/index.d.ts +2 -0
  23. package/dist/core/plan/sql-format/index.js +98 -0
  24. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  25. package/dist/core/plan/sql-format/keyword-case.js +868 -0
  26. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  27. package/dist/core/plan/sql-format/protect.js +269 -0
  28. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  29. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  30. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  31. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  32. package/dist/core/plan/sql-format/types.d.ts +28 -0
  33. package/dist/core/plan/sql-format/types.js +1 -0
  34. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  35. package/dist/core/plan/sql-format/wrap.js +165 -0
  36. package/dist/core/plan/sql-format.d.ts +2 -0
  37. package/dist/core/plan/sql-format.js +1 -0
  38. package/dist/core/plan/statements.d.ts +2 -1
  39. package/dist/core/plan/statements.js +6 -2
  40. package/dist/core/postgres-config.d.ts +15 -0
  41. package/dist/core/postgres-config.js +30 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/index.js +1 -0
  44. package/package.json +37 -22
  45. package/src/cli/app.ts +28 -0
  46. package/src/cli/bin/cli.ts +9 -0
  47. package/src/cli/commands/apply.ts +101 -0
  48. package/src/cli/commands/plan.ts +195 -0
  49. package/src/cli/commands/sync.ts +185 -0
  50. package/src/cli/formatters/index.ts +5 -0
  51. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  52. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  53. package/src/cli/formatters/tree/tree.ts +237 -0
  54. package/src/cli/utils/integrations.ts +42 -0
  55. package/src/cli/utils.ts +231 -0
  56. package/src/core/catalog.diff.ts +246 -0
  57. package/src/core/catalog.model.ts +384 -0
  58. package/src/core/change.types.ts +44 -0
  59. package/src/core/context.ts +26 -0
  60. package/src/core/depend.ts +1870 -0
  61. package/src/core/expand-replace-dependencies.ts +380 -0
  62. package/src/core/fingerprint.ts +204 -0
  63. package/src/core/integrations/filter/dsl.ts +204 -0
  64. package/src/core/integrations/filter/extractors.ts +145 -0
  65. package/src/core/integrations/filter/filter.types.ts +3 -0
  66. package/src/core/integrations/integration-dsl.ts +24 -0
  67. package/src/core/integrations/integration.types.ts +7 -0
  68. package/src/core/integrations/serialize/dsl.ts +77 -0
  69. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  70. package/src/core/integrations/supabase.ts +121 -0
  71. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  72. package/src/core/objects/aggregate/aggregate.diff.ts +278 -0
  73. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  74. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +64 -0
  75. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  76. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  77. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +86 -0
  78. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  79. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +101 -0
  80. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  81. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +78 -0
  82. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  83. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +130 -0
  84. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  85. package/src/core/objects/aggregate/changes/aggregate.types.ts +12 -0
  86. package/src/core/objects/base.change.ts +62 -0
  87. package/src/core/objects/base.default-privileges.ts +204 -0
  88. package/src/core/objects/base.diff.ts +20 -0
  89. package/src/core/objects/base.model.ts +82 -0
  90. package/src/core/objects/base.privilege-diff.ts +299 -0
  91. package/src/core/objects/base.privilege.ts +184 -0
  92. package/src/core/objects/collation/changes/collation.alter.test.ts +63 -0
  93. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  94. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  95. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  96. package/src/core/objects/collation/changes/collation.create.test.ts +51 -0
  97. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  98. package/src/core/objects/collation/changes/collation.drop.test.ts +28 -0
  99. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  100. package/src/core/objects/collation/changes/collation.types.ts +10 -0
  101. package/src/core/objects/collation/collation.diff.test.ts +100 -0
  102. package/src/core/objects/collation/collation.diff.ts +126 -0
  103. package/src/core/objects/collation/collation.model.ts +224 -0
  104. package/src/core/objects/domain/changes/domain.alter.test.ts +316 -0
  105. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  106. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  107. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  108. package/src/core/objects/domain/changes/domain.create.test.ts +65 -0
  109. package/src/core/objects/domain/changes/domain.create.ts +118 -0
  110. package/src/core/objects/domain/changes/domain.drop.test.ts +30 -0
  111. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  112. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  113. package/src/core/objects/domain/changes/domain.types.ts +12 -0
  114. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  115. package/src/core/objects/domain/domain.diff.ts +358 -0
  116. package/src/core/objects/domain/domain.model.ts +190 -0
  117. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +50 -0
  118. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  119. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  120. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  121. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +24 -0
  122. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  123. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +22 -0
  124. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  125. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +10 -0
  126. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +126 -0
  127. package/src/core/objects/event-trigger/event-trigger.diff.ts +126 -0
  128. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  129. package/src/core/objects/extension/changes/extension.alter.test.ts +58 -0
  130. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  131. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  132. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  133. package/src/core/objects/extension/changes/extension.create.test.ts +25 -0
  134. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  135. package/src/core/objects/extension/changes/extension.drop.test.ts +23 -0
  136. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  137. package/src/core/objects/extension/changes/extension.types.ts +10 -0
  138. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  139. package/src/core/objects/extension/extension.diff.ts +90 -0
  140. package/src/core/objects/extension/extension.model.ts +280 -0
  141. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +125 -0
  142. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  143. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  144. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  145. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +125 -0
  146. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  147. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +23 -0
  148. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  149. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  150. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +12 -0
  151. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +179 -0
  152. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +341 -0
  153. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  154. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +10 -0
  155. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +309 -0
  156. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  157. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  158. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  159. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +201 -0
  160. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  161. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +43 -0
  162. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  163. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  164. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +12 -0
  165. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  166. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +406 -0
  167. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  168. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +168 -0
  169. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  170. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  171. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  172. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +131 -0
  173. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  174. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +24 -0
  175. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  176. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  177. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +12 -0
  178. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +167 -0
  179. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +317 -0
  180. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  181. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +82 -0
  182. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  183. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  184. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +85 -0
  185. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  186. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +53 -0
  187. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  188. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +8 -0
  189. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  190. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  191. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  192. package/src/core/objects/index/changes/index.alter.test.ts +200 -0
  193. package/src/core/objects/index/changes/index.alter.ts +144 -0
  194. package/src/core/objects/index/changes/index.base.ts +20 -0
  195. package/src/core/objects/index/changes/index.comment.ts +63 -0
  196. package/src/core/objects/index/changes/index.create.test.ts +66 -0
  197. package/src/core/objects/index/changes/index.create.ts +68 -0
  198. package/src/core/objects/index/changes/index.drop.test.ts +44 -0
  199. package/src/core/objects/index/changes/index.drop.ts +34 -0
  200. package/src/core/objects/index/changes/index.types.ts +6 -0
  201. package/src/core/objects/index/changes/utils.ts +16 -0
  202. package/src/core/objects/index/index.diff.test.ts +153 -0
  203. package/src/core/objects/index/index.diff.ts +243 -0
  204. package/src/core/objects/index/index.model.ts +370 -0
  205. package/src/core/objects/language/changes/language.alter.test.ts +33 -0
  206. package/src/core/objects/language/changes/language.alter.ts +53 -0
  207. package/src/core/objects/language/changes/language.base.ts +20 -0
  208. package/src/core/objects/language/changes/language.comment.ts +58 -0
  209. package/src/core/objects/language/changes/language.create.test.ts +27 -0
  210. package/src/core/objects/language/changes/language.create.ts +104 -0
  211. package/src/core/objects/language/changes/language.drop.test.ts +25 -0
  212. package/src/core/objects/language/changes/language.drop.ts +39 -0
  213. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  214. package/src/core/objects/language/changes/language.types.ts +12 -0
  215. package/src/core/objects/language/language.diff.test.ts +53 -0
  216. package/src/core/objects/language/language.diff.ts +176 -0
  217. package/src/core/objects/language/language.model.ts +150 -0
  218. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +123 -0
  219. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  220. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  221. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  222. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +64 -0
  223. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  224. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +34 -0
  225. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  226. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  227. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +12 -0
  228. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +102 -0
  229. package/src/core/objects/materialized-view/materialized-view.diff.ts +451 -0
  230. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  231. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1005 -0
  232. package/src/core/objects/procedure/changes/procedure.alter.ts +287 -0
  233. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  234. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  235. package/src/core/objects/procedure/changes/procedure.create.test.ts +48 -0
  236. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  237. package/src/core/objects/procedure/changes/procedure.drop.test.ts +85 -0
  238. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  239. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  240. package/src/core/objects/procedure/changes/procedure.types.ts +12 -0
  241. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  242. package/src/core/objects/procedure/procedure.diff.ts +404 -0
  243. package/src/core/objects/procedure/procedure.model.ts +264 -0
  244. package/src/core/objects/procedure/utils.ts +58 -0
  245. package/src/core/objects/publication/changes/publication.alter.test.ts +223 -0
  246. package/src/core/objects/publication/changes/publication.alter.ts +243 -0
  247. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  248. package/src/core/objects/publication/changes/publication.comment.test.ts +70 -0
  249. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  250. package/src/core/objects/publication/changes/publication.create.test.ts +87 -0
  251. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  252. package/src/core/objects/publication/changes/publication.drop.test.ts +46 -0
  253. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  254. package/src/core/objects/publication/changes/publication.types.ts +26 -0
  255. package/src/core/objects/publication/publication.diff.test.ts +292 -0
  256. package/src/core/objects/publication/publication.diff.ts +253 -0
  257. package/src/core/objects/publication/publication.model.ts +206 -0
  258. package/src/core/objects/publication/utils.ts +55 -0
  259. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +250 -0
  260. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  261. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  262. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  263. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +74 -0
  264. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  265. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +28 -0
  266. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  267. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +10 -0
  268. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  269. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  270. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  271. package/src/core/objects/role/changes/role.alter.test.ts +346 -0
  272. package/src/core/objects/role/changes/role.alter.ts +110 -0
  273. package/src/core/objects/role/changes/role.base.ts +24 -0
  274. package/src/core/objects/role/changes/role.comment.ts +55 -0
  275. package/src/core/objects/role/changes/role.create.test.ts +52 -0
  276. package/src/core/objects/role/changes/role.create.ts +102 -0
  277. package/src/core/objects/role/changes/role.drop.test.ts +29 -0
  278. package/src/core/objects/role/changes/role.drop.ts +34 -0
  279. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  280. package/src/core/objects/role/changes/role.types.ts +12 -0
  281. package/src/core/objects/role/role.diff.test.ts +44 -0
  282. package/src/core/objects/role/role.diff.ts +479 -0
  283. package/src/core/objects/role/role.model.ts +344 -0
  284. package/src/core/objects/rule/changes/rule.alter.test.ts +78 -0
  285. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  286. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  287. package/src/core/objects/rule/changes/rule.comment.test.ts +55 -0
  288. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  289. package/src/core/objects/rule/changes/rule.create.test.ts +59 -0
  290. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  291. package/src/core/objects/rule/changes/rule.drop.test.ts +38 -0
  292. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  293. package/src/core/objects/rule/changes/rule.types.ts +12 -0
  294. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  295. package/src/core/objects/rule/rule.diff.ts +79 -0
  296. package/src/core/objects/rule/rule.model.ts +173 -0
  297. package/src/core/objects/schema/changes/schema.alter.test.ts +28 -0
  298. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  299. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  300. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  301. package/src/core/objects/schema/changes/schema.create.test.ts +22 -0
  302. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  303. package/src/core/objects/schema/changes/schema.drop.test.ts +20 -0
  304. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  305. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  306. package/src/core/objects/schema/changes/schema.types.ts +12 -0
  307. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  308. package/src/core/objects/schema/schema.diff.ts +209 -0
  309. package/src/core/objects/schema/schema.model.ts +107 -0
  310. package/src/core/objects/sequence/changes/sequence.alter.test.ts +151 -0
  311. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  312. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  313. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  314. package/src/core/objects/sequence/changes/sequence.create.test.ts +84 -0
  315. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  316. package/src/core/objects/sequence/changes/sequence.drop.test.ts +32 -0
  317. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  318. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  319. package/src/core/objects/sequence/changes/sequence.types.ts +12 -0
  320. package/src/core/objects/sequence/sequence.diff.test.ts +141 -0
  321. package/src/core/objects/sequence/sequence.diff.ts +359 -0
  322. package/src/core/objects/sequence/sequence.model.ts +185 -0
  323. package/src/core/objects/subscription/changes/subscription.alter.test.ts +124 -0
  324. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  325. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  326. package/src/core/objects/subscription/changes/subscription.comment.test.ts +67 -0
  327. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  328. package/src/core/objects/subscription/changes/subscription.create.test.ts +77 -0
  329. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  330. package/src/core/objects/subscription/changes/subscription.drop.test.ts +46 -0
  331. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  332. package/src/core/objects/subscription/changes/subscription.types.ts +22 -0
  333. package/src/core/objects/subscription/subscription.diff.test.ts +232 -0
  334. package/src/core/objects/subscription/subscription.diff.ts +241 -0
  335. package/src/core/objects/subscription/subscription.model.ts +190 -0
  336. package/src/core/objects/subscription/utils.ts +156 -0
  337. package/src/core/objects/table/changes/table.alter.test.ts +823 -0
  338. package/src/core/objects/table/changes/table.alter.ts +806 -0
  339. package/src/core/objects/table/changes/table.base.ts +20 -0
  340. package/src/core/objects/table/changes/table.comment.ts +266 -0
  341. package/src/core/objects/table/changes/table.create.test.ts +150 -0
  342. package/src/core/objects/table/changes/table.create.ts +188 -0
  343. package/src/core/objects/table/changes/table.drop.test.ts +34 -0
  344. package/src/core/objects/table/changes/table.drop.ts +45 -0
  345. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  346. package/src/core/objects/table/changes/table.types.ts +12 -0
  347. package/src/core/objects/table/table.diff.test.ts +711 -0
  348. package/src/core/objects/table/table.diff.ts +953 -0
  349. package/src/core/objects/table/table.model.ts +460 -0
  350. package/src/core/objects/trigger/changes/trigger.alter.test.ts +46 -0
  351. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  352. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  353. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  354. package/src/core/objects/trigger/changes/trigger.create.test.ts +43 -0
  355. package/src/core/objects/trigger/changes/trigger.create.ts +85 -0
  356. package/src/core/objects/trigger/changes/trigger.drop.test.ts +43 -0
  357. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  358. package/src/core/objects/trigger/changes/trigger.types.ts +10 -0
  359. package/src/core/objects/trigger/trigger.diff.test.ts +83 -0
  360. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  361. package/src/core/objects/trigger/trigger.model.ts +252 -0
  362. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +202 -0
  363. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  364. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  365. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  366. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +101 -0
  367. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  368. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +33 -0
  369. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  370. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  371. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +12 -0
  372. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +191 -0
  373. package/src/core/objects/type/composite-type/composite-type.diff.ts +372 -0
  374. package/src/core/objects/type/composite-type/composite-type.model.ts +252 -0
  375. package/src/core/objects/type/enum/changes/enum.alter.test.ts +104 -0
  376. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  377. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  378. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  379. package/src/core/objects/type/enum/changes/enum.create.test.ts +28 -0
  380. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  381. package/src/core/objects/type/enum/changes/enum.drop.test.ts +25 -0
  382. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  383. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  384. package/src/core/objects/type/enum/changes/enum.types.ts +12 -0
  385. package/src/core/objects/type/enum/enum.diff.test.ts +191 -0
  386. package/src/core/objects/type/enum/enum.diff.ts +396 -0
  387. package/src/core/objects/type/enum/enum.model.ts +194 -0
  388. package/src/core/objects/type/range/changes/range.alter.test.ts +27 -0
  389. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  390. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  391. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  392. package/src/core/objects/type/range/changes/range.create.test.ts +51 -0
  393. package/src/core/objects/type/range/changes/range.create.ts +151 -0
  394. package/src/core/objects/type/range/changes/range.drop.test.ts +26 -0
  395. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  396. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  397. package/src/core/objects/type/range/changes/range.types.ts +12 -0
  398. package/src/core/objects/type/range/range.diff.test.ts +70 -0
  399. package/src/core/objects/type/range/range.diff.ts +259 -0
  400. package/src/core/objects/type/range/range.model.ts +187 -0
  401. package/src/core/objects/type/type.types.ts +5 -0
  402. package/src/core/objects/utils.ts +171 -0
  403. package/src/core/objects/view/changes/view.alter.test.ts +110 -0
  404. package/src/core/objects/view/changes/view.alter.ts +112 -0
  405. package/src/core/objects/view/changes/view.base.ts +20 -0
  406. package/src/core/objects/view/changes/view.comment.ts +59 -0
  407. package/src/core/objects/view/changes/view.create.test.ts +65 -0
  408. package/src/core/objects/view/changes/view.create.ts +73 -0
  409. package/src/core/objects/view/changes/view.drop.test.ts +34 -0
  410. package/src/core/objects/view/changes/view.drop.ts +40 -0
  411. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  412. package/src/core/objects/view/changes/view.types.ts +12 -0
  413. package/src/core/objects/view/view.diff.test.ts +91 -0
  414. package/src/core/objects/view/view.diff.ts +365 -0
  415. package/src/core/objects/view/view.model.ts +276 -0
  416. package/src/core/plan/apply.ts +190 -0
  417. package/src/core/plan/create.ts +432 -0
  418. package/src/core/plan/hierarchy.ts +574 -0
  419. package/src/core/plan/index.ts +29 -0
  420. package/src/core/plan/io.ts +20 -0
  421. package/src/core/plan/risk.ts +48 -0
  422. package/src/core/plan/serialize.ts +195 -0
  423. package/src/core/plan/sql-format/constants.ts +13 -0
  424. package/src/core/plan/sql-format/fixtures.ts +2806 -0
  425. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  426. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  427. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +67 -0
  428. package/src/core/plan/sql-format/format-off.test.ts +809 -0
  429. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1056 -0
  430. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1283 -0
  431. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1052 -0
  432. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1045 -0
  433. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  434. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  435. package/src/core/plan/sql-format/format-utils.ts +391 -0
  436. package/src/core/plan/sql-format/formatters.ts +921 -0
  437. package/src/core/plan/sql-format/index.ts +149 -0
  438. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  439. package/src/core/plan/sql-format/keyword-case.ts +1085 -0
  440. package/src/core/plan/sql-format/protect.test.ts +127 -0
  441. package/src/core/plan/sql-format/protect.ts +337 -0
  442. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  443. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  444. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  445. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  446. package/src/core/plan/sql-format/types.ts +31 -0
  447. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  448. package/src/core/plan/sql-format/wrap.ts +196 -0
  449. package/src/core/plan/sql-format.ts +2 -0
  450. package/src/core/plan/statements.ts +22 -0
  451. package/src/core/plan/types.ts +165 -0
  452. package/src/core/postgres-config.ts +169 -0
  453. package/src/core/sort/custom-constraints.ts +161 -0
  454. package/src/core/sort/debug-visualization.ts +239 -0
  455. package/src/core/sort/dependency-filter.ts +224 -0
  456. package/src/core/sort/graph-builder.ts +223 -0
  457. package/src/core/sort/graph-utils.ts +51 -0
  458. package/src/core/sort/logical-sort.ts +590 -0
  459. package/src/core/sort/sort-changes.ts +234 -0
  460. package/src/core/sort/topological-sort.ts +184 -0
  461. package/src/core/sort/types.ts +112 -0
  462. package/src/core/sort/utils.ts +69 -0
  463. package/src/index.ts +14 -0
@@ -0,0 +1,809 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { renderScript } from "./fixtures.ts";
3
+
4
+ describe("sql formatting snapshots", () => {
5
+ test("format-off", () => {
6
+ const output = ["-- format: off", renderScript(undefined)]
7
+ .filter(Boolean)
8
+ .join("\n");
9
+ expect(output).toMatchInlineSnapshot(`
10
+ "-- format: off
11
+ -- schema.create
12
+ CREATE SCHEMA application_schema_with_very_long_name_for_wrapping_tests AUTHORIZATION admin;
13
+
14
+ -- schema.drop
15
+ DROP SCHEMA application_schema_with_very_long_name_for_wrapping_tests;
16
+
17
+ -- schema.alter.change_owner
18
+ ALTER SCHEMA application_schema_with_very_long_name_for_wrapping_tests OWNER TO new_admin;
19
+
20
+ -- schema.comment
21
+ COMMENT ON SCHEMA application_schema_with_very_long_name_for_wrapping_tests IS 'application schema';
22
+
23
+ -- schema.drop_comment
24
+ COMMENT ON SCHEMA application_schema_with_very_long_name_for_wrapping_tests IS NULL;
25
+
26
+ -- schema.grant
27
+ GRANT ALL ON SCHEMA application_schema_with_very_long_name_for_wrapping_tests TO app_user WITH GRANT OPTION;
28
+
29
+ -- schema.revoke
30
+ REVOKE CREATE ON SCHEMA application_schema_with_very_long_name_for_wrapping_tests FROM app_user;
31
+
32
+ -- schema.revoke_grant_option
33
+ REVOKE GRANT OPTION FOR USAGE ON SCHEMA application_schema_with_very_long_name_for_wrapping_tests FROM app_user;
34
+
35
+ -- extension.create
36
+ CREATE EXTENSION pgcrypto WITH SCHEMA extensions;
37
+
38
+ -- extension.drop
39
+ DROP EXTENSION pgcrypto;
40
+
41
+ -- extension.alter.update_version
42
+ ALTER EXTENSION pgcrypto UPDATE TO '1.4';
43
+
44
+ -- extension.alter.set_schema
45
+ ALTER EXTENSION pgcrypto SET SCHEMA public;
46
+
47
+ -- extension.comment
48
+ COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
49
+
50
+ -- extension.drop_comment
51
+ COMMENT ON EXTENSION pgcrypto IS NULL;
52
+
53
+ -- domain.create
54
+ CREATE DOMAIN public.test_domain_all AS custom.text[][] COLLATE mycoll DEFAULT 'hello' NOT NULL CHECK (VALUE <> '');
55
+
56
+ -- domain.drop
57
+ DROP DOMAIN public.test_domain_all;
58
+
59
+ -- domain.alter.set_default
60
+ ALTER DOMAIN public.test_domain_all SET DEFAULT 'world';
61
+
62
+ -- domain.alter.drop_default
63
+ ALTER DOMAIN public.test_domain_all DROP DEFAULT;
64
+
65
+ -- domain.alter.set_not_null
66
+ ALTER DOMAIN public.test_domain_all SET NOT NULL;
67
+
68
+ -- domain.alter.drop_not_null
69
+ ALTER DOMAIN public.test_domain_all DROP NOT NULL;
70
+
71
+ -- domain.alter.change_owner
72
+ ALTER DOMAIN public.test_domain_all OWNER TO new_owner;
73
+
74
+ -- domain.alter.add_constraint
75
+ ALTER DOMAIN public.test_domain_all ADD CONSTRAINT domain_len_chk CHECK (char_length(VALUE) <= 255) NOT VALID;
76
+
77
+ -- domain.alter.drop_constraint
78
+ ALTER DOMAIN public.test_domain_all DROP CONSTRAINT domain_chk;
79
+
80
+ -- domain.alter.validate_constraint
81
+ ALTER DOMAIN public.test_domain_all VALIDATE CONSTRAINT domain_len_chk;
82
+
83
+ -- domain.comment
84
+ COMMENT ON DOMAIN public.test_domain_all IS 'domain comment';
85
+
86
+ -- domain.drop_comment
87
+ COMMENT ON DOMAIN public.test_domain_all IS NULL;
88
+
89
+ -- domain.grant
90
+ GRANT ALL ON DOMAIN public.test_domain_all TO app_user;
91
+
92
+ -- domain.revoke
93
+ REVOKE ALL ON DOMAIN public.test_domain_all FROM app_user;
94
+
95
+ -- domain.revoke_grant_option
96
+ REVOKE GRANT OPTION FOR ALL ON DOMAIN public.test_domain_all FROM app_user;
97
+
98
+ -- type.enum.create
99
+ CREATE TYPE public.test_enum AS ENUM ('value1', 'value2', 'value3');
100
+
101
+ -- type.enum.drop
102
+ DROP TYPE public.test_enum;
103
+
104
+ -- type.enum.alter.change_owner
105
+ ALTER TYPE public.test_enum OWNER TO new_owner;
106
+
107
+ -- type.enum.alter.add_value
108
+ ALTER TYPE public.test_enum ADD VALUE 'value4' AFTER 'value2';
109
+
110
+ -- type.enum.comment
111
+ COMMENT ON TYPE public.test_enum IS 'enum comment';
112
+
113
+ -- type.enum.drop_comment
114
+ COMMENT ON TYPE public.test_enum IS NULL;
115
+
116
+ -- type.enum.grant
117
+ GRANT ALL ON TYPE public.test_enum TO app_user;
118
+
119
+ -- type.enum.revoke
120
+ REVOKE ALL ON TYPE public.test_enum FROM app_user;
121
+
122
+ -- type.enum.revoke_grant_option
123
+ REVOKE GRANT OPTION FOR ALL ON TYPE public.test_enum FROM app_user;
124
+
125
+ -- type.composite.create
126
+ CREATE TYPE public.test_type AS (id integer, name text COLLATE "en_US");
127
+
128
+ -- type.composite.drop
129
+ DROP TYPE public.test_type;
130
+
131
+ -- type.composite.alter.change_owner
132
+ ALTER TYPE public.test_type OWNER TO new_owner;
133
+
134
+ -- type.composite.alter.add_attribute
135
+ ALTER TYPE public.test_type ADD ATTRIBUTE age integer;
136
+
137
+ -- type.composite.alter.drop_attribute
138
+ ALTER TYPE public.test_type DROP ATTRIBUTE name;
139
+
140
+ -- type.composite.alter.alter_attr_type
141
+ ALTER TYPE public.test_type ALTER ATTRIBUTE name TYPE varchar(255) COLLATE "C";
142
+
143
+ -- type.composite.comment
144
+ COMMENT ON TYPE public.test_type IS 'composite comment';
145
+
146
+ -- type.composite.drop_comment
147
+ COMMENT ON TYPE public.test_type IS NULL;
148
+
149
+ -- type.composite.attr_comment
150
+ COMMENT ON COLUMN public.test_type.id IS 'attr comment';
151
+
152
+ -- type.composite.drop_attr_comment
153
+ COMMENT ON COLUMN public.test_type.id IS NULL;
154
+
155
+ -- type.composite.grant
156
+ GRANT ALL ON TYPE public.test_type TO app_user;
157
+
158
+ -- type.composite.revoke
159
+ REVOKE ALL ON TYPE public.test_type FROM app_user;
160
+
161
+ -- type.composite.revoke_grant_option
162
+ REVOKE GRANT OPTION FOR ALL ON TYPE public.test_type FROM app_user;
163
+
164
+ -- type.range.create
165
+ CREATE TYPE public.daterange_custom AS RANGE (SUBTYPE = date, SUBTYPE_OPCLASS = public.date_ops, COLLATION = "en_US", CANONICAL = public.canon_fn, SUBTYPE_DIFF = public.diff_fn);
166
+
167
+ -- type.range.drop
168
+ DROP TYPE public.daterange_custom;
169
+
170
+ -- type.range.alter.change_owner
171
+ ALTER TYPE public.daterange_custom OWNER TO new_owner;
172
+
173
+ -- type.range.comment
174
+ COMMENT ON TYPE public.daterange_custom IS 'range comment';
175
+
176
+ -- type.range.drop_comment
177
+ COMMENT ON TYPE public.daterange_custom IS NULL;
178
+
179
+ -- type.range.grant
180
+ GRANT ALL ON TYPE public.daterange_custom TO app_user;
181
+
182
+ -- type.range.revoke
183
+ REVOKE ALL ON TYPE public.daterange_custom FROM app_user;
184
+
185
+ -- type.range.revoke_grant_option
186
+ REVOKE GRANT OPTION FOR ALL ON TYPE public.daterange_custom FROM app_user;
187
+
188
+ -- collation.create
189
+ CREATE COLLATION public.test (LOCALE = 'en_US', LC_COLLATE = 'en_US', LC_CTYPE = 'en_US', PROVIDER = icu, DETERMINISTIC = false, RULES = '& A < a <<< à', VERSION = '1.0');
190
+
191
+ -- collation.drop
192
+ DROP COLLATION public.test;
193
+
194
+ -- collation.alter.change_owner
195
+ ALTER COLLATION public.test OWNER TO new_owner;
196
+
197
+ -- collation.alter.refresh_version
198
+ ALTER COLLATION public.test REFRESH VERSION;
199
+
200
+ -- collation.comment
201
+ COMMENT ON COLLATION public.test IS 'collation comment';
202
+
203
+ -- collation.drop_comment
204
+ COMMENT ON COLLATION public.test IS NULL;
205
+
206
+ -- table.create
207
+ CREATE TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test (id bigint GENERATED ALWAYS AS IDENTITY NOT NULL, status text COLLATE "en_US" DEFAULT 'pending', created_at timestamptz DEFAULT now(), ref_id bigint, computed bigint GENERATED ALWAYS AS (id * 2) STORED) WITH (fillfactor=70, autovacuum_enabled=false);
208
+
209
+ -- table.drop
210
+ DROP TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test;
211
+
212
+ -- table.alter.add_column
213
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ADD COLUMN email text COLLATE "en_US" DEFAULT 'user@example.com' NOT NULL;
214
+
215
+ -- table.alter.drop_column
216
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test DROP COLUMN computed;
217
+
218
+ -- table.alter.column_type
219
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ALTER COLUMN status TYPE character varying(255) COLLATE "C";
220
+
221
+ -- table.alter.column_set_default
222
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ALTER COLUMN status SET DEFAULT 'active';
223
+
224
+ -- table.alter.column_drop_default
225
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ALTER COLUMN status DROP DEFAULT;
226
+
227
+ -- table.alter.column_set_not_null
228
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ALTER COLUMN status SET NOT NULL;
229
+
230
+ -- table.alter.column_drop_not_null
231
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ALTER COLUMN status DROP NOT NULL;
232
+
233
+ -- table.alter.add_constraint
234
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ADD CONSTRAINT uq_t_fmt_status UNIQUE (status);
235
+
236
+ -- table.alter.add_fk_constraint
237
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ADD CONSTRAINT fk_t_fmt_ref FOREIGN KEY (ref_id) REFERENCES public.other_table(id) MATCH FULL ON UPDATE SET NULL ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
238
+
239
+ -- table.alter.drop_constraint
240
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test DROP CONSTRAINT uq_t_fmt_status;
241
+
242
+ -- table.alter.validate_constraint
243
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test VALIDATE CONSTRAINT chk_t_fmt_status;
244
+
245
+ -- table.alter.change_owner
246
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test OWNER TO new_owner;
247
+
248
+ -- table.alter.set_logged
249
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test SET LOGGED;
250
+
251
+ -- table.alter.set_unlogged
252
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test SET UNLOGGED;
253
+
254
+ -- table.alter.enable_rls
255
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test ENABLE ROW LEVEL SECURITY;
256
+
257
+ -- table.alter.disable_rls
258
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test DISABLE ROW LEVEL SECURITY;
259
+
260
+ -- table.alter.force_rls
261
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test FORCE ROW LEVEL SECURITY;
262
+
263
+ -- table.alter.no_force_rls
264
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test NO FORCE ROW LEVEL SECURITY;
265
+
266
+ -- table.alter.set_storage_params
267
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test SET (fillfactor=80, autovacuum_enabled=true);
268
+
269
+ -- table.alter.reset_storage_params
270
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test RESET (fillfactor, autovacuum_enabled);
271
+
272
+ -- table.alter.replica_identity
273
+ ALTER TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test REPLICA IDENTITY FULL;
274
+
275
+ -- table.alter.attach_partition
276
+ ALTER TABLE public.events ATTACH PARTITION public.events_2024 FOR VALUES FROM ('2024-01-01') TO ('2025-01-01');
277
+
278
+ -- table.alter.detach_partition
279
+ ALTER TABLE public.events DETACH PARTITION public.events_2024;
280
+
281
+ -- table.comment
282
+ COMMENT ON TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test IS 'table comment';
283
+
284
+ -- table.drop_comment
285
+ COMMENT ON TABLE public.table_with_very_long_name_for_formatting_and_wrapping_test IS NULL;
286
+
287
+ -- table.column_comment
288
+ COMMENT ON COLUMN public.table_with_very_long_name_for_formatting_and_wrapping_test.id IS 'id column';
289
+
290
+ -- table.drop_column_comment
291
+ COMMENT ON COLUMN public.table_with_very_long_name_for_formatting_and_wrapping_test.id IS NULL;
292
+
293
+ -- table.constraint_comment
294
+ COMMENT ON CONSTRAINT pk_t_fmt ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS 'primary key';
295
+
296
+ -- table.drop_constraint_comment
297
+ COMMENT ON CONSTRAINT chk_t_fmt_status ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS NULL;
298
+
299
+ -- table.grant
300
+ GRANT INSERT, SELECT ON public.table_with_very_long_name_for_formatting_and_wrapping_test TO app_reader;
301
+
302
+ -- table.revoke
303
+ REVOKE DELETE, UPDATE ON public.table_with_very_long_name_for_formatting_and_wrapping_test FROM app_reader;
304
+
305
+ -- table.revoke_grant_option
306
+ REVOKE GRANT OPTION FOR INSERT, SELECT ON public.table_with_very_long_name_for_formatting_and_wrapping_test FROM app_reader;
307
+
308
+ -- publication.create
309
+ CREATE PUBLICATION pub_custom FOR 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;
310
+
311
+ -- publication.drop
312
+ DROP PUBLICATION pub_custom;
313
+
314
+ -- publication.alter.set_options
315
+ ALTER PUBLICATION pub_custom SET (publish = 'insert, update, delete, truncate', publish_via_partition_root = false);
316
+
317
+ -- publication.alter.set_all_tables
318
+ ALTER PUBLICATION pub_custom SET FOR ALL TABLES;
319
+
320
+ -- publication.alter.set_list
321
+ 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
+
323
+ -- publication.alter.add_tables
324
+ ALTER PUBLICATION pub_custom ADD TABLE public.new_table_with_very_long_name_for_formatting_and_wrapping_test;
325
+
326
+ -- publication.alter.drop_tables
327
+ ALTER PUBLICATION pub_custom DROP TABLE public.comments_a_little_smaller_name_than_the_previous_one;
328
+
329
+ -- publication.alter.add_schemas
330
+ ALTER PUBLICATION pub_custom ADD TABLES IN SCHEMA staging;
331
+
332
+ -- publication.alter.drop_schemas
333
+ ALTER PUBLICATION pub_custom DROP TABLES IN SCHEMA analytics;
334
+
335
+ -- publication.alter.set_owner
336
+ ALTER PUBLICATION pub_custom OWNER TO new_owner;
337
+
338
+ -- publication.comment
339
+ COMMENT ON PUBLICATION pub_custom IS 'publication comment';
340
+
341
+ -- publication.drop_comment
342
+ COMMENT ON PUBLICATION pub_custom IS NULL;
343
+
344
+ -- view.create
345
+ CREATE VIEW public.test_view WITH (security_barrier=true, check_option=local) AS SELECT *
346
+ FROM test_table;
347
+
348
+ -- view.drop
349
+ DROP VIEW public.test_view;
350
+
351
+ -- view.alter.change_owner
352
+ ALTER VIEW public.test_view OWNER TO new_owner;
353
+
354
+ -- view.alter.set_options
355
+ ALTER VIEW public.test_view SET (security_barrier=true, check_option=cascaded);
356
+
357
+ -- view.alter.reset_options
358
+ ALTER VIEW public.test_view RESET (security_barrier);
359
+
360
+ -- view.comment
361
+ COMMENT ON VIEW public.test_view IS 'view comment';
362
+
363
+ -- view.drop_comment
364
+ COMMENT ON VIEW public.test_view IS NULL;
365
+
366
+ -- view.grant
367
+ GRANT SELECT ON public.test_view TO app_reader WITH GRANT OPTION;
368
+
369
+ -- view.revoke
370
+ REVOKE SELECT ON public.test_view FROM app_reader;
371
+
372
+ -- view.revoke_grant_option
373
+ REVOKE GRANT OPTION FOR SELECT ON public.test_view FROM app_reader;
374
+
375
+ -- rule.create
376
+ CREATE RULE test_rule AS ON INSERT TO public.test_table DO INSTEAD NOTHING;
377
+
378
+ -- rule.drop
379
+ DROP RULE test_rule ON public.test_table;
380
+
381
+ -- rule.replace
382
+ CREATE OR REPLACE RULE test_rule AS ON INSERT TO public.test_table DO INSTEAD NOTHING;
383
+
384
+ -- rule.alter.set_enabled
385
+ ALTER TABLE public.test_table DISABLE RULE test_rule;
386
+
387
+ -- rule.comment
388
+ COMMENT ON RULE test_rule ON public.test_table IS 'rule comment';
389
+
390
+ -- rule.drop_comment
391
+ COMMENT ON RULE test_rule ON public.test_table IS NULL;
392
+
393
+ -- procedure.create
394
+ CREATE PROCEDURE public.test_procedure() LANGUAGE plpgsql AS $$ begin null; end; $$;
395
+
396
+ -- procedure.drop
397
+ DROP PROCEDURE public.test_procedure();
398
+
399
+ -- function.create
400
+ CREATE FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name("p_schema_name_for_analytics" text, "p_table_name_for_metrics" text, "p_limit_count_default" integer DEFAULT 100) RETURNS TABLE(total bigint, average numeric) LANGUAGE plpgsql STABLE SECURITY DEFINER PARALLEL SAFE COST 100 ROWS 10 STRICT SET search_path TO 'pg_catalog', 'public' AS $function$ BEGIN RETURN QUERY SELECT count(*)::bigint, avg(value)::numeric FROM generate_series(1, p_limit_count_default); END; $function$;
401
+
402
+ -- function.drop
403
+ 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
+
405
+ -- function.alter.change_owner
406
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name OWNER TO new_admin;
407
+
408
+ -- function.alter.set_security
409
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name SECURITY INVOKER;
410
+
411
+ -- function.alter.set_config
412
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name SET work_mem TO '256MB';
413
+
414
+ -- function.alter.set_volatility
415
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name IMMUTABLE;
416
+
417
+ -- function.alter.set_strictness
418
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name CALLED ON NULL INPUT;
419
+
420
+ -- function.alter.set_leakproof
421
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name LEAKPROOF;
422
+
423
+ -- function.alter.set_parallel
424
+ ALTER FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name PARALLEL RESTRICTED;
425
+
426
+ -- function.comment
427
+ COMMENT ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text,text,integer) IS 'Calculate metrics for a given table';
428
+
429
+ -- function.drop_comment
430
+ COMMENT ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text,text,integer) IS NULL;
431
+
432
+ -- function.grant
433
+ GRANT ALL ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) TO app_user WITH GRANT OPTION;
434
+
435
+ -- function.revoke
436
+ REVOKE ALL ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) FROM app_user;
437
+
438
+ -- function.revoke_grant_option
439
+ REVOKE GRANT OPTION FOR ALL ON FUNCTION public.calculate_metrics_for_analytics_dashboard_with_extended_name(text, text, integer) FROM app_user;
440
+
441
+ -- sequence.create
442
+ CREATE SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
443
+
444
+ -- sequence.drop
445
+ DROP SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq;
446
+
447
+ -- sequence.alter.set_owned_by
448
+ ALTER SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq OWNED BY public.table_with_very_long_name_for_formatting_and_wrapping_test.id;
449
+
450
+ -- sequence.alter.set_options
451
+ ALTER SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq INCREMENT BY 10 MINVALUE 1 MAXVALUE 1000000 CACHE 5 CYCLE;
452
+
453
+ -- sequence.comment
454
+ COMMENT ON SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq IS 'sequence for table_with_very_long_name_for_formatting_and_wrapping_test.id';
455
+
456
+ -- sequence.drop_comment
457
+ COMMENT ON SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq IS NULL;
458
+
459
+ -- sequence.grant
460
+ GRANT SELECT, USAGE ON SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq TO app_user;
461
+
462
+ -- sequence.revoke
463
+ REVOKE USAGE ON SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq FROM app_user;
464
+
465
+ -- sequence.revoke_grant_option
466
+ REVOKE GRANT OPTION FOR USAGE ON SEQUENCE public.table_with_very_long_name_for_formatting_and_wrapping_test_id_seq FROM app_user;
467
+
468
+ -- policy.create
469
+ CREATE POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test FOR SELECT TO authenticated USING (auth.uid() = user_id);
470
+
471
+ -- policy.create_restrictive
472
+ CREATE POLICY restrict_delete ON public.table_with_very_long_name_for_formatting_and_wrapping_test AS RESTRICTIVE FOR DELETE TO authenticated, service_role USING (auth.uid() = owner_id) WITH CHECK (status <> 'locked');
473
+
474
+ -- policy.drop
475
+ DROP POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test;
476
+
477
+ -- 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;
479
+
480
+ -- 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');
482
+
483
+ -- 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);
485
+
486
+ -- policy.comment
487
+ COMMENT ON POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS 'rls policy comment';
488
+
489
+ -- policy.drop_comment
490
+ COMMENT ON POLICY allow_select_own ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS NULL;
491
+
492
+ -- index.create
493
+ CREATE UNIQUE INDEX idx_t_fmt_status ON public.table_with_very_long_name_for_formatting_and_wrapping_test (status) WITH (fillfactor='90') WHERE (status <> 'archived'::text);
494
+
495
+ -- index.create_gin
496
+ CREATE INDEX idx_t_fmt_search ON public.table_with_very_long_name_for_formatting_and_wrapping_test USING gin (to_tsvector('english'::regconfig, status));
497
+
498
+ -- index.drop
499
+ DROP INDEX public.idx_t_fmt_status;
500
+
501
+ -- index.alter.set_storage_params
502
+ ALTER INDEX public.idx_t_fmt_status RESET (deduplicate_items);
503
+ ALTER INDEX public.idx_t_fmt_status SET (fillfactor=80);
504
+
505
+ -- index.alter.set_statistics
506
+ ALTER INDEX public.idx_t_fmt_status ALTER COLUMN 1 SET STATISTICS 500;
507
+
508
+ -- index.comment
509
+ COMMENT ON INDEX public.idx_t_fmt_status IS 'index comment';
510
+
511
+ -- index.drop_comment
512
+ COMMENT ON INDEX public.idx_t_fmt_status IS NULL;
513
+
514
+ -- trigger.create
515
+ CREATE TRIGGER trg_audit AFTER INSERT OR UPDATE ON public.table_with_very_long_name_for_formatting_and_wrapping_test REFERENCING OLD TABLE AS old_rows NEW TABLE AS new_rows FOR EACH ROW WHEN ((NEW.status IS DISTINCT FROM OLD.status)) EXECUTE FUNCTION public.audit_trigger_fn('arg1', 'arg2');
516
+
517
+ -- trigger.drop
518
+ DROP TRIGGER trg_audit ON public.table_with_very_long_name_for_formatting_and_wrapping_test;
519
+
520
+ -- trigger.replace
521
+ CREATE OR REPLACE TRIGGER trg_audit AFTER INSERT OR UPDATE ON public.table_with_very_long_name_for_formatting_and_wrapping_test REFERENCING OLD TABLE AS old_rows NEW TABLE AS new_rows FOR EACH ROW WHEN ((NEW.status IS DISTINCT FROM OLD.status)) EXECUTE FUNCTION public.audit_trigger_fn('arg1', 'arg2');
522
+
523
+ -- trigger.comment
524
+ COMMENT ON TRIGGER trg_audit ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS 'trigger comment';
525
+
526
+ -- trigger.drop_comment
527
+ COMMENT ON TRIGGER trg_audit ON public.table_with_very_long_name_for_formatting_and_wrapping_test IS NULL;
528
+
529
+ -- matview.create
530
+ CREATE MATERIALIZED VIEW analytics.daily_stats WITH (fillfactor=70) AS SELECT date_trunc('day', created_at) AS day, count(*) AS total
531
+ FROM public.events
532
+ GROUP BY 1 WITH DATA;
533
+
534
+ -- matview.drop
535
+ DROP MATERIALIZED VIEW analytics.daily_stats;
536
+
537
+ -- matview.alter.change_owner
538
+ ALTER MATERIALIZED VIEW analytics.daily_stats OWNER TO new_owner;
539
+
540
+ -- matview.alter.set_storage
541
+ ALTER MATERIALIZED VIEW analytics.daily_stats RESET (autovacuum_enabled);
542
+ ALTER MATERIALIZED VIEW analytics.daily_stats SET (fillfactor=80);
543
+
544
+ -- matview.comment
545
+ COMMENT ON MATERIALIZED VIEW analytics.daily_stats IS 'daily aggregation';
546
+
547
+ -- matview.drop_comment
548
+ COMMENT ON MATERIALIZED VIEW analytics.daily_stats IS NULL;
549
+
550
+ -- matview.column_comment
551
+ COMMENT ON COLUMN analytics.daily_stats.day IS 'day bucket';
552
+
553
+ -- matview.drop_column_comment
554
+ COMMENT ON COLUMN analytics.daily_stats.day IS NULL;
555
+
556
+ -- matview.grant
557
+ GRANT SELECT ON analytics.daily_stats TO app_reader;
558
+
559
+ -- matview.revoke
560
+ REVOKE SELECT ON analytics.daily_stats FROM app_reader;
561
+
562
+ -- matview.revoke_grant_option
563
+ REVOKE GRANT OPTION FOR SELECT ON analytics.daily_stats FROM app_reader;
564
+
565
+ -- aggregate.create
566
+ CREATE AGGREGATE public.array_cat_agg(anycompatiblearray) (SFUNC = array_cat, STYPE = anycompatiblearray, COMBINEFUNC = array_cat, INITCOND = '{}', PARALLEL SAFE, STRICT);
567
+
568
+ -- aggregate.drop
569
+ DROP AGGREGATE public.array_cat_agg(anycompatiblearray);
570
+
571
+ -- aggregate.alter.change_owner
572
+ ALTER AGGREGATE public.array_cat_agg(anycompatiblearray) OWNER TO new_owner;
573
+
574
+ -- aggregate.comment
575
+ COMMENT ON AGGREGATE public.array_cat_agg(anycompatiblearray) IS 'concatenate arrays aggregate';
576
+
577
+ -- aggregate.drop_comment
578
+ COMMENT ON AGGREGATE public.array_cat_agg(anycompatiblearray) IS NULL;
579
+
580
+ -- aggregate.grant
581
+ GRANT ALL ON FUNCTION public.array_cat_agg(anycompatiblearray) TO app_user;
582
+
583
+ -- aggregate.revoke
584
+ REVOKE ALL ON FUNCTION public.array_cat_agg(anycompatiblearray) FROM app_user;
585
+
586
+ -- aggregate.revoke_grant_option
587
+ REVOKE GRANT OPTION FOR ALL ON FUNCTION public.array_cat_agg(anycompatiblearray) FROM app_user;
588
+
589
+ -- event_trigger.create
590
+ CREATE EVENT TRIGGER prevent_drop ON sql_drop WHEN TAG IN ('DROP TABLE', 'DROP SCHEMA') EXECUTE FUNCTION public.prevent_drop_fn();
591
+
592
+ -- event_trigger.drop
593
+ DROP EVENT TRIGGER prevent_drop;
594
+
595
+ -- event_trigger.alter.change_owner
596
+ ALTER EVENT TRIGGER prevent_drop OWNER TO new_owner;
597
+
598
+ -- event_trigger.alter.set_enabled
599
+ ALTER EVENT TRIGGER prevent_drop DISABLE;
600
+
601
+ -- event_trigger.comment
602
+ COMMENT ON EVENT TRIGGER prevent_drop IS 'prevent accidental drops';
603
+
604
+ -- event_trigger.drop_comment
605
+ COMMENT ON EVENT TRIGGER prevent_drop IS NULL;
606
+
607
+ -- language.create
608
+ CREATE TRUSTED LANGUAGE plv8 HANDLER plv8_call_handler INLINE plv8_inline_handler VALIDATOR plv8_call_validator;
609
+
610
+ -- language.drop
611
+ DROP LANGUAGE plv8;
612
+
613
+ -- language.alter.change_owner
614
+ ALTER LANGUAGE plv8 OWNER TO new_owner;
615
+
616
+ -- language.comment
617
+ COMMENT ON LANGUAGE plv8 IS 'PL/V8 trusted procedural language';
618
+
619
+ -- language.drop_comment
620
+ COMMENT ON LANGUAGE plv8 IS NULL;
621
+
622
+ -- language.grant
623
+ GRANT ALL ON LANGUAGE plv8 TO app_user WITH GRANT OPTION;
624
+
625
+ -- language.revoke
626
+ REVOKE ALL ON LANGUAGE plv8 FROM app_user;
627
+
628
+ -- language.revoke_grant_option
629
+ REVOKE GRANT OPTION FOR ALL ON LANGUAGE plv8 FROM app_user;
630
+
631
+ -- role.create
632
+ CREATE ROLE app_user WITH LOGIN CONNECTION LIMIT 100;
633
+
634
+ -- role.drop
635
+ DROP ROLE app_user;
636
+
637
+ -- role.alter.set_options
638
+ ALTER ROLE app_user WITH NOSUPERUSER CREATEDB;
639
+
640
+ -- role.alter.set_config
641
+ ALTER ROLE app_user SET statement_timeout TO '60000';
642
+
643
+ -- role.comment
644
+ COMMENT ON ROLE app_user IS 'application user role';
645
+
646
+ -- role.drop_comment
647
+ COMMENT ON ROLE app_user IS NULL;
648
+
649
+ -- role.grant_membership
650
+ GRANT app_user TO dev_user WITH ADMIN OPTION;
651
+
652
+ -- role.revoke_membership
653
+ REVOKE app_user FROM dev_user;
654
+
655
+ -- role.revoke_membership_options
656
+ REVOKE ADMIN OPTION FOR app_user FROM dev_user;
657
+
658
+ -- role.grant_default_privileges
659
+ ALTER DEFAULT PRIVILEGES FOR ROLE app_user IN SCHEMA public GRANT SELECT ON TABLES TO app_reader;
660
+
661
+ -- role.revoke_default_privileges
662
+ ALTER DEFAULT PRIVILEGES FOR ROLE app_user IN SCHEMA public REVOKE SELECT ON TABLES FROM app_reader;
663
+
664
+ -- subscription.create
665
+ CREATE SUBSCRIPTION sub_replica CONNECTION 'host=primary.db port=5432 dbname=mydb' PUBLICATION pub_custom WITH (slot_name = 'sub_replica_slot', binary = true, streaming = 'parallel', synchronous_commit = 'remote_apply', disable_on_error = true, failover = true);
666
+
667
+ -- subscription.drop
668
+ DROP SUBSCRIPTION sub_replica;
669
+
670
+ -- subscription.alter.set_connection
671
+ ALTER SUBSCRIPTION sub_replica CONNECTION 'host=primary.db port=5432 dbname=mydb';
672
+
673
+ -- subscription.alter.set_publication
674
+ ALTER SUBSCRIPTION sub_replica SET PUBLICATION pub_custom;
675
+
676
+ -- subscription.alter.enable
677
+ ALTER SUBSCRIPTION sub_replica ENABLE;
678
+
679
+ -- subscription.alter.disable
680
+ ALTER SUBSCRIPTION sub_replica DISABLE;
681
+
682
+ -- subscription.alter.set_options
683
+ ALTER SUBSCRIPTION sub_replica SET (binary = true, streaming = 'parallel', synchronous_commit = 'remote_apply');
684
+
685
+ -- subscription.alter.set_owner
686
+ ALTER SUBSCRIPTION sub_replica OWNER TO new_owner;
687
+
688
+ -- subscription.comment
689
+ COMMENT ON SUBSCRIPTION sub_replica IS 'replication subscription';
690
+
691
+ -- subscription.drop_comment
692
+ COMMENT ON SUBSCRIPTION sub_replica IS NULL;
693
+
694
+ -- fdw.create
695
+ CREATE FOREIGN DATA WRAPPER postgres_fdw HANDLER postgres_fdw_handler VALIDATOR postgres_fdw_validator OPTIONS (debug 'true');
696
+
697
+ -- fdw.drop
698
+ DROP FOREIGN DATA WRAPPER postgres_fdw;
699
+
700
+ -- fdw.alter.change_owner
701
+ ALTER FOREIGN DATA WRAPPER postgres_fdw OWNER TO new_owner;
702
+
703
+ -- fdw.alter.set_options
704
+ ALTER FOREIGN DATA WRAPPER postgres_fdw OPTIONS (SET debug 'false', ADD use_remote_estimate '');
705
+
706
+ -- fdw.comment
707
+ COMMENT ON FOREIGN DATA WRAPPER postgres_fdw IS 'PostgreSQL foreign data wrapper';
708
+
709
+ -- fdw.drop_comment
710
+ COMMENT ON FOREIGN DATA WRAPPER postgres_fdw IS NULL;
711
+
712
+ -- fdw.grant
713
+ GRANT ALL ON FOREIGN DATA WRAPPER postgres_fdw TO app_user;
714
+
715
+ -- fdw.revoke
716
+ REVOKE ALL ON FOREIGN DATA WRAPPER postgres_fdw FROM app_user;
717
+
718
+ -- fdw.revoke_grant_option
719
+ REVOKE GRANT OPTION FOR ALL ON FOREIGN DATA WRAPPER postgres_fdw FROM app_user;
720
+
721
+ -- foreign_table.create
722
+ CREATE FOREIGN TABLE public.remote_users (id integer, email text) SERVER remote_server OPTIONS (schema_name 'public', table_name 'users');
723
+
724
+ -- foreign_table.drop
725
+ DROP FOREIGN TABLE public.remote_users;
726
+
727
+ -- foreign_table.alter.change_owner
728
+ ALTER FOREIGN TABLE public.remote_users OWNER TO new_owner;
729
+
730
+ -- foreign_table.alter.add_column
731
+ ALTER FOREIGN TABLE public.remote_users ADD COLUMN name text NOT NULL DEFAULT 'unknown';
732
+
733
+ -- foreign_table.alter.drop_column
734
+ ALTER FOREIGN TABLE public.remote_users DROP COLUMN email;
735
+
736
+ -- foreign_table.alter.column_type
737
+ ALTER FOREIGN TABLE public.remote_users ALTER COLUMN id TYPE bigint;
738
+
739
+ -- foreign_table.alter.column_set_default
740
+ ALTER FOREIGN TABLE public.remote_users ALTER COLUMN email SET DEFAULT 'nobody@example.com';
741
+
742
+ -- foreign_table.alter.column_drop_default
743
+ ALTER FOREIGN TABLE public.remote_users ALTER COLUMN email DROP DEFAULT;
744
+
745
+ -- foreign_table.alter.column_set_not_null
746
+ ALTER FOREIGN TABLE public.remote_users ALTER COLUMN email SET NOT NULL;
747
+
748
+ -- foreign_table.alter.column_drop_not_null
749
+ ALTER FOREIGN TABLE public.remote_users ALTER COLUMN email DROP NOT NULL;
750
+
751
+ -- foreign_table.alter.set_options
752
+ ALTER FOREIGN TABLE public.remote_users OPTIONS (SET fetch_size '1000');
753
+
754
+ -- foreign_table.comment
755
+ COMMENT ON FOREIGN TABLE public.remote_users IS 'remote users table';
756
+
757
+ -- foreign_table.drop_comment
758
+ COMMENT ON FOREIGN TABLE public.remote_users IS NULL;
759
+
760
+ -- foreign_table.grant
761
+ GRANT SELECT ON FOREIGN TABLE public.remote_users TO app_reader;
762
+
763
+ -- foreign_table.revoke
764
+ REVOKE SELECT ON FOREIGN TABLE public.remote_users FROM app_reader;
765
+
766
+ -- foreign_table.revoke_grant_option
767
+ REVOKE GRANT OPTION FOR SELECT ON FOREIGN TABLE public.remote_users FROM app_reader;
768
+
769
+ -- server.create
770
+ CREATE SERVER remote_server TYPE 'postgresql' VERSION '16.0' FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'remote.host', port '5432', dbname 'remote_db');
771
+
772
+ -- server.drop
773
+ DROP SERVER remote_server;
774
+
775
+ -- server.alter.change_owner
776
+ ALTER SERVER remote_server OWNER TO new_owner;
777
+
778
+ -- server.alter.set_version
779
+ ALTER SERVER remote_server VERSION '17.0';
780
+
781
+ -- server.alter.set_options
782
+ ALTER SERVER remote_server OPTIONS (SET host 'new.host', DROP port);
783
+
784
+ -- server.comment
785
+ COMMENT ON SERVER remote_server IS 'remote PostgreSQL server';
786
+
787
+ -- server.drop_comment
788
+ COMMENT ON SERVER remote_server IS NULL;
789
+
790
+ -- server.grant
791
+ GRANT ALL ON SERVER remote_server TO app_user;
792
+
793
+ -- server.revoke
794
+ REVOKE ALL ON SERVER remote_server FROM app_user;
795
+
796
+ -- server.revoke_grant_option
797
+ REVOKE GRANT OPTION FOR ALL ON SERVER remote_server FROM app_user;
798
+
799
+ -- user_mapping.create
800
+ CREATE USER MAPPING FOR app_user SERVER remote_server OPTIONS (user 'remote_app', password 'secret123');
801
+
802
+ -- user_mapping.drop
803
+ DROP USER MAPPING FOR app_user SERVER remote_server;
804
+
805
+ -- user_mapping.alter.set_options
806
+ ALTER USER MAPPING FOR app_user SERVER remote_server OPTIONS (SET password 'new_secret');"
807
+ `);
808
+ });
809
+ });