@supabase/pg-delta 1.0.0-alpha.1 → 1.0.0-alpha.11

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 (717) hide show
  1. package/README.md +41 -2
  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 +240 -0
  10. package/dist/cli/commands/plan.js +47 -16
  11. package/dist/cli/commands/sync.js +8 -12
  12. package/dist/cli/exit-code.d.ts +2 -0
  13. package/dist/cli/exit-code.js +7 -0
  14. package/dist/cli/formatters/tree/tree.js +3 -2
  15. package/dist/cli/utils/apply-display.d.ts +52 -0
  16. package/dist/cli/utils/apply-display.js +183 -0
  17. package/dist/cli/utils/export-display.d.ts +43 -0
  18. package/dist/cli/utils/export-display.js +202 -0
  19. package/dist/cli/utils/integrations.d.ts +30 -6
  20. package/dist/cli/utils/integrations.js +98 -6
  21. package/dist/cli/utils/resolve-input.d.ts +7 -0
  22. package/dist/cli/utils/resolve-input.js +13 -0
  23. package/dist/cli/utils.d.ts +2 -0
  24. package/dist/cli/utils.js +1 -1
  25. package/dist/core/catalog-export/index.d.ts +11 -0
  26. package/dist/core/catalog-export/index.js +10 -0
  27. package/dist/core/catalog.diff.d.ts +1 -0
  28. package/dist/core/catalog.diff.js +64 -48
  29. package/dist/core/catalog.model.d.ts +16 -3
  30. package/dist/core/catalog.model.js +132 -30
  31. package/dist/core/catalog.snapshot.d.ts +66 -0
  32. package/dist/core/catalog.snapshot.js +206 -0
  33. package/dist/core/change-utils.d.ts +9 -0
  34. package/dist/core/change-utils.js +71 -0
  35. package/dist/core/change.types.d.ts +22 -0
  36. package/dist/core/change.types.js +37 -1
  37. package/dist/core/context.d.ts +3 -3
  38. package/dist/core/context.js +7 -10
  39. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  40. package/dist/core/declarative-apply/discover-sql.js +86 -0
  41. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  42. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  43. package/dist/core/declarative-apply/index.d.ts +49 -0
  44. package/dist/core/declarative-apply/index.js +134 -0
  45. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  46. package/dist/core/declarative-apply/round-apply.js +378 -0
  47. package/dist/core/depend.d.ts +2 -2
  48. package/dist/core/depend.js +33 -7
  49. package/dist/core/export/file-mapper.d.ts +71 -0
  50. package/dist/core/export/file-mapper.js +474 -0
  51. package/dist/core/export/grouper.d.ts +13 -0
  52. package/dist/core/export/grouper.js +76 -0
  53. package/dist/core/export/index.d.ts +45 -0
  54. package/dist/core/export/index.js +63 -0
  55. package/dist/core/export/types.d.ts +84 -0
  56. package/dist/core/export/types.js +25 -0
  57. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  58. package/dist/core/integrations/filter/dsl.d.ts +82 -41
  59. package/dist/core/integrations/filter/dsl.js +127 -61
  60. package/dist/core/integrations/filter/flatten.d.ts +51 -0
  61. package/dist/core/integrations/filter/flatten.js +116 -0
  62. package/dist/core/integrations/integration-dsl.d.ts +27 -1
  63. package/dist/core/integrations/merge.d.ts +20 -0
  64. package/dist/core/integrations/merge.js +60 -0
  65. package/dist/core/integrations/serialize/dsl.d.ts +7 -4
  66. package/dist/core/integrations/serialize/dsl.js +2 -2
  67. package/dist/core/integrations/supabase.d.ts +8 -0
  68. package/dist/core/integrations/supabase.js +34 -8
  69. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  70. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  71. package/dist/core/objects/aggregate/aggregate.model.d.ts +10 -10
  72. package/dist/core/objects/aggregate/aggregate.model.js +8 -10
  73. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  74. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  75. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +1 -0
  76. package/dist/core/objects/base.change.d.ts +10 -0
  77. package/dist/core/objects/base.change.js +10 -0
  78. package/dist/core/objects/base.model.d.ts +4 -1
  79. package/dist/core/objects/base.model.js +5 -2
  80. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  81. package/dist/core/objects/base.privilege-diff.js +104 -22
  82. package/dist/core/objects/base.privilege.d.ts +1 -0
  83. package/dist/core/objects/base.privilege.js +9 -2
  84. package/dist/core/objects/collation/changes/collation.types.d.ts +1 -0
  85. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  86. package/dist/core/objects/collation/collation.model.d.ts +2 -2
  87. package/dist/core/objects/collation/collation.model.js +29 -28
  88. package/dist/core/objects/diff-context.d.ts +15 -0
  89. package/dist/core/objects/diff-context.js +1 -0
  90. package/dist/core/objects/domain/changes/domain.create.d.ts +1 -1
  91. package/dist/core/objects/domain/changes/domain.create.js +11 -3
  92. package/dist/core/objects/domain/changes/domain.types.d.ts +1 -0
  93. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  94. package/dist/core/objects/domain/domain.diff.js +16 -77
  95. package/dist/core/objects/domain/domain.model.d.ts +2 -2
  96. package/dist/core/objects/domain/domain.model.js +9 -11
  97. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +1 -0
  98. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  99. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +2 -2
  100. package/dist/core/objects/event-trigger/event-trigger.model.js +7 -9
  101. package/dist/core/objects/extension/changes/extension.types.d.ts +1 -0
  102. package/dist/core/objects/extension/extension.model.d.ts +2 -2
  103. package/dist/core/objects/extension/extension.model.js +8 -10
  104. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +1 -0
  105. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  106. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  107. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +2 -2
  108. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +22 -24
  109. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +1 -0
  110. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +1 -0
  111. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  112. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  113. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +2 -2
  114. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +21 -23
  115. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +1 -0
  116. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  117. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  118. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +2 -2
  119. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +20 -22
  120. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +1 -0
  121. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +2 -2
  122. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +20 -22
  123. package/dist/core/objects/index/changes/index.types.d.ts +1 -0
  124. package/dist/core/objects/index/index.model.d.ts +4 -4
  125. package/dist/core/objects/index/index.model.js +9 -11
  126. package/dist/core/objects/language/changes/language.types.d.ts +1 -0
  127. package/dist/core/objects/language/language.diff.d.ts +2 -5
  128. package/dist/core/objects/language/language.diff.js +7 -39
  129. package/dist/core/objects/language/language.model.js +5 -7
  130. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +1 -0
  131. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  132. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  133. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +5 -5
  134. package/dist/core/objects/materialized-view/materialized-view.model.js +9 -11
  135. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  136. package/dist/core/objects/procedure/changes/procedure.types.d.ts +1 -0
  137. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  138. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  139. package/dist/core/objects/procedure/procedure.model.d.ts +11 -11
  140. package/dist/core/objects/procedure/procedure.model.js +9 -11
  141. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  142. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  143. package/dist/core/objects/publication/changes/publication.types.d.ts +3 -2
  144. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  145. package/dist/core/objects/publication/publication.diff.js +8 -13
  146. package/dist/core/objects/publication/publication.model.d.ts +2 -2
  147. package/dist/core/objects/publication/publication.model.js +7 -9
  148. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  149. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +1 -0
  150. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +4 -4
  151. package/dist/core/objects/rls-policy/rls-policy.model.js +8 -10
  152. package/dist/core/objects/role/changes/role.types.d.ts +1 -0
  153. package/dist/core/objects/role/role.diff.js +22 -1
  154. package/dist/core/objects/role/role.model.d.ts +6 -5
  155. package/dist/core/objects/role/role.model.js +146 -40
  156. package/dist/core/objects/rule/changes/rule.types.d.ts +1 -0
  157. package/dist/core/objects/rule/rule.model.d.ts +3 -3
  158. package/dist/core/objects/rule/rule.model.js +7 -9
  159. package/dist/core/objects/schema/changes/schema.types.d.ts +1 -0
  160. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  161. package/dist/core/objects/schema/schema.diff.js +16 -77
  162. package/dist/core/objects/schema/schema.model.d.ts +2 -2
  163. package/dist/core/objects/schema/schema.model.js +9 -11
  164. package/dist/core/objects/sequence/changes/sequence.types.d.ts +1 -0
  165. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  166. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  167. package/dist/core/objects/sequence/sequence.model.d.ts +2 -2
  168. package/dist/core/objects/sequence/sequence.model.js +9 -11
  169. package/dist/core/objects/subscription/changes/subscription.types.d.ts +1 -0
  170. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  171. package/dist/core/objects/subscription/subscription.model.d.ts +2 -2
  172. package/dist/core/objects/subscription/subscription.model.js +25 -20
  173. package/dist/core/objects/table/changes/table.create.js +3 -0
  174. package/dist/core/objects/table/changes/table.types.d.ts +1 -0
  175. package/dist/core/objects/table/table.diff.d.ts +2 -8
  176. package/dist/core/objects/table/table.diff.js +26 -157
  177. package/dist/core/objects/table/table.model.d.ts +27 -24
  178. package/dist/core/objects/table/table.model.js +12 -11
  179. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  180. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  181. package/dist/core/objects/trigger/changes/trigger.types.d.ts +1 -0
  182. package/dist/core/objects/trigger/trigger.model.d.ts +11 -2
  183. package/dist/core/objects/trigger/trigger.model.js +22 -10
  184. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +1 -0
  185. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  186. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  187. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +5 -5
  188. package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
  189. package/dist/core/objects/type/enum/changes/enum.types.d.ts +1 -0
  190. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  191. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  192. package/dist/core/objects/type/enum/enum.model.d.ts +2 -2
  193. package/dist/core/objects/type/enum/enum.model.js +23 -25
  194. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  195. package/dist/core/objects/type/range/changes/range.types.d.ts +1 -0
  196. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  197. package/dist/core/objects/type/range/range.diff.js +16 -77
  198. package/dist/core/objects/type/range/range.model.d.ts +2 -2
  199. package/dist/core/objects/type/range/range.model.js +8 -10
  200. package/dist/core/objects/type/type.types.d.ts +1 -0
  201. package/dist/core/objects/view/changes/view.types.d.ts +1 -0
  202. package/dist/core/objects/view/view.diff.d.ts +2 -8
  203. package/dist/core/objects/view/view.diff.js +37 -168
  204. package/dist/core/objects/view/view.model.d.ts +20 -6
  205. package/dist/core/objects/view/view.model.js +11 -23
  206. package/dist/core/plan/apply.d.ts +2 -2
  207. package/dist/core/plan/apply.js +33 -16
  208. package/dist/core/plan/create.d.ts +20 -7
  209. package/dist/core/plan/create.js +153 -112
  210. package/dist/core/plan/serialize.js +16 -4
  211. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  212. package/dist/core/plan/sql-format/constants.js +11 -0
  213. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  214. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  215. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  216. package/dist/core/plan/sql-format/format-utils.js +274 -0
  217. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  218. package/dist/core/plan/sql-format/formatters.js +737 -0
  219. package/dist/core/plan/sql-format/index.d.ts +2 -0
  220. package/dist/core/plan/sql-format/index.js +98 -0
  221. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  222. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  223. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  224. package/dist/core/plan/sql-format/protect.js +269 -0
  225. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  226. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  227. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  228. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  229. package/dist/core/plan/sql-format/types.d.ts +28 -0
  230. package/dist/core/plan/sql-format/types.js +1 -0
  231. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  232. package/dist/core/plan/sql-format/wrap.js +165 -0
  233. package/dist/core/plan/sql-format.d.ts +2 -0
  234. package/dist/core/plan/sql-format.js +1 -0
  235. package/dist/core/plan/ssl-config.d.ts +32 -0
  236. package/dist/core/plan/ssl-config.js +115 -0
  237. package/dist/core/plan/statements.d.ts +2 -1
  238. package/dist/core/plan/statements.js +6 -2
  239. package/dist/core/plan/types.d.ts +6 -0
  240. package/dist/core/postgres-config.d.ts +47 -3
  241. package/dist/core/postgres-config.js +225 -39
  242. package/dist/core/sort/custom-constraints.js +1 -1
  243. package/dist/core/sort/graph-builder.js +10 -0
  244. package/dist/core/sort/logical-sort.js +34 -47
  245. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  246. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  247. package/dist/index.d.ts +9 -0
  248. package/dist/index.js +9 -1
  249. package/package.json +60 -22
  250. package/src/cli/app.ts +52 -0
  251. package/src/cli/bin/cli.ts +15 -0
  252. package/src/cli/commands/apply.ts +101 -0
  253. package/src/cli/commands/catalog-export.ts +78 -0
  254. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  255. package/src/cli/commands/declarative-apply.ts +380 -0
  256. package/src/cli/commands/declarative-export.ts +322 -0
  257. package/src/cli/commands/plan.ts +210 -0
  258. package/src/cli/commands/sync.ts +178 -0
  259. package/src/cli/exit-code.test.ts +19 -0
  260. package/src/cli/exit-code.ts +7 -0
  261. package/src/cli/formatters/index.ts +5 -0
  262. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  263. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  264. package/src/cli/formatters/tree/tree.ts +238 -0
  265. package/src/cli/utils/apply-display.test.ts +348 -0
  266. package/src/cli/utils/apply-display.ts +238 -0
  267. package/src/cli/utils/export-display.test.ts +103 -0
  268. package/src/cli/utils/export-display.ts +275 -0
  269. package/src/cli/utils/integrations.test.ts +251 -0
  270. package/src/cli/utils/integrations.ts +170 -0
  271. package/src/cli/utils/resolve-input.test.ts +38 -0
  272. package/src/cli/utils/resolve-input.ts +17 -0
  273. package/src/cli/utils.ts +231 -0
  274. package/src/core/catalog-export/index.ts +20 -0
  275. package/src/core/catalog.diff.ts +247 -0
  276. package/src/core/catalog.model.test.ts +122 -0
  277. package/src/core/catalog.model.ts +510 -0
  278. package/src/core/catalog.snapshot.test.ts +486 -0
  279. package/src/core/catalog.snapshot.ts +289 -0
  280. package/src/core/change-utils.test.ts +61 -0
  281. package/src/core/change-utils.ts +73 -0
  282. package/src/core/change.types.ts +94 -0
  283. package/src/core/context.ts +26 -0
  284. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  285. package/src/core/declarative-apply/discover-sql.ts +107 -0
  286. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  287. package/src/core/declarative-apply/index.test.ts +67 -0
  288. package/src/core/declarative-apply/index.ts +205 -0
  289. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  290. package/src/core/declarative-apply/round-apply.ts +562 -0
  291. package/src/core/depend.ts +1895 -0
  292. package/src/core/expand-replace-dependencies.test.ts +70 -0
  293. package/src/core/expand-replace-dependencies.ts +380 -0
  294. package/src/core/export/file-mapper.test.ts +816 -0
  295. package/src/core/export/file-mapper.ts +579 -0
  296. package/src/core/export/grouper.ts +108 -0
  297. package/src/core/export/index.ts +129 -0
  298. package/src/core/export/types.ts +104 -0
  299. package/src/core/fingerprint.ts +204 -0
  300. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  301. package/src/core/integrations/filter/dsl.test.ts +450 -0
  302. package/src/core/integrations/filter/dsl.ts +305 -0
  303. package/src/core/integrations/filter/filter.types.ts +3 -0
  304. package/src/core/integrations/filter/flatten.test.ts +282 -0
  305. package/src/core/integrations/filter/flatten.ts +150 -0
  306. package/src/core/integrations/integration-dsl.ts +50 -0
  307. package/src/core/integrations/integration.types.ts +7 -0
  308. package/src/core/integrations/merge.test.ts +128 -0
  309. package/src/core/integrations/merge.ts +72 -0
  310. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  311. package/src/core/integrations/serialize/dsl.ts +80 -0
  312. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  313. package/src/core/integrations/supabase.ts +145 -0
  314. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  315. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  316. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  317. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  318. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  319. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  320. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  321. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  322. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  323. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  324. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  325. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  326. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  327. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  328. package/src/core/objects/aggregate/changes/aggregate.types.ts +13 -0
  329. package/src/core/objects/base.change.ts +72 -0
  330. package/src/core/objects/base.default-privileges.ts +204 -0
  331. package/src/core/objects/base.diff.ts +20 -0
  332. package/src/core/objects/base.model.test.ts +43 -0
  333. package/src/core/objects/base.model.ts +85 -0
  334. package/src/core/objects/base.privilege-diff.ts +447 -0
  335. package/src/core/objects/base.privilege.ts +191 -0
  336. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  337. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  338. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  339. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  340. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  341. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  342. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  343. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  344. package/src/core/objects/collation/changes/collation.types.ts +11 -0
  345. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  346. package/src/core/objects/collation/collation.diff.ts +127 -0
  347. package/src/core/objects/collation/collation.model.ts +224 -0
  348. package/src/core/objects/diff-context.ts +16 -0
  349. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  350. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  351. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  352. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  353. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  354. package/src/core/objects/domain/changes/domain.create.ts +140 -0
  355. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  356. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  357. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  358. package/src/core/objects/domain/changes/domain.types.ts +13 -0
  359. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  360. package/src/core/objects/domain/domain.diff.ts +295 -0
  361. package/src/core/objects/domain/domain.model.ts +190 -0
  362. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  363. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  364. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  365. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  366. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  367. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  368. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  369. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  370. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +11 -0
  371. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  372. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  373. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  374. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  375. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  376. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  377. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  378. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  379. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  380. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  381. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  382. package/src/core/objects/extension/changes/extension.types.ts +11 -0
  383. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  384. package/src/core/objects/extension/extension.diff.ts +90 -0
  385. package/src/core/objects/extension/extension.model.test.ts +98 -0
  386. package/src/core/objects/extension/extension.model.ts +280 -0
  387. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  388. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  389. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  390. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  391. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  392. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  393. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  394. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  395. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  396. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +13 -0
  397. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  398. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  399. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  400. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +11 -0
  401. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  402. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  403. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  404. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  405. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  406. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  407. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  408. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  409. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  410. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +13 -0
  411. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  412. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  413. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  414. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  415. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  416. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  417. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  418. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  419. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  420. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  421. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  422. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  423. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +13 -0
  424. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  425. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  426. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  427. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  428. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  429. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  430. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  431. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  432. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  433. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  434. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +9 -0
  435. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  436. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  437. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  438. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  439. package/src/core/objects/index/changes/index.alter.ts +144 -0
  440. package/src/core/objects/index/changes/index.base.ts +20 -0
  441. package/src/core/objects/index/changes/index.comment.ts +63 -0
  442. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  443. package/src/core/objects/index/changes/index.create.ts +68 -0
  444. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  445. package/src/core/objects/index/changes/index.drop.ts +34 -0
  446. package/src/core/objects/index/changes/index.types.ts +7 -0
  447. package/src/core/objects/index/changes/utils.ts +16 -0
  448. package/src/core/objects/index/index.diff.test.ts +153 -0
  449. package/src/core/objects/index/index.diff.ts +243 -0
  450. package/src/core/objects/index/index.model.ts +370 -0
  451. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  452. package/src/core/objects/language/changes/language.alter.ts +53 -0
  453. package/src/core/objects/language/changes/language.base.ts +20 -0
  454. package/src/core/objects/language/changes/language.comment.ts +58 -0
  455. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  456. package/src/core/objects/language/changes/language.create.ts +104 -0
  457. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  458. package/src/core/objects/language/changes/language.drop.ts +39 -0
  459. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  460. package/src/core/objects/language/changes/language.types.ts +13 -0
  461. package/src/core/objects/language/language.diff.test.ts +135 -0
  462. package/src/core/objects/language/language.diff.ts +144 -0
  463. package/src/core/objects/language/language.model.ts +150 -0
  464. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  465. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  466. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  467. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  468. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  469. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  470. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  471. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  472. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  473. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +13 -0
  474. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  475. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  476. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  477. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  478. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  479. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  480. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  481. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  482. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  483. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  484. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  485. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  486. package/src/core/objects/procedure/changes/procedure.types.ts +13 -0
  487. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  488. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  489. package/src/core/objects/procedure/procedure.model.ts +264 -0
  490. package/src/core/objects/procedure/utils.ts +58 -0
  491. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  492. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  493. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  494. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  495. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  496. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  497. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  498. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  499. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  500. package/src/core/objects/publication/changes/publication.types.ts +25 -0
  501. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  502. package/src/core/objects/publication/publication.diff.ts +247 -0
  503. package/src/core/objects/publication/publication.model.ts +206 -0
  504. package/src/core/objects/publication/utils.ts +55 -0
  505. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  506. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  507. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  508. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  509. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  510. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  511. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  512. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  513. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +11 -0
  514. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  515. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  516. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  517. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  518. package/src/core/objects/role/changes/role.alter.ts +110 -0
  519. package/src/core/objects/role/changes/role.base.ts +24 -0
  520. package/src/core/objects/role/changes/role.comment.ts +55 -0
  521. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  522. package/src/core/objects/role/changes/role.create.ts +102 -0
  523. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  524. package/src/core/objects/role/changes/role.drop.ts +34 -0
  525. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  526. package/src/core/objects/role/changes/role.types.ts +13 -0
  527. package/src/core/objects/role/role.diff.test.ts +279 -0
  528. package/src/core/objects/role/role.diff.ts +499 -0
  529. package/src/core/objects/role/role.model.ts +452 -0
  530. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  531. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  532. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  533. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  534. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  535. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  536. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  537. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  538. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  539. package/src/core/objects/rule/changes/rule.types.ts +13 -0
  540. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  541. package/src/core/objects/rule/rule.diff.ts +79 -0
  542. package/src/core/objects/rule/rule.model.ts +173 -0
  543. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  544. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  545. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  546. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  547. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  548. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  549. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  550. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  551. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  552. package/src/core/objects/schema/changes/schema.types.ts +13 -0
  553. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  554. package/src/core/objects/schema/schema.diff.ts +146 -0
  555. package/src/core/objects/schema/schema.model.ts +107 -0
  556. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  557. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  558. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  559. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  560. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  561. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  562. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  563. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  564. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  565. package/src/core/objects/sequence/changes/sequence.types.ts +13 -0
  566. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  567. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  568. package/src/core/objects/sequence/sequence.model.ts +185 -0
  569. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  570. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  571. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  572. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  573. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  574. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  575. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  576. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  577. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  578. package/src/core/objects/subscription/changes/subscription.types.ts +23 -0
  579. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  580. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  581. package/src/core/objects/subscription/subscription.model.ts +190 -0
  582. package/src/core/objects/subscription/utils.ts +156 -0
  583. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  584. package/src/core/objects/table/changes/table.alter.ts +806 -0
  585. package/src/core/objects/table/changes/table.base.ts +20 -0
  586. package/src/core/objects/table/changes/table.comment.ts +266 -0
  587. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  588. package/src/core/objects/table/changes/table.create.ts +192 -0
  589. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  590. package/src/core/objects/table/changes/table.drop.ts +45 -0
  591. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  592. package/src/core/objects/table/changes/table.types.ts +13 -0
  593. package/src/core/objects/table/table.diff.test.ts +868 -0
  594. package/src/core/objects/table/table.diff.ts +817 -0
  595. package/src/core/objects/table/table.model.ts +460 -0
  596. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  597. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  598. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  599. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  600. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  601. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  602. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  603. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  604. package/src/core/objects/trigger/changes/trigger.types.ts +11 -0
  605. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  606. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  607. package/src/core/objects/trigger/trigger.model.ts +264 -0
  608. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  609. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  610. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  611. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  612. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  613. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  614. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  615. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  616. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  617. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +13 -0
  618. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  619. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  620. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  621. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  622. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  623. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  624. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  625. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  626. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  627. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  628. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  629. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  630. package/src/core/objects/type/enum/changes/enum.types.ts +13 -0
  631. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  632. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  633. package/src/core/objects/type/enum/enum.model.ts +194 -0
  634. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  635. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  636. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  637. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  638. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  639. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  640. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  641. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  642. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  643. package/src/core/objects/type/range/changes/range.types.ts +13 -0
  644. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  645. package/src/core/objects/type/range/range.diff.ts +197 -0
  646. package/src/core/objects/type/range/range.model.ts +187 -0
  647. package/src/core/objects/type/type.types.ts +6 -0
  648. package/src/core/objects/utils.ts +171 -0
  649. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  650. package/src/core/objects/view/changes/view.alter.ts +112 -0
  651. package/src/core/objects/view/changes/view.base.ts +20 -0
  652. package/src/core/objects/view/changes/view.comment.ts +59 -0
  653. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  654. package/src/core/objects/view/changes/view.create.ts +73 -0
  655. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  656. package/src/core/objects/view/changes/view.drop.ts +40 -0
  657. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  658. package/src/core/objects/view/changes/view.types.ts +13 -0
  659. package/src/core/objects/view/view.diff.test.ts +269 -0
  660. package/src/core/objects/view/view.diff.ts +230 -0
  661. package/src/core/objects/view/view.model.ts +262 -0
  662. package/src/core/plan/apply.ts +172 -0
  663. package/src/core/plan/create.ts +384 -0
  664. package/src/core/plan/hierarchy.ts +574 -0
  665. package/src/core/plan/index.ts +29 -0
  666. package/src/core/plan/io.ts +20 -0
  667. package/src/core/plan/risk.ts +48 -0
  668. package/src/core/plan/serialize.test.ts +317 -0
  669. package/src/core/plan/serialize.ts +209 -0
  670. package/src/core/plan/sql-format/constants.ts +13 -0
  671. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  672. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  673. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  674. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  675. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  676. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  677. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  678. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  679. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  680. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  681. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  682. package/src/core/plan/sql-format/format-utils.ts +391 -0
  683. package/src/core/plan/sql-format/formatters.ts +921 -0
  684. package/src/core/plan/sql-format/index.ts +149 -0
  685. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  686. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  687. package/src/core/plan/sql-format/protect.test.ts +127 -0
  688. package/src/core/plan/sql-format/protect.ts +337 -0
  689. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  690. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  691. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  692. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  693. package/src/core/plan/sql-format/types.ts +31 -0
  694. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  695. package/src/core/plan/sql-format/wrap.ts +196 -0
  696. package/src/core/plan/sql-format.ts +2 -0
  697. package/src/core/plan/ssl-config.ts +172 -0
  698. package/src/core/plan/statements.ts +22 -0
  699. package/src/core/plan/types.ts +171 -0
  700. package/src/core/postgres-config.ts +293 -0
  701. package/src/core/sort/custom-constraints.ts +161 -0
  702. package/src/core/sort/debug-visualization.ts +239 -0
  703. package/src/core/sort/dependency-filter.ts +224 -0
  704. package/src/core/sort/graph-builder.ts +235 -0
  705. package/src/core/sort/graph-utils.ts +51 -0
  706. package/src/core/sort/logical-sort.test.ts +371 -0
  707. package/src/core/sort/logical-sort.ts +573 -0
  708. package/src/core/sort/sort-changes.ts +234 -0
  709. package/src/core/sort/topological-sort.test.ts +275 -0
  710. package/src/core/sort/topological-sort.ts +184 -0
  711. package/src/core/sort/types.ts +112 -0
  712. package/src/core/sort/utils.ts +69 -0
  713. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  714. package/src/index.ts +41 -0
  715. package/src/typedoc.ts +248 -0
  716. package/dist/core/integrations/filter/extractors.d.ts +0 -12
  717. package/dist/core/integrations/filter/extractors.js +0 -136
@@ -0,0 +1,187 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
2
+ import type { Pool } from "pg";
3
+ import z from "zod";
4
+ import { BasePgModel } from "../../base.model.ts";
5
+ import {
6
+ type PrivilegeProps,
7
+ privilegePropsSchema,
8
+ } from "../../base.privilege-diff.ts";
9
+
10
+ const rangePropsSchema = z.object({
11
+ schema: z.string(),
12
+ name: z.string(),
13
+ owner: z.string(),
14
+ comment: z.string().nullable(),
15
+
16
+ // Subtype information
17
+ subtype_schema: z.string(),
18
+ subtype_str: z.string(),
19
+
20
+ // Optional, only present when non-default relative to subtype
21
+ collation: z.string().nullable(),
22
+
23
+ // Canonical and diff functions when present (non-default)
24
+ canonical_function_schema: z.string().nullable(),
25
+ canonical_function_name: z.string().nullable(),
26
+ subtype_diff_schema: z.string().nullable(),
27
+ subtype_diff_name: z.string().nullable(),
28
+
29
+ // Optional: print only when non-default (see extractor logic)
30
+ subtype_opclass_schema: z.string().nullable(),
31
+ subtype_opclass_name: z.string().nullable(),
32
+ privileges: z.array(privilegePropsSchema),
33
+ });
34
+
35
+ type RangePrivilegeProps = PrivilegeProps;
36
+ export type RangeProps = z.infer<typeof rangePropsSchema>;
37
+
38
+ export class Range extends BasePgModel {
39
+ public readonly schema: RangeProps["schema"];
40
+ public readonly name: RangeProps["name"];
41
+ public readonly owner: RangeProps["owner"];
42
+ public readonly comment: RangeProps["comment"];
43
+
44
+ public readonly subtype_schema: RangeProps["subtype_schema"];
45
+ public readonly subtype_str: RangeProps["subtype_str"];
46
+
47
+ public readonly collation: RangeProps["collation"];
48
+
49
+ public readonly canonical_function_schema: RangeProps["canonical_function_schema"];
50
+ public readonly canonical_function_name: RangeProps["canonical_function_name"];
51
+ public readonly subtype_diff_schema: RangeProps["subtype_diff_schema"];
52
+ public readonly subtype_diff_name: RangeProps["subtype_diff_name"];
53
+
54
+ public readonly subtype_opclass_schema: RangeProps["subtype_opclass_schema"];
55
+ public readonly subtype_opclass_name: RangeProps["subtype_opclass_name"];
56
+ public readonly privileges: RangePrivilegeProps[];
57
+
58
+ constructor(props: RangeProps) {
59
+ super();
60
+
61
+ // Identity fields
62
+ this.schema = props.schema;
63
+ this.name = props.name;
64
+
65
+ // Data fields
66
+ this.owner = props.owner;
67
+ this.comment = props.comment;
68
+ this.subtype_schema = props.subtype_schema;
69
+ this.subtype_str = props.subtype_str;
70
+ this.collation = props.collation;
71
+ this.canonical_function_schema = props.canonical_function_schema;
72
+ this.canonical_function_name = props.canonical_function_name;
73
+ this.subtype_diff_schema = props.subtype_diff_schema;
74
+ this.subtype_diff_name = props.subtype_diff_name;
75
+ this.subtype_opclass_schema = props.subtype_opclass_schema;
76
+ this.subtype_opclass_name = props.subtype_opclass_name;
77
+ this.privileges = props.privileges;
78
+ }
79
+
80
+ get stableId(): `type:${string}` {
81
+ return `type:${this.schema}.${this.name}`;
82
+ }
83
+
84
+ get identityFields() {
85
+ return {
86
+ schema: this.schema,
87
+ name: this.name,
88
+ };
89
+ }
90
+
91
+ get dataFields() {
92
+ return {
93
+ owner: this.owner,
94
+ subtype_schema: this.subtype_schema,
95
+ subtype_str: this.subtype_str,
96
+ collation: this.collation,
97
+ canonical_function_schema: this.canonical_function_schema,
98
+ canonical_function_name: this.canonical_function_name,
99
+ subtype_diff_schema: this.subtype_diff_schema,
100
+ subtype_diff_name: this.subtype_diff_name,
101
+ subtype_opclass_schema: this.subtype_opclass_schema,
102
+ subtype_opclass_name: this.subtype_opclass_name,
103
+ comment: this.comment,
104
+ privileges: this.privileges,
105
+ };
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Extract all range types from the database.
111
+ *
112
+ * We intentionally capture only non-default options for CREATE TYPE AS RANGE:
113
+ * - SUBTYPE is required and always present
114
+ * - SUBTYPE_OPCLASS is included only when it differs from the default btree opclass
115
+ * - COLLATION is included only when it differs from the subtype's typcollation
116
+ * - CANONICAL and SUBTYPE_DIFF are included only when set
117
+ * - MULTIRANGE_TYPE_NAME is not included (we currently do not attempt to infer
118
+ * whether it differs from the default auto-generated name)
119
+ */
120
+ export async function extractRanges(pool: Pool): Promise<Range[]> {
121
+ const { rows } = await pool.query<RangeProps>(sql`
122
+ with extension_oids as (
123
+ select objid from pg_depend d
124
+ where d.refclassid = 'pg_extension'::regclass and d.classid = 'pg_type'::regclass
125
+ ), default_btree_opclass as (
126
+ -- For each input type, find its default btree operator class
127
+ select oc2.opcintype as type_oid, oc2.oid as opclass_oid
128
+ from pg_opclass oc2
129
+ join pg_am am on am.oid = oc2.opcmethod and am.amname = 'btree'
130
+ where oc2.opcdefault
131
+ )
132
+ select
133
+ -- range type identity
134
+ t.typnamespace::regnamespace::text as schema,
135
+ quote_ident(t.typname) as name,
136
+ t.typowner::regrole::text as owner,
137
+ obj_description(t.oid, 'pg_type') as comment,
138
+
139
+ -- subtype info
140
+ subt.typnamespace::regnamespace::text as subtype_schema,
141
+ format_type(r.rngsubtype, 0) as subtype_str,
142
+
143
+ -- include collation only if not default
144
+ case when r.rngcollation is not null and r.rngcollation <> 0 and r.rngcollation <> subt.typcollation then quote_ident(c.collname) else null end as collation,
145
+
146
+ -- include canonical/subtype_diff when set
147
+ case when r.rngcanonical <> 0 then pn_subcanon.nspname::regnamespace::text else null end as canonical_function_schema,
148
+ case when r.rngcanonical <> 0 then quote_ident(p_subcanon.proname) else null end as canonical_function_name,
149
+ case when r.rngsubdiff <> 0 then pn_subdiff.nspname::regnamespace::text else null end as subtype_diff_schema,
150
+ case when r.rngsubdiff <> 0 then quote_ident(p_subdiff.proname) else null end as subtype_diff_name,
151
+
152
+ -- include opclass only when not default for btree
153
+ case when r.rngsubopc is not null and r.rngsubopc <> 0 and r.rngsubopc <> dbo.opclass_oid then opc.opcnamespace::regnamespace::text else null end as subtype_opclass_schema,
154
+ case when r.rngsubopc is not null and r.rngsubopc <> 0 and r.rngsubopc <> dbo.opclass_oid then quote_ident(opc.opcname) else null end as subtype_opclass_name,
155
+
156
+ -- privileges
157
+ coalesce(
158
+ (
159
+ select json_agg(
160
+ json_build_object(
161
+ 'grantee', case when x.grantee = 0 then 'PUBLIC' else x.grantee::regrole::text end,
162
+ 'privilege', x.privilege_type,
163
+ 'grantable', x.is_grantable
164
+ )
165
+ order by x.grantee, x.privilege_type
166
+ )
167
+ from lateral aclexplode(COALESCE(t.typacl, acldefault('T', t.typowner))) as x(grantor, grantee, privilege_type, is_grantable)
168
+ ), '[]'
169
+ ) as privileges
170
+ from pg_catalog.pg_range r
171
+ join pg_catalog.pg_type t on t.oid = r.rngtypid
172
+ join pg_catalog.pg_type subt on subt.oid = r.rngsubtype
173
+ left join default_btree_opclass dbo on dbo.type_oid = r.rngsubtype
174
+ left join pg_catalog.pg_opclass opc on opc.oid = r.rngsubopc
175
+ left join pg_catalog.pg_collation c on c.oid = r.rngcollation
176
+ left join pg_catalog.pg_proc p_subcanon on p_subcanon.oid = r.rngcanonical
177
+ left join pg_catalog.pg_namespace pn_subcanon on pn_subcanon.oid = p_subcanon.pronamespace
178
+ left join pg_catalog.pg_proc p_subdiff on p_subdiff.oid = r.rngsubdiff
179
+ left join pg_catalog.pg_namespace pn_subdiff on pn_subdiff.oid = p_subdiff.pronamespace
180
+ left outer join extension_oids e on t.oid = e.objid
181
+ where not t.typnamespace::regnamespace::text like any(array['pg\_%', 'information\_schema'])
182
+ and e.objid is null
183
+ order by 1, 2
184
+ `);
185
+ const validated = rows.map((row: unknown) => rangePropsSchema.parse(row));
186
+ return validated.map((row: RangeProps) => new Range(row));
187
+ }
@@ -0,0 +1,6 @@
1
+ import type { CompositeTypeChange } from "./composite-type/changes/composite-type.types.ts";
2
+ import type { EnumChange } from "./enum/changes/enum.types.ts";
3
+ import type { RangeChange } from "./range/changes/range.types.ts";
4
+
5
+ /** Union of all type-related change variants (`objectType: "composite_type" | "enum" | "range"`). @category Change Types */
6
+ export type TypeChange = CompositeTypeChange | EnumChange | RangeChange;
@@ -0,0 +1,171 @@
1
+ type Comparator<T> = (a: T, b: T) => boolean;
2
+
3
+ type Indexable<T> = { [P in keyof T]: unknown };
4
+
5
+ /**
6
+ * JSON.stringify replacement that safely serializes BigInt values by converting
7
+ * them to strings. This ensures stable serialization for deep equality checks
8
+ * without throwing on BigInt instances.
9
+ */
10
+ export function stringifyWithBigInt(value: unknown, space: number = 2): string {
11
+ return JSON.stringify(
12
+ value,
13
+ (_key, v) => (typeof v === "bigint" ? v.toString() : v),
14
+ space,
15
+ );
16
+ }
17
+
18
+ export function hasNonAlterableChanges<T, K extends keyof T>(
19
+ main: T,
20
+ branch: T,
21
+ keys: ReadonlyArray<K>,
22
+ comparators?: Partial<Record<K, Comparator<unknown>>>,
23
+ ): boolean {
24
+ const mainIndexable = main as unknown as Indexable<T>;
25
+ const branchIndexable = branch as unknown as Indexable<T>;
26
+ for (const key of keys) {
27
+ // Prefer custom comparator when provided; fallback to strict equality
28
+ const equals =
29
+ (comparators?.[key] as Comparator<unknown>) ??
30
+ ((a: unknown, b: unknown) => a === b);
31
+ if (!equals(mainIndexable[key], branchIndexable[key])) return true;
32
+ }
33
+ return false;
34
+ }
35
+
36
+ export const deepEqual: Comparator<unknown> = (a: unknown, b: unknown) =>
37
+ stringifyWithBigInt(a) === stringifyWithBigInt(b);
38
+
39
+ // Helpers for stableId that aren't encoded in a class, mostly for sub-entities or meta entities.
40
+ export const stableId = {
41
+ schema(schema: string) {
42
+ return `schema:${schema}` as const;
43
+ },
44
+ table(schema: string, table: string) {
45
+ return `table:${schema}.${table}` as const;
46
+ },
47
+ view(schema: string, view: string) {
48
+ return `view:${schema}.${view}` as const;
49
+ },
50
+ materializedView(schema: string, view: string) {
51
+ return `materializedView:${schema}.${view}` as const;
52
+ },
53
+ acl(objectStableId: string, grantee: string) {
54
+ return `acl:${objectStableId}::grantee:${grantee}` as const;
55
+ },
56
+ /**
57
+ *
58
+ * 'defacl:' || grantor || ':' || objtype || ':' || coalesce('schema:' || in_schema, 'global') || ':grantee:' || grantee as dependent_stable_id,
59
+ */
60
+ defacl(
61
+ grantor: string,
62
+ objtype: string,
63
+ schema: string | null,
64
+ grantee: string,
65
+ ) {
66
+ return `defacl:${grantor}:${objtype}:${schema ? `schema:${schema}` : "global"}:grantee:${grantee}` as const;
67
+ },
68
+ column(schema: string, table: string, column: string) {
69
+ return `column:${schema}.${table}.${column}` as const;
70
+ },
71
+ constraint(schema: string, table: string, constraint: string) {
72
+ return `constraint:${schema}.${table}.${constraint}` as const;
73
+ },
74
+ comment(objectStableId: string) {
75
+ return `comment:${objectStableId}` as const;
76
+ },
77
+ role(role: string) {
78
+ return `role:${role}` as const;
79
+ },
80
+ type(schema: string, name: string) {
81
+ return `type:${schema}.${name}` as const;
82
+ },
83
+ collation(schema: string, name: string) {
84
+ return `collation:${schema}.${name}` as const;
85
+ },
86
+ procedure(schema: string, name: string, args: string = "") {
87
+ return `procedure:${schema}.${name}(${args})` as const;
88
+ },
89
+ membership(role: string, member: string) {
90
+ return `membership:${role}->${member}` as const;
91
+ },
92
+ foreignDataWrapper(name: string) {
93
+ return `foreignDataWrapper:${name}` as const;
94
+ },
95
+ server(name: string) {
96
+ return `server:${name}` as const;
97
+ },
98
+ userMapping(server: string, user: string) {
99
+ return `userMapping:${server}:${user}` as const;
100
+ },
101
+ foreignTable(schema: string, name: string) {
102
+ return `foreignTable:${schema}.${name}` as const;
103
+ },
104
+ };
105
+
106
+ /**
107
+ * Check if a schema name represents a user-defined type (not pg_catalog or information_schema).
108
+ * Used to filter out system types when building dependency lists.
109
+ */
110
+ export function isUserDefinedTypeSchema(
111
+ schema: string | null | undefined,
112
+ ): boolean {
113
+ return (
114
+ schema != null && schema !== "pg_catalog" && schema !== "information_schema"
115
+ );
116
+ }
117
+
118
+ /**
119
+ * Parse a procedure reference string (from regprocedure::text) to extract schema and function name.
120
+ * Format: "schema.function_name(argtypes)" or "function_name(argtypes)"
121
+ * Returns null if parsing fails or if it's a system procedure.
122
+ */
123
+ export function parseProcedureReference(
124
+ procRef: string | null | undefined,
125
+ ): { schema: string; name: string } | null {
126
+ if (!procRef) return null;
127
+
128
+ // Format is "schema.function_name(argtypes)" or "function_name(argtypes)"
129
+ // Extract everything before the opening parenthesis
130
+ const match = procRef.match(/^([^(]+)\(/);
131
+ if (!match) return null;
132
+
133
+ const qualifiedName = match[1];
134
+ const parts = qualifiedName.split(".");
135
+ if (parts.length === 1) {
136
+ // No schema prefix - assume current schema (we can't determine it here)
137
+ // For now, skip these as we need schema info
138
+ return null;
139
+ }
140
+ if (parts.length === 2) {
141
+ const [schema, name] = parts;
142
+ if (isUserDefinedTypeSchema(schema)) {
143
+ return { schema, name };
144
+ }
145
+ }
146
+ return null;
147
+ }
148
+
149
+ /**
150
+ * Parse a type string (from format_type) to extract schema and type name if it's schema-qualified.
151
+ * Format: "type_name" or "schema.type_name" or "schema.type_name[]"
152
+ * Returns null if it's not schema-qualified or if it's a system type.
153
+ */
154
+ export function parseTypeString(
155
+ typeStr: string | null | undefined,
156
+ ): { schema: string; name: string } | null {
157
+ if (!typeStr) return null;
158
+
159
+ // Remove array brackets for parsing
160
+ const baseType = typeStr.replace(/\[\]+$/, "");
161
+
162
+ // Check if it's schema-qualified (contains a dot)
163
+ const parts = baseType.split(".");
164
+ if (parts.length === 2) {
165
+ const [schema, name] = parts;
166
+ if (isUserDefinedTypeSchema(schema)) {
167
+ return { schema, name };
168
+ }
169
+ }
170
+ return null;
171
+ }
@@ -0,0 +1,115 @@
1
+ import { describe, expect, test } from "bun:test";
2
+ import { assertValidSql } from "../../../test-utils/assert-valid-sql.ts";
3
+ import { View, type ViewProps } from "../view.model.ts";
4
+ import {
5
+ AlterViewChangeOwner,
6
+ AlterViewResetOptions,
7
+ AlterViewSetOptions,
8
+ } from "./view.alter.ts";
9
+
10
+ describe.concurrent("view", () => {
11
+ describe("alter", () => {
12
+ test("change owner", async () => {
13
+ const props: Omit<ViewProps, "owner"> = {
14
+ schema: "public",
15
+ name: "test_view",
16
+ definition: "SELECT * FROM test_table",
17
+ row_security: false,
18
+ force_row_security: false,
19
+ has_indexes: false,
20
+ has_rules: false,
21
+ has_triggers: false,
22
+ has_subclasses: false,
23
+ is_populated: false,
24
+ replica_identity: "d",
25
+ is_partition: false,
26
+ options: null,
27
+ partition_bound: null,
28
+ comment: null,
29
+ columns: [],
30
+ privileges: [],
31
+ };
32
+ const main = new View({
33
+ ...props,
34
+ owner: "old_owner",
35
+ });
36
+ // branch no longer needed for constructor; we only pass explicit owner
37
+
38
+ const change = new AlterViewChangeOwner({
39
+ view: main,
40
+ owner: "new_owner",
41
+ });
42
+
43
+ await assertValidSql(change.serialize());
44
+
45
+ expect(change.serialize()).toBe(
46
+ "ALTER VIEW public.test_view OWNER TO new_owner",
47
+ );
48
+ });
49
+ });
50
+
51
+ test("set options", async () => {
52
+ const props: Omit<ViewProps, "options"> = {
53
+ schema: "public",
54
+ name: "test_view",
55
+ definition: "SELECT * FROM test_table",
56
+ row_security: false,
57
+ force_row_security: false,
58
+ has_indexes: false,
59
+ has_rules: false,
60
+ has_triggers: false,
61
+ has_subclasses: false,
62
+ is_populated: false,
63
+ replica_identity: "d",
64
+ is_partition: false,
65
+ partition_bound: null,
66
+ owner: "test",
67
+ comment: null,
68
+ columns: [],
69
+ privileges: [],
70
+ };
71
+ const main = new View({ ...props, options: ["security_barrier=true"] });
72
+ // branch no longer needed; we pass explicit options list
73
+
74
+ const change = new AlterViewSetOptions({
75
+ view: main,
76
+ options: ["security_barrier=false"],
77
+ });
78
+ await assertValidSql(change.serialize());
79
+ expect(change.serialize()).toBe(
80
+ "ALTER VIEW public.test_view SET (security_barrier=false)",
81
+ );
82
+ });
83
+
84
+ test("reset options", async () => {
85
+ const view = new View({
86
+ schema: "public",
87
+ name: "test_view",
88
+ definition: "SELECT * FROM test_table",
89
+ row_security: false,
90
+ force_row_security: false,
91
+ has_indexes: false,
92
+ has_rules: false,
93
+ has_triggers: false,
94
+ has_subclasses: false,
95
+ is_populated: false,
96
+ replica_identity: "d",
97
+ is_partition: false,
98
+ options: ["security_barrier=true", "check_option=local"],
99
+ partition_bound: null,
100
+ owner: "test",
101
+ comment: null,
102
+ columns: [],
103
+ privileges: [],
104
+ });
105
+
106
+ const change = new AlterViewResetOptions({
107
+ view,
108
+ params: ["check_option"],
109
+ });
110
+ await assertValidSql(change.serialize());
111
+ expect(change.serialize()).toBe(
112
+ "ALTER VIEW public.test_view RESET (check_option)",
113
+ );
114
+ });
115
+ });
@@ -0,0 +1,112 @@
1
+ import type { View } from "../view.model.ts";
2
+ import { AlterViewChange } from "./view.base.ts";
3
+
4
+ /**
5
+ * Alter a view.
6
+ *
7
+ * @see https://www.postgresql.org/docs/17/sql-alterview.html
8
+ *
9
+ * Synopsis
10
+ * ```sql
11
+ * ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression
12
+ * ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT
13
+ * ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
14
+ * ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name
15
+ * ALTER VIEW [ IF EXISTS ] name RENAME TO new_name
16
+ * ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema
17
+ * ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] )
18
+ * ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
19
+ * ```
20
+ */
21
+
22
+ export type AlterView =
23
+ | AlterViewChangeOwner
24
+ | AlterViewResetOptions
25
+ | AlterViewSetOptions;
26
+
27
+ /**
28
+ * ALTER VIEW ... OWNER TO ...
29
+ */
30
+ export class AlterViewChangeOwner extends AlterViewChange {
31
+ public readonly view: View;
32
+ public readonly owner: string;
33
+ public readonly scope = "object" as const;
34
+
35
+ constructor(props: { view: View; owner: string }) {
36
+ super();
37
+ this.view = props.view;
38
+ this.owner = props.owner;
39
+ }
40
+
41
+ get requires() {
42
+ return [this.view.stableId];
43
+ }
44
+
45
+ serialize(): string {
46
+ return [
47
+ "ALTER VIEW",
48
+ `${this.view.schema}.${this.view.name}`,
49
+ "OWNER TO",
50
+ this.owner,
51
+ ].join(" ");
52
+ }
53
+ }
54
+
55
+ // NOTE: ReplaceView removed. Non-alterable changes are emitted as CREATE OR REPLACE in view.diff.ts.
56
+
57
+ /**
58
+ * ALTER VIEW ... SET ( ... )
59
+ */
60
+ export class AlterViewSetOptions extends AlterViewChange {
61
+ public readonly view: View;
62
+ public readonly options: string[];
63
+ public readonly scope = "object" as const;
64
+
65
+ constructor(props: { view: View; options: string[] }) {
66
+ super();
67
+ this.view = props.view;
68
+ this.options = props.options;
69
+ }
70
+
71
+ get requires() {
72
+ return [this.view.stableId];
73
+ }
74
+
75
+ serialize(): string {
76
+ const opts = this.options.join(", ");
77
+ return [
78
+ "ALTER VIEW",
79
+ `${this.view.schema}.${this.view.name}`,
80
+ "SET",
81
+ `(${opts})`,
82
+ ].join(" ");
83
+ }
84
+ }
85
+
86
+ /**
87
+ * ALTER VIEW ... RESET ( ... )
88
+ */
89
+ export class AlterViewResetOptions extends AlterViewChange {
90
+ public readonly view: View;
91
+ public readonly params: string[];
92
+ public readonly scope = "object" as const;
93
+
94
+ constructor(props: { view: View; params: string[] }) {
95
+ super();
96
+ this.view = props.view;
97
+ this.params = props.params;
98
+ }
99
+
100
+ get requires() {
101
+ return [this.view.stableId];
102
+ }
103
+
104
+ serialize(): string {
105
+ return [
106
+ "ALTER VIEW",
107
+ `${this.view.schema}.${this.view.name}`,
108
+ "RESET",
109
+ `(${this.params.join(", ")})`,
110
+ ].join(" ");
111
+ }
112
+ }
@@ -0,0 +1,20 @@
1
+ import { BaseChange } from "../../base.change.ts";
2
+ import type { View } from "../view.model.ts";
3
+
4
+ abstract class BaseViewChange extends BaseChange {
5
+ abstract readonly view: View;
6
+ abstract readonly scope: "object" | "comment" | "privilege";
7
+ readonly objectType: "view" = "view";
8
+ }
9
+
10
+ export abstract class CreateViewChange extends BaseViewChange {
11
+ readonly operation = "create" as const;
12
+ }
13
+
14
+ export abstract class AlterViewChange extends BaseViewChange {
15
+ readonly operation = "alter" as const;
16
+ }
17
+
18
+ export abstract class DropViewChange extends BaseViewChange {
19
+ readonly operation = "drop" as const;
20
+ }
@@ -0,0 +1,59 @@
1
+ import { quoteLiteral } from "../../base.change.ts";
2
+ import { stableId } from "../../utils.ts";
3
+ import type { View } from "../view.model.ts";
4
+ import { CreateViewChange, DropViewChange } from "./view.base.ts";
5
+
6
+ export type CommentView = CreateCommentOnView | DropCommentOnView;
7
+
8
+ export class CreateCommentOnView extends CreateViewChange {
9
+ public readonly view: View;
10
+ public readonly scope = "comment" as const;
11
+
12
+ constructor(props: { view: View }) {
13
+ super();
14
+ this.view = props.view;
15
+ }
16
+
17
+ get creates() {
18
+ return [stableId.comment(this.view.stableId)];
19
+ }
20
+
21
+ get requires() {
22
+ return [this.view.stableId];
23
+ }
24
+
25
+ serialize(): string {
26
+ return [
27
+ "COMMENT ON VIEW",
28
+ `${this.view.schema}.${this.view.name}`,
29
+ "IS",
30
+ quoteLiteral(this.view.comment as string),
31
+ ].join(" ");
32
+ }
33
+ }
34
+
35
+ export class DropCommentOnView extends DropViewChange {
36
+ public readonly view: View;
37
+ public readonly scope = "comment" as const;
38
+
39
+ constructor(props: { view: View }) {
40
+ super();
41
+ this.view = props.view;
42
+ }
43
+
44
+ get drops() {
45
+ return [stableId.comment(this.view.stableId)];
46
+ }
47
+
48
+ get requires() {
49
+ return [stableId.comment(this.view.stableId), this.view.stableId];
50
+ }
51
+
52
+ serialize(): string {
53
+ return [
54
+ "COMMENT ON VIEW",
55
+ `${this.view.schema}.${this.view.name}`,
56
+ "IS NULL",
57
+ ].join(" ");
58
+ }
59
+ }