@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
@@ -1,20 +1,21 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel, type TableLikeObject } from "../base.model.ts";
4
4
  import { type PrivilegeProps } from "../base.privilege-diff.ts";
5
5
  export declare const ReplicaIdentitySchema: z.ZodEnum<{
6
- f: "f";
7
6
  n: "n";
8
7
  i: "i";
9
8
  d: "d";
9
+ f: "f";
10
10
  }>;
11
11
  declare const tableConstraintPropsSchema: z.ZodObject<{
12
12
  name: z.ZodString;
13
13
  constraint_type: z.ZodEnum<{
14
- f: "f";
15
14
  u: "u";
16
- p: "p";
15
+ t: "t";
17
16
  c: "c";
17
+ p: "p";
18
+ f: "f";
18
19
  x: "x";
19
20
  }>;
20
21
  deferrable: z.ZodBoolean;
@@ -37,24 +38,24 @@ declare const tableConstraintPropsSchema: z.ZodObject<{
37
38
  foreign_key_effective_schema: z.ZodNullable<z.ZodString>;
38
39
  foreign_key_effective_table: z.ZodNullable<z.ZodString>;
39
40
  on_update: z.ZodNullable<z.ZodEnum<{
40
- r: "r";
41
41
  n: "n";
42
42
  a: "a";
43
+ r: "r";
43
44
  d: "d";
44
45
  c: "c";
45
46
  }>>;
46
47
  on_delete: z.ZodNullable<z.ZodEnum<{
47
- r: "r";
48
48
  n: "n";
49
49
  a: "a";
50
+ r: "r";
50
51
  d: "d";
51
52
  c: "c";
52
53
  }>>;
53
54
  match_type: z.ZodNullable<z.ZodEnum<{
54
- f: "f";
55
55
  u: "u";
56
56
  s: "s";
57
57
  p: "p";
58
+ f: "f";
58
59
  }>>;
59
60
  check_expression: z.ZodNullable<z.ZodString>;
60
61
  owner: z.ZodString;
@@ -78,10 +79,10 @@ declare const tablePropsSchema: z.ZodObject<{
78
79
  has_subclasses: z.ZodBoolean;
79
80
  is_populated: z.ZodBoolean;
80
81
  replica_identity: z.ZodEnum<{
81
- f: "f";
82
82
  n: "n";
83
83
  i: "i";
84
84
  d: "d";
85
+ f: "f";
85
86
  }>;
86
87
  is_partition: z.ZodBoolean;
87
88
  options: z.ZodNullable<z.ZodArray<z.ZodString>>;
@@ -112,10 +113,11 @@ declare const tablePropsSchema: z.ZodObject<{
112
113
  constraints: z.ZodOptional<z.ZodArray<z.ZodObject<{
113
114
  name: z.ZodString;
114
115
  constraint_type: z.ZodEnum<{
115
- f: "f";
116
116
  u: "u";
117
- p: "p";
117
+ t: "t";
118
118
  c: "c";
119
+ p: "p";
120
+ f: "f";
119
121
  x: "x";
120
122
  }>;
121
123
  deferrable: z.ZodBoolean;
@@ -138,24 +140,24 @@ declare const tablePropsSchema: z.ZodObject<{
138
140
  foreign_key_effective_schema: z.ZodNullable<z.ZodString>;
139
141
  foreign_key_effective_table: z.ZodNullable<z.ZodString>;
140
142
  on_update: z.ZodNullable<z.ZodEnum<{
141
- r: "r";
142
143
  n: "n";
143
144
  a: "a";
145
+ r: "r";
144
146
  d: "d";
145
147
  c: "c";
146
148
  }>>;
147
149
  on_delete: z.ZodNullable<z.ZodEnum<{
148
- r: "r";
149
150
  n: "n";
150
151
  a: "a";
152
+ r: "r";
151
153
  d: "d";
152
154
  c: "c";
153
155
  }>>;
154
156
  match_type: z.ZodNullable<z.ZodEnum<{
155
- f: "f";
156
157
  u: "u";
157
158
  s: "s";
158
159
  p: "p";
160
+ f: "f";
159
161
  }>>;
160
162
  check_expression: z.ZodNullable<z.ZodString>;
161
163
  owner: z.ZodString;
@@ -204,7 +206,7 @@ export declare class Table extends BasePgModel implements TableLikeObject {
204
206
  persistence: "u" | "t" | "p";
205
207
  row_security: boolean;
206
208
  force_row_security: boolean;
207
- replica_identity: "f" | "n" | "i" | "d";
209
+ replica_identity: "n" | "i" | "d" | "f";
208
210
  options: string[] | null;
209
211
  parent_schema: string | null;
210
212
  parent_name: string | null;
@@ -231,7 +233,7 @@ export declare class Table extends BasePgModel implements TableLikeObject {
231
233
  }[];
232
234
  constraints: {
233
235
  name: string;
234
- constraint_type: "f" | "u" | "p" | "c" | "x";
236
+ constraint_type: "u" | "t" | "c" | "p" | "f" | "x";
235
237
  deferrable: boolean;
236
238
  initially_deferred: boolean;
237
239
  validated: boolean;
@@ -251,9 +253,9 @@ export declare class Table extends BasePgModel implements TableLikeObject {
251
253
  foreign_key_parent_table: string | null;
252
254
  foreign_key_effective_schema: string | null;
253
255
  foreign_key_effective_table: string | null;
254
- on_update: "r" | "n" | "a" | "d" | "c" | null;
255
- on_delete: "r" | "n" | "a" | "d" | "c" | null;
256
- match_type: "f" | "u" | "s" | "p" | null;
256
+ on_update: "n" | "a" | "r" | "d" | "c" | null;
257
+ on_delete: "n" | "a" | "r" | "d" | "c" | null;
258
+ match_type: "u" | "s" | "p" | "f" | null;
257
259
  check_expression: string | null;
258
260
  owner: string;
259
261
  definition: string;
@@ -292,7 +294,7 @@ export declare class Table extends BasePgModel implements TableLikeObject {
292
294
  options: string[] | null;
293
295
  constraints: {
294
296
  name: string;
295
- constraint_type: "f" | "u" | "p" | "c" | "x";
297
+ constraint_type: "u" | "t" | "c" | "p" | "f" | "x";
296
298
  deferrable: boolean;
297
299
  initially_deferred: boolean;
298
300
  validated: boolean;
@@ -312,9 +314,9 @@ export declare class Table extends BasePgModel implements TableLikeObject {
312
314
  foreign_key_parent_table: string | null;
313
315
  foreign_key_effective_schema: string | null;
314
316
  foreign_key_effective_table: string | null;
315
- on_update: "r" | "n" | "a" | "d" | "c" | null;
316
- on_delete: "r" | "n" | "a" | "d" | "c" | null;
317
- match_type: "f" | "u" | "s" | "p" | null;
317
+ on_update: "n" | "a" | "r" | "d" | "c" | null;
318
+ on_delete: "n" | "a" | "r" | "d" | "c" | null;
319
+ match_type: "u" | "s" | "p" | "f" | null;
318
320
  check_expression: string | null;
319
321
  owner: string;
320
322
  definition: string;
@@ -324,11 +326,12 @@ export declare class Table extends BasePgModel implements TableLikeObject {
324
326
  grantee: string;
325
327
  privilege: string;
326
328
  grantable: boolean;
329
+ columns: string[] | null | undefined;
327
330
  }[];
328
331
  persistence: "u" | "t" | "p";
329
332
  row_security: boolean;
330
333
  force_row_security: boolean;
331
- replica_identity: "f" | "n" | "i" | "d";
334
+ replica_identity: "n" | "i" | "d" | "f";
332
335
  parent_schema: string | null;
333
336
  parent_name: string | null;
334
337
  partition_bound: string | null;
@@ -337,5 +340,5 @@ export declare class Table extends BasePgModel implements TableLikeObject {
337
340
  };
338
341
  };
339
342
  }
340
- export declare function extractTables(sql: Sql): Promise<Table[]>;
343
+ export declare function extractTables(pool: Pool): Promise<Table[]>;
341
344
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel, columnPropsSchema, normalizeColumns, } from "../base.model.js";
3
4
  import { normalizePrivileges } from "../base.privilege.js";
@@ -32,6 +33,7 @@ const tableConstraintPropsSchema = z.object({
32
33
  "c", // CHECK constraint
33
34
  "f", // FOREIGN KEY constraint
34
35
  "p", // PRIMARY KEY constraint
36
+ "t", // TRIGGER constraint
35
37
  "u", // UNIQUE constraint
36
38
  "x", // EXCLUDE constraint
37
39
  ]),
@@ -182,10 +184,8 @@ export class Table extends BasePgModel {
182
184
  };
183
185
  }
184
186
  }
185
- export async function extractTables(sql) {
186
- return sql.begin(async (sql) => {
187
- await sql `set search_path = ''`;
188
- const tableRows = await sql `
187
+ export async function extractTables(pool) {
188
+ const { rows: tableRows } = await pool.query(sql `
189
189
  with extension_oids as (
190
190
  select objid
191
191
  from pg_depend d
@@ -339,6 +339,8 @@ select
339
339
  and de.refclassid = 'pg_extension'::regclass
340
340
 
341
341
  where c.conrelid = t.oid
342
+ -- Skip constraint triggers and PG18 NOT NULL constraints; they are modeled elsewhere
343
+ and c.contype not in ('t', 'n')
342
344
  and not c.connamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
343
345
  and de.objid is null
344
346
  ),
@@ -395,7 +397,7 @@ select
395
397
  from (
396
398
  -- one row for object ACL + one row per column ACL
397
399
  select null::name as attname, t.oid as relacl_oid, (
398
- select c_rel.relacl from pg_class c_rel where c_rel.oid = t.oid
400
+ select COALESCE(c_rel.relacl, acldefault('r', c_rel.relowner)) from pg_class c_rel where c_rel.oid = t.oid
399
401
  ) as acl
400
402
  union all
401
403
  select a2.attname, t.oid as relacl_oid, a2.attacl
@@ -417,10 +419,9 @@ from
417
419
  group by
418
420
  t.oid, t.schema, t.name, t.persistence, t.row_security, t.force_row_security, t.has_indexes, t.has_rules, t.has_triggers, t.has_subclasses, t.is_populated, t.replica_identity, t.is_partition, t.options, t.partition_bound, t.partition_by, t.owner, t.parent_schema, t.parent_name
419
421
  order by
420
- t.schema, t.name;
421
- `;
422
- // Validate and parse each row using the Zod schema
423
- const validatedRows = tableRows.map((row) => tablePropsSchema.parse(row));
424
- return validatedRows.map((row) => new Table(row));
425
- });
422
+ t.schema, t.name
423
+ `);
424
+ // Validate and parse each row using the Zod schema
425
+ const validatedRows = tableRows.map((row) => tablePropsSchema.parse(row));
426
+ return validatedRows.map((row) => new Table(row));
426
427
  }
@@ -1,5 +1,7 @@
1
+ import { quoteLiteral } from "../../base.change.js";
1
2
  import { AlterTriggerChange } from "./trigger.base.js";
2
3
  import { CreateTrigger } from "./trigger.create.js";
4
+ import { DropTrigger } from "./trigger.drop.js";
3
5
  /**
4
6
  * Replace a trigger by dropping and recreating it.
5
7
  * This is used when properties that cannot be altered via ALTER TRIGGER change.
@@ -17,6 +19,27 @@ export class ReplaceTrigger extends AlterTriggerChange {
17
19
  return [this.trigger.stableId];
18
20
  }
19
21
  serialize() {
22
+ if (this.trigger.isConstraintTrigger) {
23
+ const dropChange = new DropTrigger({ trigger: this.trigger });
24
+ const createChange = new CreateTrigger({
25
+ trigger: this.trigger,
26
+ indexableObject: this.indexableObject,
27
+ orReplace: false,
28
+ });
29
+ const commentSql = this.trigger.comment !== null
30
+ ? [
31
+ "COMMENT ON TRIGGER",
32
+ this.trigger.name,
33
+ "ON",
34
+ `${this.trigger.schema}.${this.trigger.table_name}`,
35
+ "IS",
36
+ quoteLiteral(this.trigger.comment),
37
+ ].join(" ")
38
+ : null;
39
+ return [dropChange.serialize(), createChange.serialize(), commentSql]
40
+ .filter(Boolean)
41
+ .join(";\n");
42
+ }
20
43
  const createChange = new CreateTrigger({
21
44
  trigger: this.trigger,
22
45
  indexableObject: this.indexableObject,
@@ -45,17 +45,16 @@ export class CreateTrigger extends CreateTriggerChange {
45
45
  // Table dependency
46
46
  dependencies.add(stableId.table(this.trigger.schema, this.trigger.table_name));
47
47
  // Function dependency
48
- // Note: We can't build the exact procedure stableId without argument types.
49
- // The trigger definition contains the full function call, but parsing it would be complex.
50
- // For now, we rely on pg_depend extraction for procedure dependencies.
51
- // If needed, we could parse the trigger definition to extract the full function signature.
48
+ // Trigger functions always have signature () RETURNS trigger, so no arguments.
49
+ dependencies.add(stableId.procedure(this.trigger.function_schema, this.trigger.function_name));
52
50
  // Owner dependency
53
51
  dependencies.add(stableId.role(this.trigger.owner));
54
52
  return Array.from(dependencies);
55
53
  }
56
54
  serialize() {
57
55
  let definition = this.trigger.definition.trim();
58
- definition = definition.replace(/^CREATE\s+(?:OR\s+REPLACE\s+)?/i, `CREATE ${this.orReplace ? "OR REPLACE " : ""}`);
56
+ const isConstraintTrigger = this.trigger.isConstraintTrigger;
57
+ definition = definition.replace(/^CREATE\s+(?:OR\s+REPLACE\s+)?/i, `CREATE ${this.orReplace && !isConstraintTrigger ? "OR REPLACE " : ""}`);
59
58
  return definition;
60
59
  }
61
60
  }
@@ -2,4 +2,5 @@ import type { AlterTrigger } from "./trigger.alter.ts";
2
2
  import type { CommentTrigger } from "./trigger.comment.ts";
3
3
  import type { CreateTrigger } from "./trigger.create.ts";
4
4
  import type { DropTrigger } from "./trigger.drop.ts";
5
+ /** Union of all trigger-related change variants (`objectType: "trigger"`). @category Change Types */
5
6
  export type TriggerChange = AlterTrigger | CommentTrigger | CreateTrigger | DropTrigger;
@@ -1,10 +1,17 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel } from "../base.model.ts";
4
4
  declare const triggerPropsSchema: z.ZodObject<{
5
5
  schema: z.ZodString;
6
6
  name: z.ZodString;
7
7
  table_name: z.ZodString;
8
+ table_relkind: z.ZodEnum<{
9
+ r: "r";
10
+ v: "v";
11
+ m: "m";
12
+ p: "p";
13
+ f: "f";
14
+ }>;
8
15
  function_schema: z.ZodString;
9
16
  function_name: z.ZodString;
10
17
  trigger_type: z.ZodNumber;
@@ -37,6 +44,7 @@ export declare class Trigger extends BasePgModel {
37
44
  readonly schema: TriggerProps["schema"];
38
45
  readonly name: TriggerProps["name"];
39
46
  readonly table_name: TriggerProps["table_name"];
47
+ readonly table_relkind: TriggerProps["table_relkind"];
40
48
  readonly function_schema: TriggerProps["function_schema"];
41
49
  readonly function_name: TriggerProps["function_name"];
42
50
  readonly trigger_type: TriggerProps["trigger_type"];
@@ -59,6 +67,7 @@ export declare class Trigger extends BasePgModel {
59
67
  readonly definition: TriggerProps["definition"];
60
68
  readonly comment: TriggerProps["comment"];
61
69
  constructor(props: TriggerProps);
70
+ get isConstraintTrigger(): boolean;
62
71
  get stableId(): `trigger:${string}`;
63
72
  get identityFields(): {
64
73
  schema: string;
@@ -88,5 +97,5 @@ export declare class Trigger extends BasePgModel {
88
97
  comment: string | null;
89
98
  };
90
99
  }
91
- export declare function extractTriggers(sql: Sql): Promise<Trigger[]>;
100
+ export declare function extractTriggers(pool: Pool): Promise<Trigger[]>;
92
101
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel } from "../base.model.js";
3
4
  const TriggerEnabledSchema = z.enum([
@@ -6,10 +7,18 @@ const TriggerEnabledSchema = z.enum([
6
7
  "R", // REPLICA - trigger fires only in "replica" mode
7
8
  "A", // ALWAYS - trigger fires regardless of replication mode
8
9
  ]);
10
+ const TriggerTableRelkindSchema = z.enum([
11
+ "r", // ordinary table
12
+ "p", // partitioned table
13
+ "f", // foreign table
14
+ "v", // view
15
+ "m", // materialized view
16
+ ]);
9
17
  const triggerPropsSchema = z.object({
10
18
  schema: z.string(),
11
19
  name: z.string(),
12
20
  table_name: z.string(),
21
+ table_relkind: TriggerTableRelkindSchema,
13
22
  function_schema: z.string(),
14
23
  function_name: z.string(),
15
24
  trigger_type: z.number(),
@@ -36,6 +45,7 @@ export class Trigger extends BasePgModel {
36
45
  schema;
37
46
  name;
38
47
  table_name;
48
+ table_relkind;
39
49
  function_schema;
40
50
  function_name;
41
51
  trigger_type;
@@ -63,6 +73,7 @@ export class Trigger extends BasePgModel {
63
73
  this.schema = props.schema;
64
74
  this.name = props.name;
65
75
  this.table_name = props.table_name;
76
+ this.table_relkind = props.table_relkind;
66
77
  // Data fields
67
78
  this.function_schema = props.function_schema;
68
79
  this.function_name = props.function_name;
@@ -86,6 +97,9 @@ export class Trigger extends BasePgModel {
86
97
  this.definition = props.definition;
87
98
  this.comment = props.comment;
88
99
  }
100
+ get isConstraintTrigger() {
101
+ return /^CREATE\s+CONSTRAINT\s+TRIGGER/i.test(this.definition.trim());
102
+ }
89
103
  get stableId() {
90
104
  return `trigger:${this.schema}.${this.table_name}.${this.name}`;
91
105
  }
@@ -121,10 +135,8 @@ export class Trigger extends BasePgModel {
121
135
  };
122
136
  }
123
137
  }
124
- export async function extractTriggers(sql) {
125
- return sql.begin(async (sql) => {
126
- await sql `set search_path = ''`;
127
- const triggerRows = await sql `
138
+ export async function extractTriggers(pool) {
139
+ const { rows: triggerRows } = await pool.query(sql `
128
140
  with extension_trigger_oids as (
129
141
  select objid
130
142
  from pg_depend d
@@ -148,6 +160,7 @@ export async function extractTriggers(sql) {
148
160
  tc.relnamespace::regnamespace::text as schema,
149
161
  quote_ident(t.tgname) as name,
150
162
  quote_ident(tc.relname) as table_name,
163
+ tc.relkind as table_relkind,
151
164
 
152
165
  fc.pronamespace::regnamespace::text as function_schema,
153
166
  quote_ident(fc.proname) as function_name,
@@ -226,10 +239,9 @@ export async function extractTriggers(sql) {
226
239
  and e_function.objid is null
227
240
  and not t.tgisinternal
228
241
 
229
- order by 1, 2;
230
- `;
231
- // Validate and parse each row using the Zod schema
232
- const validatedRows = triggerRows.map((row) => triggerPropsSchema.parse(row));
233
- return validatedRows.map((row) => new Trigger(row));
234
- });
242
+ order by 1, 2
243
+ `);
244
+ // Validate and parse each row using the Zod schema
245
+ const validatedRows = triggerRows.map((row) => triggerPropsSchema.parse(row));
246
+ return validatedRows.map((row) => new Trigger(row));
235
247
  }
@@ -3,4 +3,5 @@ import type { CommentCompositeType } from "./composite-type.comment.ts";
3
3
  import type { CreateCompositeType } from "./composite-type.create.ts";
4
4
  import type { DropCompositeType } from "./composite-type.drop.ts";
5
5
  import type { CompositeTypePrivilege } from "./composite-type.privilege.ts";
6
+ /** Union of all composite-type-related change variants (`objectType: "composite_type"`). @category Change Types */
6
7
  export type CompositeTypeChange = AlterCompositeType | CommentCompositeType | CreateCompositeType | DropCompositeType | CompositeTypePrivilege;
@@ -1,5 +1,4 @@
1
- import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
2
- import type { Role } from "../../role/role.model.ts";
1
+ import type { ObjectDiffContext } from "../../diff-context.ts";
3
2
  import type { CompositeTypeChange } from "./changes/composite-type.types.ts";
4
3
  import type { CompositeType } from "./composite-type.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import type { CompositeType } from "./composite-type.model.ts";
10
9
  * @param branch - The composite types in the branch catalog.
11
10
  * @returns A list of changes to apply to main to make it match branch.
12
11
  */
13
- export declare function diffCompositeTypes(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, CompositeType>, branch: Record<string, CompositeType>): CompositeTypeChange[];
12
+ export declare function diffCompositeTypes(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, CompositeType>, branch: Record<string, CompositeType>): CompositeTypeChange[];
@@ -1,5 +1,5 @@
1
1
  import { diffObjects } from "../../base.diff.js";
2
- import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
2
+ import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../../base.privilege-diff.js";
3
3
  import { deepEqual, hasNonAlterableChanges } from "../../utils.js";
4
4
  import { AlterCompositeTypeAddAttribute, AlterCompositeTypeAlterAttributeType, AlterCompositeTypeChangeOwner, AlterCompositeTypeDropAttribute, } from "./changes/composite-type.alter.js";
5
5
  import { CreateCommentOnCompositeType, CreateCommentOnCompositeTypeAttribute, DropCommentOnCompositeType, DropCommentOnCompositeTypeAttribute, } from "./changes/composite-type.comment.js";
@@ -47,50 +47,21 @@ export function diffCompositeTypes(ctx, main, branch) {
47
47
  // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
48
48
  // needed to reach the final desired state.
49
49
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "composite_type", ct.schema ?? "");
50
+ const creatorFilteredDefaults = ct.owner !== ctx.currentUser
51
+ ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
52
+ : effectiveDefaults;
50
53
  // Filter out PUBLIC's built-in default USAGE privilege (PostgreSQL grants it automatically)
51
54
  // Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
52
55
  // This prevents generating unnecessary "GRANT USAGE TO PUBLIC" statements
53
56
  const desiredPrivileges = filterPublicBuiltInDefaults("composite_type", ct.privileges);
54
57
  // Filter out owner privileges - owner always has ALL privileges implicitly
55
58
  // and shouldn't be compared. Use the composite type owner as the reference.
56
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, ct.owner);
57
- // Generate grant changes
58
- for (const [grantee, result] of privilegeResults) {
59
- if (result.grants.length > 0) {
60
- const grantGroups = groupPrivilegesByGrantable(result.grants);
61
- for (const [grantable, list] of grantGroups) {
62
- void grantable;
63
- changes.push(new GrantCompositeTypePrivileges({
64
- compositeType: ct,
65
- grantee,
66
- privileges: list,
67
- version: ctx.version,
68
- }));
69
- }
70
- }
71
- // Generate revoke changes
72
- if (result.revokes.length > 0) {
73
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
74
- for (const [grantable, list] of revokeGroups) {
75
- void grantable;
76
- changes.push(new RevokeCompositeTypePrivileges({
77
- compositeType: ct,
78
- grantee,
79
- privileges: list,
80
- version: ctx.version,
81
- }));
82
- }
83
- }
84
- // Generate revoke grant option changes
85
- if (result.revokeGrantOption.length > 0) {
86
- changes.push(new RevokeGrantOptionCompositeTypePrivileges({
87
- compositeType: ct,
88
- grantee,
89
- privilegeNames: result.revokeGrantOption,
90
- version: ctx.version,
91
- }));
92
- }
93
- }
59
+ const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("composite_type", creatorFilteredDefaults), desiredPrivileges, ct.owner);
60
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, ct, ct, "compositeType", {
61
+ Grant: GrantCompositeTypePrivileges,
62
+ Revoke: RevokeCompositeTypePrivileges,
63
+ RevokeGrantOption: RevokeGrantOptionCompositeTypePrivileges,
64
+ }, ctx.version));
94
65
  }
95
66
  for (const compositeTypeId of dropped) {
96
67
  changes.push(new DropCompositeType({ compositeType: main[compositeTypeId] }));
@@ -203,44 +174,12 @@ export function diffCompositeTypes(ctx, main, branch) {
203
174
  const branchPrivilegesFiltered = filterPublicBuiltInDefaults("composite_type", branchCompositeType.privileges);
204
175
  // Filter out owner privileges - owner always has ALL privileges implicitly
205
176
  // and shouldn't be compared. Use branch owner as the reference.
206
- const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchCompositeType.owner, ctx.mainRoles);
207
- for (const [grantee, result] of privilegeResults) {
208
- // Generate grant changes
209
- if (result.grants.length > 0) {
210
- const grantGroups = groupPrivilegesByGrantable(result.grants);
211
- for (const [grantable, list] of grantGroups) {
212
- void grantable;
213
- changes.push(new GrantCompositeTypePrivileges({
214
- compositeType: branchCompositeType,
215
- grantee,
216
- privileges: list,
217
- version: ctx.version,
218
- }));
219
- }
220
- }
221
- // Generate revoke changes
222
- if (result.revokes.length > 0) {
223
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
224
- for (const [grantable, list] of revokeGroups) {
225
- void grantable;
226
- changes.push(new RevokeCompositeTypePrivileges({
227
- compositeType: mainCompositeType,
228
- grantee,
229
- privileges: list,
230
- version: ctx.version,
231
- }));
232
- }
233
- }
234
- // Generate revoke grant option changes
235
- if (result.revokeGrantOption.length > 0) {
236
- changes.push(new RevokeGrantOptionCompositeTypePrivileges({
237
- compositeType: mainCompositeType,
238
- grantee,
239
- privilegeNames: result.revokeGrantOption,
240
- version: ctx.version,
241
- }));
242
- }
243
- }
177
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchCompositeType.owner);
178
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchCompositeType, mainCompositeType, "compositeType", {
179
+ Grant: GrantCompositeTypePrivileges,
180
+ Revoke: RevokeCompositeTypePrivileges,
181
+ RevokeGrantOption: RevokeGrantOptionCompositeTypePrivileges,
182
+ }, ctx.version));
244
183
  // Note: Composite type renaming would also use ALTER TYPE ... RENAME TO ...
245
184
  // But since our CompositeType model uses 'name' as the identity field,
246
185
  // a name change would be handled as drop + create by diffObjects()
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel, type TableLikeObject } from "../../base.model.ts";
4
4
  import { type PrivilegeProps } from "../../base.privilege-diff.ts";
@@ -13,10 +13,10 @@ declare const compositeTypePropsSchema: z.ZodObject<{
13
13
  has_subclasses: z.ZodBoolean;
14
14
  is_populated: z.ZodBoolean;
15
15
  replica_identity: z.ZodEnum<{
16
- f: "f";
17
16
  n: "n";
18
17
  i: "i";
19
18
  d: "d";
19
+ f: "f";
20
20
  }>;
21
21
  is_partition: z.ZodBoolean;
22
22
  options: z.ZodNullable<z.ZodArray<z.ZodString>>;
@@ -82,7 +82,7 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
82
82
  has_triggers: boolean;
83
83
  has_subclasses: boolean;
84
84
  is_populated: boolean;
85
- replica_identity: "f" | "n" | "i" | "d";
85
+ replica_identity: "n" | "i" | "d" | "f";
86
86
  is_partition: boolean;
87
87
  options: string[] | null;
88
88
  partition_bound: string | null;
@@ -129,7 +129,7 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
129
129
  has_triggers: boolean;
130
130
  has_subclasses: boolean;
131
131
  is_populated: boolean;
132
- replica_identity: "f" | "n" | "i" | "d";
132
+ replica_identity: "n" | "i" | "d" | "f";
133
133
  is_partition: boolean;
134
134
  options: string[] | null;
135
135
  partition_bound: string | null;
@@ -144,5 +144,5 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
144
144
  };
145
145
  };
146
146
  }
147
- export declare function extractCompositeTypes(sql: Sql): Promise<CompositeType[]>;
147
+ export declare function extractCompositeTypes(pool: Pool): Promise<CompositeType[]>;
148
148
  export {};