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

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 (633) 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 +245 -0
  10. package/dist/cli/commands/plan.js +40 -6
  11. package/dist/cli/exit-code.d.ts +2 -0
  12. package/dist/cli/exit-code.js +7 -0
  13. package/dist/cli/formatters/tree/tree.js +3 -2
  14. package/dist/cli/utils/apply-display.d.ts +52 -0
  15. package/dist/cli/utils/apply-display.js +183 -0
  16. package/dist/cli/utils/export-display.d.ts +43 -0
  17. package/dist/cli/utils/export-display.js +202 -0
  18. package/dist/cli/utils/resolve-input.d.ts +7 -0
  19. package/dist/cli/utils/resolve-input.js +13 -0
  20. package/dist/cli/utils.d.ts +2 -0
  21. package/dist/cli/utils.js +1 -1
  22. package/dist/core/catalog-export/index.d.ts +11 -0
  23. package/dist/core/catalog-export/index.js +10 -0
  24. package/dist/core/catalog.diff.d.ts +1 -0
  25. package/dist/core/catalog.diff.js +64 -48
  26. package/dist/core/catalog.model.d.ts +14 -1
  27. package/dist/core/catalog.model.js +103 -1
  28. package/dist/core/catalog.snapshot.d.ts +66 -0
  29. package/dist/core/catalog.snapshot.js +206 -0
  30. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  31. package/dist/core/declarative-apply/discover-sql.js +86 -0
  32. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  33. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  34. package/dist/core/declarative-apply/index.d.ts +49 -0
  35. package/dist/core/declarative-apply/index.js +134 -0
  36. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  37. package/dist/core/declarative-apply/round-apply.js +378 -0
  38. package/dist/core/export/file-mapper.d.ts +71 -0
  39. package/dist/core/export/file-mapper.js +474 -0
  40. package/dist/core/export/grouper.d.ts +13 -0
  41. package/dist/core/export/grouper.js +76 -0
  42. package/dist/core/export/index.d.ts +45 -0
  43. package/dist/core/export/index.js +63 -0
  44. package/dist/core/export/types.d.ts +84 -0
  45. package/dist/core/export/types.js +25 -0
  46. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  47. package/dist/core/integrations/filter/dsl.d.ts +38 -1
  48. package/dist/core/integrations/filter/dsl.js +20 -2
  49. package/dist/core/integrations/filter/extractors.js +42 -0
  50. package/dist/core/integrations/integration-dsl.d.ts +10 -0
  51. package/dist/core/integrations/supabase.d.ts +8 -0
  52. package/dist/core/integrations/supabase.js +9 -0
  53. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  54. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  55. package/dist/core/objects/aggregate/aggregate.model.d.ts +8 -8
  56. package/dist/core/objects/aggregate/aggregate.model.js +1 -1
  57. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  58. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  59. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  60. package/dist/core/objects/base.privilege-diff.js +104 -22
  61. package/dist/core/objects/base.privilege.d.ts +1 -0
  62. package/dist/core/objects/base.privilege.js +9 -2
  63. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  64. package/dist/core/objects/diff-context.d.ts +15 -0
  65. package/dist/core/objects/diff-context.js +1 -0
  66. package/dist/core/objects/domain/changes/domain.create.js +4 -2
  67. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  68. package/dist/core/objects/domain/domain.diff.js +16 -77
  69. package/dist/core/objects/domain/domain.model.js +1 -1
  70. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  71. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  72. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  73. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +2 -2
  74. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  75. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  76. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +1 -1
  77. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  78. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  79. package/dist/core/objects/language/language.diff.d.ts +2 -5
  80. package/dist/core/objects/language/language.diff.js +7 -39
  81. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  82. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  83. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +3 -3
  84. package/dist/core/objects/materialized-view/materialized-view.model.js +1 -1
  85. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  86. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  87. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  88. package/dist/core/objects/procedure/procedure.model.d.ts +9 -9
  89. package/dist/core/objects/procedure/procedure.model.js +1 -1
  90. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  91. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  92. package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
  93. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  94. package/dist/core/objects/publication/publication.diff.js +8 -13
  95. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  96. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
  97. package/dist/core/objects/role/role.diff.js +22 -1
  98. package/dist/core/objects/role/role.model.d.ts +4 -3
  99. package/dist/core/objects/role/role.model.js +118 -12
  100. package/dist/core/objects/rule/rule.model.d.ts +1 -1
  101. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  102. package/dist/core/objects/schema/schema.diff.js +16 -77
  103. package/dist/core/objects/schema/schema.model.js +1 -1
  104. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  105. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  106. package/dist/core/objects/sequence/sequence.model.js +1 -1
  107. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  108. package/dist/core/objects/table/changes/table.create.js +3 -0
  109. package/dist/core/objects/table/table.diff.d.ts +2 -8
  110. package/dist/core/objects/table/table.diff.js +26 -157
  111. package/dist/core/objects/table/table.model.d.ts +25 -22
  112. package/dist/core/objects/table/table.model.js +4 -1
  113. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  114. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  115. package/dist/core/objects/trigger/trigger.model.d.ts +9 -0
  116. package/dist/core/objects/trigger/trigger.model.js +14 -0
  117. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  118. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  119. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +3 -3
  120. package/dist/core/objects/type/composite-type/composite-type.model.js +2 -1
  121. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  122. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  123. package/dist/core/objects/type/enum/enum.model.js +1 -1
  124. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  125. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  126. package/dist/core/objects/type/range/range.diff.js +16 -77
  127. package/dist/core/objects/type/range/range.model.js +1 -1
  128. package/dist/core/objects/view/view.diff.d.ts +2 -8
  129. package/dist/core/objects/view/view.diff.js +16 -158
  130. package/dist/core/objects/view/view.model.d.ts +18 -4
  131. package/dist/core/objects/view/view.model.js +3 -13
  132. package/dist/core/plan/apply.js +11 -28
  133. package/dist/core/plan/create.d.ts +19 -6
  134. package/dist/core/plan/create.js +134 -155
  135. package/dist/core/plan/serialize.js +16 -4
  136. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  137. package/dist/core/plan/sql-format/constants.js +11 -0
  138. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  139. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  140. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  141. package/dist/core/plan/sql-format/format-utils.js +274 -0
  142. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  143. package/dist/core/plan/sql-format/formatters.js +737 -0
  144. package/dist/core/plan/sql-format/index.d.ts +2 -0
  145. package/dist/core/plan/sql-format/index.js +98 -0
  146. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  147. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  148. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  149. package/dist/core/plan/sql-format/protect.js +269 -0
  150. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  151. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  152. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  153. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  154. package/dist/core/plan/sql-format/types.d.ts +28 -0
  155. package/dist/core/plan/sql-format/types.js +1 -0
  156. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  157. package/dist/core/plan/sql-format/wrap.js +165 -0
  158. package/dist/core/plan/sql-format.d.ts +2 -0
  159. package/dist/core/plan/sql-format.js +1 -0
  160. package/dist/core/plan/ssl-config.d.ts +32 -0
  161. package/dist/core/plan/ssl-config.js +115 -0
  162. package/dist/core/plan/statements.d.ts +2 -1
  163. package/dist/core/plan/statements.js +6 -2
  164. package/dist/core/plan/types.d.ts +6 -0
  165. package/dist/core/postgres-config.d.ts +29 -0
  166. package/dist/core/postgres-config.js +83 -2
  167. package/dist/core/sort/graph-builder.js +10 -0
  168. package/dist/core/sort/logical-sort.js +31 -23
  169. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  170. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  171. package/dist/index.d.ts +8 -0
  172. package/dist/index.js +7 -1
  173. package/package.json +54 -22
  174. package/src/cli/app.ts +52 -0
  175. package/src/cli/bin/cli.ts +15 -0
  176. package/src/cli/commands/apply.ts +101 -0
  177. package/src/cli/commands/catalog-export.ts +78 -0
  178. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  179. package/src/cli/commands/declarative-apply.ts +380 -0
  180. package/src/cli/commands/declarative-export.ts +330 -0
  181. package/src/cli/commands/plan.ts +216 -0
  182. package/src/cli/commands/sync.ts +185 -0
  183. package/src/cli/exit-code.test.ts +19 -0
  184. package/src/cli/exit-code.ts +7 -0
  185. package/src/cli/formatters/index.ts +5 -0
  186. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  187. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  188. package/src/cli/formatters/tree/tree.ts +238 -0
  189. package/src/cli/utils/apply-display.test.ts +348 -0
  190. package/src/cli/utils/apply-display.ts +238 -0
  191. package/src/cli/utils/export-display.test.ts +103 -0
  192. package/src/cli/utils/export-display.ts +275 -0
  193. package/src/cli/utils/integrations.test.ts +44 -0
  194. package/src/cli/utils/integrations.ts +42 -0
  195. package/src/cli/utils/resolve-input.test.ts +38 -0
  196. package/src/cli/utils/resolve-input.ts +17 -0
  197. package/src/cli/utils.ts +231 -0
  198. package/src/core/catalog-export/index.ts +20 -0
  199. package/src/core/catalog.diff.ts +247 -0
  200. package/src/core/catalog.model.test.ts +122 -0
  201. package/src/core/catalog.model.ts +510 -0
  202. package/src/core/catalog.snapshot.test.ts +464 -0
  203. package/src/core/catalog.snapshot.ts +289 -0
  204. package/src/core/change.types.ts +44 -0
  205. package/src/core/context.ts +26 -0
  206. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  207. package/src/core/declarative-apply/discover-sql.ts +107 -0
  208. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  209. package/src/core/declarative-apply/index.test.ts +67 -0
  210. package/src/core/declarative-apply/index.ts +205 -0
  211. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  212. package/src/core/declarative-apply/round-apply.ts +562 -0
  213. package/src/core/depend.ts +1870 -0
  214. package/src/core/expand-replace-dependencies.test.ts +70 -0
  215. package/src/core/expand-replace-dependencies.ts +380 -0
  216. package/src/core/export/file-mapper.test.ts +816 -0
  217. package/src/core/export/file-mapper.ts +574 -0
  218. package/src/core/export/grouper.ts +108 -0
  219. package/src/core/export/index.ts +129 -0
  220. package/src/core/export/types.ts +104 -0
  221. package/src/core/fingerprint.ts +204 -0
  222. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  223. package/src/core/integrations/filter/dsl.test.ts +211 -0
  224. package/src/core/integrations/filter/dsl.ts +266 -0
  225. package/src/core/integrations/filter/extractors.test.ts +244 -0
  226. package/src/core/integrations/filter/extractors.ts +187 -0
  227. package/src/core/integrations/filter/filter.types.ts +3 -0
  228. package/src/core/integrations/integration-dsl.ts +34 -0
  229. package/src/core/integrations/integration.types.ts +7 -0
  230. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  231. package/src/core/integrations/serialize/dsl.ts +77 -0
  232. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  233. package/src/core/integrations/supabase.ts +130 -0
  234. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  235. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  236. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  237. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  238. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  239. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  240. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  241. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  242. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  243. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  244. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  245. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  246. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  247. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  248. package/src/core/objects/aggregate/changes/aggregate.types.ts +12 -0
  249. package/src/core/objects/base.change.ts +62 -0
  250. package/src/core/objects/base.default-privileges.ts +204 -0
  251. package/src/core/objects/base.diff.ts +20 -0
  252. package/src/core/objects/base.model.ts +82 -0
  253. package/src/core/objects/base.privilege-diff.ts +447 -0
  254. package/src/core/objects/base.privilege.ts +191 -0
  255. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  256. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  257. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  258. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  259. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  260. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  261. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  262. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  263. package/src/core/objects/collation/changes/collation.types.ts +10 -0
  264. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  265. package/src/core/objects/collation/collation.diff.ts +127 -0
  266. package/src/core/objects/collation/collation.model.ts +224 -0
  267. package/src/core/objects/diff-context.ts +16 -0
  268. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  269. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  270. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  271. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  272. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  273. package/src/core/objects/domain/changes/domain.create.ts +124 -0
  274. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  275. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  276. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  277. package/src/core/objects/domain/changes/domain.types.ts +12 -0
  278. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  279. package/src/core/objects/domain/domain.diff.ts +295 -0
  280. package/src/core/objects/domain/domain.model.ts +190 -0
  281. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  282. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  283. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  284. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  285. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  286. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  287. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  288. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  289. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +10 -0
  290. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  291. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  292. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  293. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  294. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  295. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  296. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  297. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  298. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  299. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  300. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  301. package/src/core/objects/extension/changes/extension.types.ts +10 -0
  302. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  303. package/src/core/objects/extension/extension.diff.ts +90 -0
  304. package/src/core/objects/extension/extension.model.test.ts +98 -0
  305. package/src/core/objects/extension/extension.model.ts +280 -0
  306. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  307. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  308. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  309. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  310. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  311. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  312. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  313. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  314. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  315. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +12 -0
  316. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  317. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  318. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  319. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +10 -0
  320. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  321. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  322. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  323. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  324. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  325. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  326. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  327. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  328. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  329. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +12 -0
  330. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  331. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  332. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  333. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  334. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  335. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  336. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  337. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  338. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  339. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  340. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  341. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  342. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +12 -0
  343. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  344. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  345. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  346. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  347. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  348. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  349. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  350. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  351. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  352. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  353. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +8 -0
  354. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  355. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  356. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  357. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  358. package/src/core/objects/index/changes/index.alter.ts +144 -0
  359. package/src/core/objects/index/changes/index.base.ts +20 -0
  360. package/src/core/objects/index/changes/index.comment.ts +63 -0
  361. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  362. package/src/core/objects/index/changes/index.create.ts +68 -0
  363. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  364. package/src/core/objects/index/changes/index.drop.ts +34 -0
  365. package/src/core/objects/index/changes/index.types.ts +6 -0
  366. package/src/core/objects/index/changes/utils.ts +16 -0
  367. package/src/core/objects/index/index.diff.test.ts +153 -0
  368. package/src/core/objects/index/index.diff.ts +243 -0
  369. package/src/core/objects/index/index.model.ts +370 -0
  370. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  371. package/src/core/objects/language/changes/language.alter.ts +53 -0
  372. package/src/core/objects/language/changes/language.base.ts +20 -0
  373. package/src/core/objects/language/changes/language.comment.ts +58 -0
  374. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  375. package/src/core/objects/language/changes/language.create.ts +104 -0
  376. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  377. package/src/core/objects/language/changes/language.drop.ts +39 -0
  378. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  379. package/src/core/objects/language/changes/language.types.ts +12 -0
  380. package/src/core/objects/language/language.diff.test.ts +135 -0
  381. package/src/core/objects/language/language.diff.ts +144 -0
  382. package/src/core/objects/language/language.model.ts +150 -0
  383. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  384. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  385. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  386. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  387. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  388. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  389. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  390. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  391. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  392. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +12 -0
  393. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  394. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  395. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  396. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  397. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  398. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  399. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  400. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  401. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  402. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  403. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  404. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  405. package/src/core/objects/procedure/changes/procedure.types.ts +12 -0
  406. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  407. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  408. package/src/core/objects/procedure/procedure.model.ts +264 -0
  409. package/src/core/objects/procedure/utils.ts +58 -0
  410. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  411. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  412. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  413. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  414. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  415. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  416. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  417. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  418. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  419. package/src/core/objects/publication/changes/publication.types.ts +24 -0
  420. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  421. package/src/core/objects/publication/publication.diff.ts +247 -0
  422. package/src/core/objects/publication/publication.model.ts +206 -0
  423. package/src/core/objects/publication/utils.ts +55 -0
  424. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  425. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  426. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  427. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  428. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  429. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  430. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  431. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  432. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +10 -0
  433. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  434. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  435. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  436. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  437. package/src/core/objects/role/changes/role.alter.ts +110 -0
  438. package/src/core/objects/role/changes/role.base.ts +24 -0
  439. package/src/core/objects/role/changes/role.comment.ts +55 -0
  440. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  441. package/src/core/objects/role/changes/role.create.ts +102 -0
  442. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  443. package/src/core/objects/role/changes/role.drop.ts +34 -0
  444. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  445. package/src/core/objects/role/changes/role.types.ts +12 -0
  446. package/src/core/objects/role/role.diff.test.ts +279 -0
  447. package/src/core/objects/role/role.diff.ts +499 -0
  448. package/src/core/objects/role/role.model.ts +452 -0
  449. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  450. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  451. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  452. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  453. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  454. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  455. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  456. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  457. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  458. package/src/core/objects/rule/changes/rule.types.ts +12 -0
  459. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  460. package/src/core/objects/rule/rule.diff.ts +79 -0
  461. package/src/core/objects/rule/rule.model.ts +173 -0
  462. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  463. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  464. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  465. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  466. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  467. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  468. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  469. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  470. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  471. package/src/core/objects/schema/changes/schema.types.ts +12 -0
  472. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  473. package/src/core/objects/schema/schema.diff.ts +146 -0
  474. package/src/core/objects/schema/schema.model.ts +107 -0
  475. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  476. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  477. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  478. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  479. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  480. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  481. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  482. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  483. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  484. package/src/core/objects/sequence/changes/sequence.types.ts +12 -0
  485. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  486. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  487. package/src/core/objects/sequence/sequence.model.ts +185 -0
  488. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  489. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  490. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  491. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  492. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  493. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  494. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  495. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  496. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  497. package/src/core/objects/subscription/changes/subscription.types.ts +22 -0
  498. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  499. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  500. package/src/core/objects/subscription/subscription.model.ts +190 -0
  501. package/src/core/objects/subscription/utils.ts +156 -0
  502. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  503. package/src/core/objects/table/changes/table.alter.ts +806 -0
  504. package/src/core/objects/table/changes/table.base.ts +20 -0
  505. package/src/core/objects/table/changes/table.comment.ts +266 -0
  506. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  507. package/src/core/objects/table/changes/table.create.ts +192 -0
  508. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  509. package/src/core/objects/table/changes/table.drop.ts +45 -0
  510. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  511. package/src/core/objects/table/changes/table.types.ts +12 -0
  512. package/src/core/objects/table/table.diff.test.ts +868 -0
  513. package/src/core/objects/table/table.diff.ts +817 -0
  514. package/src/core/objects/table/table.model.ts +460 -0
  515. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  516. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  517. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  518. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  519. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  520. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  521. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  522. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  523. package/src/core/objects/trigger/changes/trigger.types.ts +10 -0
  524. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  525. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  526. package/src/core/objects/trigger/trigger.model.ts +264 -0
  527. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  528. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  529. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  530. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  531. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  532. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  533. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  534. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  535. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  536. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +12 -0
  537. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  538. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  539. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  540. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  541. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  542. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  543. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  544. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  545. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  546. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  547. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  548. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  549. package/src/core/objects/type/enum/changes/enum.types.ts +12 -0
  550. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  551. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  552. package/src/core/objects/type/enum/enum.model.ts +194 -0
  553. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  554. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  555. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  556. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  557. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  558. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  559. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  560. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  561. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  562. package/src/core/objects/type/range/changes/range.types.ts +12 -0
  563. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  564. package/src/core/objects/type/range/range.diff.ts +197 -0
  565. package/src/core/objects/type/range/range.model.ts +187 -0
  566. package/src/core/objects/type/type.types.ts +5 -0
  567. package/src/core/objects/utils.ts +171 -0
  568. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  569. package/src/core/objects/view/changes/view.alter.ts +112 -0
  570. package/src/core/objects/view/changes/view.base.ts +20 -0
  571. package/src/core/objects/view/changes/view.comment.ts +59 -0
  572. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  573. package/src/core/objects/view/changes/view.create.ts +73 -0
  574. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  575. package/src/core/objects/view/changes/view.drop.ts +40 -0
  576. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  577. package/src/core/objects/view/changes/view.types.ts +12 -0
  578. package/src/core/objects/view/view.diff.test.ts +173 -0
  579. package/src/core/objects/view/view.diff.ts +215 -0
  580. package/src/core/objects/view/view.model.ts +262 -0
  581. package/src/core/plan/apply.ts +172 -0
  582. package/src/core/plan/create.ts +368 -0
  583. package/src/core/plan/hierarchy.ts +574 -0
  584. package/src/core/plan/index.ts +29 -0
  585. package/src/core/plan/io.ts +20 -0
  586. package/src/core/plan/risk.ts +48 -0
  587. package/src/core/plan/serialize.test.ts +317 -0
  588. package/src/core/plan/serialize.ts +209 -0
  589. package/src/core/plan/sql-format/constants.ts +13 -0
  590. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  591. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  592. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  593. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  594. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  595. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  596. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  597. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  598. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  599. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  600. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  601. package/src/core/plan/sql-format/format-utils.ts +391 -0
  602. package/src/core/plan/sql-format/formatters.ts +921 -0
  603. package/src/core/plan/sql-format/index.ts +149 -0
  604. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  605. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  606. package/src/core/plan/sql-format/protect.test.ts +127 -0
  607. package/src/core/plan/sql-format/protect.ts +337 -0
  608. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  609. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  610. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  611. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  612. package/src/core/plan/sql-format/types.ts +31 -0
  613. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  614. package/src/core/plan/sql-format/wrap.ts +196 -0
  615. package/src/core/plan/sql-format.ts +2 -0
  616. package/src/core/plan/ssl-config.ts +172 -0
  617. package/src/core/plan/statements.ts +22 -0
  618. package/src/core/plan/types.ts +171 -0
  619. package/src/core/postgres-config.ts +238 -0
  620. package/src/core/sort/custom-constraints.ts +161 -0
  621. package/src/core/sort/debug-visualization.ts +239 -0
  622. package/src/core/sort/dependency-filter.ts +224 -0
  623. package/src/core/sort/graph-builder.ts +235 -0
  624. package/src/core/sort/graph-utils.ts +51 -0
  625. package/src/core/sort/logical-sort.test.ts +371 -0
  626. package/src/core/sort/logical-sort.ts +597 -0
  627. package/src/core/sort/sort-changes.ts +234 -0
  628. package/src/core/sort/topological-sort.test.ts +275 -0
  629. package/src/core/sort/topological-sort.ts +184 -0
  630. package/src/core/sort/types.ts +112 -0
  631. package/src/core/sort/utils.ts +69 -0
  632. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  633. package/src/index.ts +38 -0
@@ -64,6 +64,9 @@ export class CreateTable extends CreateTableChange {
64
64
  }
65
65
  }
66
66
  }
67
+ // Function dependencies from DEFAULT expressions are handled by pg_depend
68
+ // catalog constraints in the sort pipeline, which provides exact argument
69
+ // types and covers all expression contexts (not just column defaults).
67
70
  }
68
71
  return Array.from(dependencies);
69
72
  }
@@ -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 { TableChange } from "./changes/table.types.ts";
4
3
  import { Table } from "./table.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import { Table } from "./table.model.ts";
10
9
  * @param branch - The tables 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 diffTables(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, Table>, branch: Record<string, Table>): TableChange[];
12
+ export declare function diffTables(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Table>, branch: Record<string, Table>): TableChange[];
@@ -1,5 +1,5 @@
1
1
  import { diffObjects } from "../base.diff.js";
2
- import { diffPrivileges, groupPrivilegesByColumns, } from "../base.privilege-diff.js";
2
+ import { diffPrivileges, emitColumnPrivilegeChanges, } from "../base.privilege-diff.js";
3
3
  import { deepEqual } from "../utils.js";
4
4
  import { AlterTableAddColumn, AlterTableAddConstraint, AlterTableAlterColumnDropDefault, AlterTableAlterColumnDropNotNull, AlterTableAlterColumnSetDefault, AlterTableAlterColumnSetNotNull, AlterTableAlterColumnType, AlterTableAttachPartition, AlterTableChangeOwner, AlterTableDetachPartition, AlterTableDisableRowLevelSecurity, AlterTableDropColumn, AlterTableDropConstraint, AlterTableEnableRowLevelSecurity, AlterTableForceRowLevelSecurity, AlterTableNoForceRowLevelSecurity, AlterTableResetStorageParams, AlterTableSetLogged, AlterTableSetReplicaIdentity, AlterTableSetStorageParams, AlterTableSetUnlogged, AlterTableValidateConstraint, } from "./changes/table.alter.js";
5
5
  import { CreateCommentOnColumn, CreateCommentOnConstraint, CreateCommentOnTable, DropCommentOnColumn, DropCommentOnConstraint, DropCommentOnTable, } from "./changes/table.comment.js";
@@ -149,6 +149,16 @@ export function diffTables(ctx, main, branch) {
149
149
  if (branchTable.force_row_security) {
150
150
  changes.push(new AlterTableForceRowLevelSecurity({ table: branchTable }));
151
151
  }
152
+ // REPLICA IDENTITY: If non-default, emit ALTER TABLE ... REPLICA IDENTITY
153
+ if (branchTable.replica_identity !== "d") {
154
+ // Skip 'i' (USING INDEX) — handled by index changes
155
+ if (branchTable.replica_identity !== "i") {
156
+ changes.push(new AlterTableSetReplicaIdentity({
157
+ table: branchTable,
158
+ mode: branchTable.replica_identity,
159
+ }));
160
+ }
161
+ }
152
162
  changes.push(...createAlterConstraintChange(
153
163
  // Create a dummy table with no constraints do diff constraints against
154
164
  new Table({
@@ -171,86 +181,18 @@ export function diffTables(ctx, main, branch) {
171
181
  // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
172
182
  // needed to reach the final desired state.
173
183
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "table", branchTable.schema ?? "");
184
+ const creatorFilteredDefaults = branchTable.owner !== ctx.currentUser
185
+ ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
186
+ : effectiveDefaults;
174
187
  const desiredPrivileges = branchTable.privileges;
175
188
  // Filter out owner privileges - owner always has ALL privileges implicitly
176
189
  // and shouldn't be compared. Use the table owner as the reference.
177
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, branchTable.owner, ctx.mainRoles);
178
- // Generate grant changes
179
- for (const [grantee, result] of privilegeResults) {
180
- if (result.grants.length > 0) {
181
- const grantGroups = groupPrivilegesByColumns(result.grants);
182
- for (const [, group] of grantGroups) {
183
- for (const [grantable, privSet] of group.byGrant) {
184
- const privileges = Array.from(privSet).map((priv) => ({
185
- privilege: priv,
186
- grantable,
187
- }));
188
- changes.push(new GrantTablePrivileges({
189
- table: branchTable,
190
- grantee,
191
- privileges,
192
- columns: group.columns,
193
- version: ctx.version,
194
- }));
195
- }
196
- }
197
- }
198
- // Generate revoke changes
199
- if (result.revokes.length > 0) {
200
- const revokeGroups = groupPrivilegesByColumns(result.revokes);
201
- for (const [, group] of revokeGroups) {
202
- const allPrivileges = new Set();
203
- for (const [, privSet] of group.byGrant) {
204
- for (const priv of privSet) {
205
- allPrivileges.add(priv);
206
- }
207
- }
208
- const privileges = Array.from(allPrivileges).map((priv) => ({
209
- privilege: priv,
210
- grantable: false,
211
- }));
212
- changes.push(new RevokeTablePrivileges({
213
- table: branchTable,
214
- grantee,
215
- privileges,
216
- columns: group.columns,
217
- version: ctx.version,
218
- }));
219
- }
220
- }
221
- // Generate revoke grant option changes
222
- if (result.revokeGrantOption.length > 0) {
223
- const revokeGrantGroups = new Map();
224
- for (const r of result.revokeGrantOption) {
225
- const originalPriv = effectiveDefaults.find((p) => p.grantee === grantee && p.privilege === r);
226
- const key = originalPriv?.columns
227
- ? originalPriv.columns.sort().join(",")
228
- : "";
229
- if (!revokeGrantGroups.has(key)) {
230
- revokeGrantGroups.set(key, {
231
- columns: originalPriv?.columns
232
- ? [...originalPriv.columns]
233
- : undefined,
234
- privileges: new Set(),
235
- });
236
- }
237
- const group = revokeGrantGroups.get(key);
238
- if (!group)
239
- continue;
240
- group.privileges.add(r);
241
- }
242
- for (const [, group] of revokeGrantGroups) {
243
- const privilegeNames = Array.from(group.privileges);
244
- changes.push(new RevokeGrantOptionTablePrivileges({
245
- table: branchTable,
246
- grantee,
247
- privilegeNames,
248
- columns: group.columns,
249
- version: ctx.version,
250
- }));
251
- }
252
- }
253
- }
190
+ const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, branchTable.owner);
191
+ changes.push(...emitColumnPrivilegeChanges(privilegeResults, branchTable, branchTable, "table", {
192
+ Grant: GrantTablePrivileges,
193
+ Revoke: RevokeTablePrivileges,
194
+ RevokeGrantOption: RevokeGrantOptionTablePrivileges,
195
+ }, effectiveDefaults, ctx.version));
254
196
  }
255
197
  for (const tableId of dropped) {
256
198
  changes.push(new DropTable({ table: main[tableId] }));
@@ -584,85 +526,12 @@ export function diffTables(ctx, main, branch) {
584
526
  // PRIVILEGES (unified object and column privileges)
585
527
  // Filter out owner privileges - owner always has ALL privileges implicitly
586
528
  // and shouldn't be compared. Use branch owner as the reference.
587
- const privilegeResults = diffPrivileges(mainTable.privileges, branchTable.privileges, branchTable.owner, ctx.mainRoles);
588
- for (const [grantee, result] of privilegeResults) {
589
- // Generate grant changes
590
- if (result.grants.length > 0) {
591
- const grantGroups = groupPrivilegesByColumns(result.grants);
592
- for (const [, group] of grantGroups) {
593
- for (const [grantable, privSet] of group.byGrant) {
594
- const privileges = Array.from(privSet).map((priv) => ({
595
- privilege: priv,
596
- grantable,
597
- }));
598
- changes.push(new GrantTablePrivileges({
599
- table: branchTable,
600
- grantee,
601
- privileges,
602
- columns: group.columns,
603
- version: ctx.version,
604
- }));
605
- }
606
- }
607
- }
608
- // Generate revoke changes
609
- if (result.revokes.length > 0) {
610
- const revokeGroups = groupPrivilegesByColumns(result.revokes);
611
- for (const [, group] of revokeGroups) {
612
- // Collapse all grantable groups into a single revoke (grantable: false)
613
- const allPrivileges = new Set();
614
- for (const [, privSet] of group.byGrant) {
615
- for (const priv of privSet) {
616
- allPrivileges.add(priv);
617
- }
618
- }
619
- const privileges = Array.from(allPrivileges).map((priv) => ({
620
- privilege: priv,
621
- grantable: false,
622
- }));
623
- changes.push(new RevokeTablePrivileges({
624
- table: mainTable,
625
- grantee,
626
- privileges,
627
- columns: group.columns,
628
- version: ctx.version,
629
- }));
630
- }
631
- }
632
- // Generate revoke grant option changes
633
- if (result.revokeGrantOption.length > 0) {
634
- const revokeGrantGroups = new Map();
635
- for (const r of result.revokeGrantOption) {
636
- // For revoke grant option, we need to find the columns from the original privilege
637
- const originalPriv = mainTable.privileges.find((p) => p.grantee === grantee && p.privilege === r);
638
- const key = originalPriv?.columns
639
- ? originalPriv.columns.sort().join(",")
640
- : "";
641
- if (!revokeGrantGroups.has(key)) {
642
- revokeGrantGroups.set(key, {
643
- columns: originalPriv?.columns
644
- ? [...originalPriv.columns]
645
- : undefined,
646
- privileges: new Set(),
647
- });
648
- }
649
- const group = revokeGrantGroups.get(key);
650
- if (!group)
651
- continue;
652
- group.privileges.add(r);
653
- }
654
- for (const [, group] of revokeGrantGroups) {
655
- const privilegeNames = Array.from(group.privileges);
656
- changes.push(new RevokeGrantOptionTablePrivileges({
657
- table: mainTable,
658
- grantee,
659
- privilegeNames,
660
- columns: group.columns,
661
- version: ctx.version,
662
- }));
663
- }
664
- }
665
- }
529
+ const privilegeResults = diffPrivileges(mainTable.privileges, branchTable.privileges, branchTable.owner);
530
+ changes.push(...emitColumnPrivilegeChanges(privilegeResults, branchTable, mainTable, "table", {
531
+ Grant: GrantTablePrivileges,
532
+ Revoke: RevokeTablePrivileges,
533
+ RevokeGrantOption: RevokeGrantOptionTablePrivileges,
534
+ }, mainTable.privileges, ctx.version));
666
535
  }
667
536
  return changes;
668
537
  }
@@ -3,18 +3,19 @@ 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;
@@ -33,6 +33,7 @@ const tableConstraintPropsSchema = z.object({
33
33
  "c", // CHECK constraint
34
34
  "f", // FOREIGN KEY constraint
35
35
  "p", // PRIMARY KEY constraint
36
+ "t", // TRIGGER constraint
36
37
  "u", // UNIQUE constraint
37
38
  "x", // EXCLUDE constraint
38
39
  ]),
@@ -338,6 +339,8 @@ select
338
339
  and de.refclassid = 'pg_extension'::regclass
339
340
 
340
341
  where c.conrelid = t.oid
342
+ -- Skip constraint triggers; they are modeled as triggers, not table constraints
343
+ and c.contype <> 't'
341
344
  and not c.connamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
342
345
  and de.objid is null
343
346
  ),
@@ -394,7 +397,7 @@ select
394
397
  from (
395
398
  -- one row for object ACL + one row per column ACL
396
399
  select null::name as attname, t.oid as relacl_oid, (
397
- 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
398
401
  ) as acl
399
402
  union all
400
403
  select a2.attname, t.oid as relacl_oid, a2.attacl
@@ -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
  }
@@ -5,6 +5,13 @@ 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;
@@ -7,10 +7,18 @@ const TriggerEnabledSchema = z.enum([
7
7
  "R", // REPLICA - trigger fires only in "replica" mode
8
8
  "A", // ALWAYS - trigger fires regardless of replication mode
9
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
+ ]);
10
17
  const triggerPropsSchema = z.object({
11
18
  schema: z.string(),
12
19
  name: z.string(),
13
20
  table_name: z.string(),
21
+ table_relkind: TriggerTableRelkindSchema,
14
22
  function_schema: z.string(),
15
23
  function_name: z.string(),
16
24
  trigger_type: z.number(),
@@ -37,6 +45,7 @@ export class Trigger extends BasePgModel {
37
45
  schema;
38
46
  name;
39
47
  table_name;
48
+ table_relkind;
40
49
  function_schema;
41
50
  function_name;
42
51
  trigger_type;
@@ -64,6 +73,7 @@ export class Trigger extends BasePgModel {
64
73
  this.schema = props.schema;
65
74
  this.name = props.name;
66
75
  this.table_name = props.table_name;
76
+ this.table_relkind = props.table_relkind;
67
77
  // Data fields
68
78
  this.function_schema = props.function_schema;
69
79
  this.function_name = props.function_name;
@@ -87,6 +97,9 @@ export class Trigger extends BasePgModel {
87
97
  this.definition = props.definition;
88
98
  this.comment = props.comment;
89
99
  }
100
+ get isConstraintTrigger() {
101
+ return /^CREATE\s+CONSTRAINT\s+TRIGGER/i.test(this.definition.trim());
102
+ }
90
103
  get stableId() {
91
104
  return `trigger:${this.schema}.${this.table_name}.${this.name}`;
92
105
  }
@@ -147,6 +160,7 @@ export async function extractTriggers(pool) {
147
160
  tc.relnamespace::regnamespace::text as schema,
148
161
  quote_ident(t.tgname) as name,
149
162
  quote_ident(tc.relname) as table_name,
163
+ tc.relkind as table_relkind,
150
164
 
151
165
  fc.pronamespace::regnamespace::text as function_schema,
152
166
  quote_ident(fc.proname) as function_name,
@@ -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[];