@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
@@ -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 { AlterAggregateChangeOwner } from "./changes/aggregate.alter.js";
5
5
  import { CreateCommentOnAggregate, DropCommentOnAggregate, } from "./changes/aggregate.comment.js";
@@ -29,48 +29,21 @@ export function diffAggregates(ctx, main, branch) {
29
29
  // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
30
30
  // needed to reach the final desired state.
31
31
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "aggregate", aggregate.schema ?? "");
32
+ const creatorFilteredDefaults = aggregate.owner !== ctx.currentUser
33
+ ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
34
+ : effectiveDefaults;
32
35
  // Filter out PUBLIC's built-in default EXECUTE privilege (PostgreSQL grants it automatically)
33
36
  // Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
34
37
  // This prevents generating unnecessary "GRANT EXECUTE TO PUBLIC" statements
35
38
  const desiredPrivileges = filterPublicBuiltInDefaults("aggregate", aggregate.privileges);
36
39
  // Filter out owner privileges - owner always has ALL privileges implicitly
37
40
  // and shouldn't be compared. Use the aggregate owner as the reference.
38
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, aggregate.owner, ctx.mainRoles);
39
- // Generate grant changes
40
- for (const [grantee, result] of privilegeResults) {
41
- if (result.grants.length > 0) {
42
- const grantGroups = groupPrivilegesByGrantable(result.grants);
43
- for (const [, list] of grantGroups) {
44
- changes.push(new GrantAggregatePrivileges({
45
- aggregate,
46
- grantee,
47
- privileges: list,
48
- version: ctx.version,
49
- }));
50
- }
51
- }
52
- // Generate revoke changes
53
- if (result.revokes.length > 0) {
54
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
55
- for (const [, list] of revokeGroups) {
56
- changes.push(new RevokeAggregatePrivileges({
57
- aggregate,
58
- grantee,
59
- privileges: list,
60
- version: ctx.version,
61
- }));
62
- }
63
- }
64
- // Generate revoke grant option changes
65
- if (result.revokeGrantOption.length > 0) {
66
- changes.push(new RevokeGrantOptionAggregatePrivileges({
67
- aggregate,
68
- grantee,
69
- privilegeNames: result.revokeGrantOption,
70
- version: ctx.version,
71
- }));
72
- }
73
- }
41
+ const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("aggregate", creatorFilteredDefaults), desiredPrivileges, aggregate.owner);
42
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, aggregate, aggregate, "aggregate", {
43
+ Grant: GrantAggregatePrivileges,
44
+ Revoke: RevokeAggregatePrivileges,
45
+ RevokeGrantOption: RevokeGrantOptionAggregatePrivileges,
46
+ }, ctx.version));
74
47
  }
75
48
  for (const aggregateId of dropped) {
76
49
  changes.push(new DropAggregate({ aggregate: main[aggregateId] }));
@@ -148,39 +121,12 @@ export function diffAggregates(ctx, main, branch) {
148
121
  const branchPrivilegesFiltered = filterPublicBuiltInDefaults("aggregate", branchAggregate.privileges);
149
122
  // Filter out owner privileges - owner always has ALL privileges implicitly
150
123
  // and shouldn't be compared. Use branch owner as the reference.
151
- const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchAggregate.owner, ctx.mainRoles);
152
- for (const [grantee, result] of privilegeResults) {
153
- if (result.grants.length > 0) {
154
- const grantGroups = groupPrivilegesByGrantable(result.grants);
155
- for (const [, list] of grantGroups) {
156
- changes.push(new GrantAggregatePrivileges({
157
- aggregate: branchAggregate,
158
- grantee,
159
- privileges: list,
160
- version: ctx.version,
161
- }));
162
- }
163
- }
164
- if (result.revokes.length > 0) {
165
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
166
- for (const [, list] of revokeGroups) {
167
- changes.push(new RevokeAggregatePrivileges({
168
- aggregate: mainAggregate,
169
- grantee,
170
- privileges: list,
171
- version: ctx.version,
172
- }));
173
- }
174
- }
175
- if (result.revokeGrantOption.length > 0) {
176
- changes.push(new RevokeGrantOptionAggregatePrivileges({
177
- aggregate: mainAggregate,
178
- grantee,
179
- privilegeNames: result.revokeGrantOption,
180
- version: ctx.version,
181
- }));
182
- }
183
- }
124
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchAggregate.owner);
125
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchAggregate, mainAggregate, "aggregate", {
126
+ Grant: GrantAggregatePrivileges,
127
+ Revoke: RevokeAggregatePrivileges,
128
+ RevokeGrantOption: RevokeGrantOptionAggregatePrivileges,
129
+ }, ctx.version));
184
130
  }
185
131
  return changes;
186
132
  }
@@ -16,9 +16,9 @@ declare const aggregatePropsSchema: z.ZodObject<{
16
16
  return_type: z.ZodString;
17
17
  return_type_schema: z.ZodNullable<z.ZodString>;
18
18
  parallel_safety: z.ZodEnum<{
19
- r: "r";
20
19
  u: "u";
21
20
  s: "s";
21
+ r: "r";
22
22
  }>;
23
23
  is_strict: z.ZodBoolean;
24
24
  transition_function: z.ZodString;
@@ -28,8 +28,8 @@ declare const aggregatePropsSchema: z.ZodObject<{
28
28
  final_function: z.ZodNullable<z.ZodString>;
29
29
  final_function_extra_args: z.ZodBoolean;
30
30
  final_function_modify: z.ZodNullable<z.ZodEnum<{
31
- r: "r";
32
31
  s: "s";
32
+ r: "r";
33
33
  w: "w";
34
34
  }>>;
35
35
  combine_function: z.ZodNullable<z.ZodString>;
@@ -44,8 +44,8 @@ declare const aggregatePropsSchema: z.ZodObject<{
44
44
  moving_final_function: z.ZodNullable<z.ZodString>;
45
45
  moving_final_function_extra_args: z.ZodBoolean;
46
46
  moving_final_function_modify: z.ZodNullable<z.ZodEnum<{
47
- r: "r";
48
47
  s: "s";
48
+ r: "r";
49
49
  w: "w";
50
50
  }>>;
51
51
  moving_initial_condition: z.ZodNullable<z.ZodString>;
@@ -56,8 +56,8 @@ declare const aggregatePropsSchema: z.ZodObject<{
56
56
  argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
57
57
  all_argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
58
58
  argument_modes: z.ZodNullable<z.ZodArray<z.ZodEnum<{
59
- o: "o";
60
59
  i: "i";
60
+ o: "o";
61
61
  b: "b";
62
62
  v: "v";
63
63
  t: "t";
@@ -129,7 +129,7 @@ export declare class Aggregate extends BasePgModel {
129
129
  num_direct_args: number;
130
130
  return_type: string;
131
131
  return_type_schema: string | null;
132
- parallel_safety: "r" | "u" | "s";
132
+ parallel_safety: "u" | "s" | "r";
133
133
  is_strict: boolean;
134
134
  transition_function: string;
135
135
  state_data_type: string;
@@ -137,7 +137,7 @@ export declare class Aggregate extends BasePgModel {
137
137
  state_data_space: number;
138
138
  final_function: string | null;
139
139
  final_function_extra_args: boolean;
140
- final_function_modify: "r" | "s" | "w" | null;
140
+ final_function_modify: "s" | "r" | "w" | null;
141
141
  combine_function: string | null;
142
142
  serial_function: string | null;
143
143
  deserial_function: string | null;
@@ -149,7 +149,7 @@ export declare class Aggregate extends BasePgModel {
149
149
  moving_state_data_space: number | null;
150
150
  moving_final_function: string | null;
151
151
  moving_final_function_extra_args: boolean;
152
- moving_final_function_modify: "r" | "s" | "w" | null;
152
+ moving_final_function_modify: "s" | "r" | "w" | null;
153
153
  moving_initial_condition: string | null;
154
154
  sort_operator: string | null;
155
155
  argument_count: number;
@@ -157,7 +157,7 @@ export declare class Aggregate extends BasePgModel {
157
157
  argument_names: string[] | null;
158
158
  argument_types: string[] | null;
159
159
  all_argument_types: string[] | null;
160
- argument_modes: ("o" | "i" | "b" | "v" | "t")[] | null;
160
+ argument_modes: ("i" | "o" | "b" | "v" | "t")[] | null;
161
161
  argument_defaults: string | null;
162
162
  identity_arguments: string;
163
163
  owner: string;
@@ -273,7 +273,7 @@ select
273
273
  )
274
274
  order by x.grantee, x.privilege_type
275
275
  )
276
- from lateral aclexplode(p.proacl) as x(grantor, grantee, privilege_type, is_grantable)
276
+ from lateral aclexplode(COALESCE(p.proacl, acldefault('f', p.proowner))) as x(grantor, grantee, privilege_type, is_grantable)
277
277
  ), '[]'
278
278
  ) as privileges
279
279
  from
@@ -183,7 +183,7 @@ export class CreateAggregate extends CreateAggregateChange {
183
183
  clauses.push(`SORTOP = ${formatOperator(this.aggregate.sort_operator)}`);
184
184
  }
185
185
  if (this.aggregate.parallel_safety !== "u") {
186
- clauses.push(`PARALLEL ${formatParallel(this.aggregate.parallel_safety)}`);
186
+ clauses.push(`PARALLEL = ${formatParallel(this.aggregate.parallel_safety)}`);
187
187
  }
188
188
  if (this.aggregate.is_strict) {
189
189
  clauses.push("STRICT");
@@ -20,7 +20,7 @@ export class DropAggregate extends DropAggregateChange {
20
20
  serialize() {
21
21
  const signature = this.aggregate.identityArguments;
22
22
  const qualifiedName = `${this.aggregate.schema}.${this.aggregate.name}`;
23
- const withArgs = signature.length > 0 ? `(${signature})` : "()";
23
+ const withArgs = signature.length > 0 ? `(${signature})` : "(*)";
24
24
  return `DROP AGGREGATE ${qualifiedName}${withArgs}`;
25
25
  }
26
26
  }
@@ -1,6 +1,6 @@
1
1
  import z from "zod";
2
2
  import type { Change } from "../change.types.ts";
3
- import type { Role } from "./role/role.model.ts";
3
+ import type { BaseChange } from "./base.change.ts";
4
4
  /**
5
5
  * Privilege properties that all privilege objects share.
6
6
  */
@@ -19,17 +19,6 @@ interface PrivilegeDiffResult<T extends PrivilegeProps> {
19
19
  revokes: T[];
20
20
  revokeGrantOption: string[];
21
21
  }
22
- /**
23
- * Groups privileges by grantable flag for efficient SQL generation
24
- */
25
- export declare function groupPrivilegesByGrantable<T extends PrivilegeProps>(privileges: T[]): Map<boolean, T[]>;
26
- /**
27
- * Groups privileges by columns and grantable flag
28
- */
29
- export declare function groupPrivilegesByColumns<T extends PrivilegeProps>(privileges: T[]): Map<string, {
30
- columns?: string[];
31
- byGrant: Map<boolean, Set<string>>;
32
- }>;
33
22
  /**
34
23
  * Filters out PUBLIC's built-in default privileges that PostgreSQL automatically grants
35
24
  * when creating certain object types. This prevents generating unnecessary GRANT statements
@@ -50,5 +39,41 @@ export declare function filterPublicBuiltInDefaults<T extends PrivilegeProps>(ob
50
39
  /**
51
40
  * Generic privilege diffing function that works for any object type
52
41
  */
53
- export declare function diffPrivileges<T extends PrivilegeProps>(mainPrivileges: T[], branchPrivileges: T[], owner?: string, mainRoles?: Record<string, Role>): Map<string, PrivilegeDiffResult<T>>;
42
+ export declare function diffPrivileges<T extends PrivilegeProps>(mainPrivileges: T[], branchPrivileges: T[], owner?: string): Map<string, PrivilegeDiffResult<T>>;
43
+ /**
44
+ * Factory constructors for Grant / Revoke / RevokeGrantOption change classes.
45
+ * Every object type provides its own concrete classes. The `any` props type
46
+ * is intentional: the helpers build props with a computed `[objectKey]` key
47
+ * whose name varies per object type, so no single concrete type can unify
48
+ * all call sites without an unsafe cast elsewhere.
49
+ */
50
+ interface PrivilegeChangeFactories {
51
+ Grant: new (props: any) => BaseChange;
52
+ Revoke: new (props: any) => BaseChange;
53
+ RevokeGrantOption: new (props: any) => BaseChange;
54
+ }
55
+ /**
56
+ * Emit privilege changes for object-level privileges (schema, sequence,
57
+ * procedure, etc.).
58
+ *
59
+ * For each grantee in `privilegeResults` the function groups grants and revokes
60
+ * by the `grantable` flag and pushes one change per group. Revoke-grant-option
61
+ * entries produce a single change carrying `privilegeNames`.
62
+ *
63
+ * `grantTarget` is the *branch* object (the desired state) while `revokeTarget`
64
+ * is the *main* object (the current state), so that GRANTs reference the
65
+ * newly-created/altered object and REVOKEs reference the existing one.
66
+ */
67
+ export declare function emitObjectPrivilegeChanges(privilegeResults: Map<string, PrivilegeDiffResult<PrivilegeProps>>, grantTarget: unknown, revokeTarget: unknown, objectKey: string, factories: PrivilegeChangeFactories, version?: number): BaseChange[];
68
+ /**
69
+ * Emit privilege changes for column-level privileges (table, view,
70
+ * materialized view).
71
+ *
72
+ * Like {@link emitObjectPrivilegeChanges} but groups by column set (via
73
+ * `groupPrivilegesByColumns`) instead of only by grantable. For
74
+ * revoke-grant-option the column sets come from `sourcePrivileges` so that
75
+ * `REVOKE GRANT OPTION FOR` is emitted per column set that originally carried
76
+ * the privilege.
77
+ */
78
+ export declare function emitColumnPrivilegeChanges(privilegeResults: Map<string, PrivilegeDiffResult<PrivilegeProps>>, grantTarget: unknown, revokeTarget: unknown, objectKey: string, factories: PrivilegeChangeFactories, sourcePrivileges: PrivilegeProps[], version?: number): BaseChange[];
54
79
  export {};
@@ -1,5 +1,4 @@
1
1
  import z from "zod";
2
- import { stableId } from "./utils.js";
3
2
  /**
4
3
  * Privilege properties that all privilege objects share.
5
4
  */
@@ -81,7 +80,7 @@ function checkStillHasBase(targetPrivs, privilege, key) {
81
80
  /**
82
81
  * Groups privileges by grantable flag for efficient SQL generation
83
82
  */
84
- export function groupPrivilegesByGrantable(privileges) {
83
+ function groupPrivilegesByGrantable(privileges) {
85
84
  const groups = new Map();
86
85
  for (const privilege of privileges) {
87
86
  const arr = groups.get(privilege.grantable) ?? [];
@@ -93,7 +92,7 @@ export function groupPrivilegesByGrantable(privileges) {
93
92
  /**
94
93
  * Groups privileges by columns and grantable flag
95
94
  */
96
- export function groupPrivilegesByColumns(privileges) {
95
+ function groupPrivilegesByColumns(privileges) {
97
96
  const groups = new Map();
98
97
  for (const privilege of privileges) {
99
98
  const key = privilege.columns ? privilege.columns.sort().join(",") : "";
@@ -171,33 +170,17 @@ export function filterPublicBuiltInDefaults(objectType, privileges) {
171
170
  function filterOwnerPrivileges(privileges, owner) {
172
171
  return privileges.filter((p) => p.grantee !== owner);
173
172
  }
174
- /**
175
- * Filter out privileges for superuser roles, as PostgreSQL doesn't store
176
- * GRANTs to superusers in relacl (they already have all privileges implicitly).
177
- * Reference: https://www.postgresql.org/docs/current/role-attributes.html
178
- */
179
- function filterSuperuserPrivileges(privileges, mainRoles) {
180
- if (!mainRoles)
181
- return privileges;
182
- return privileges.filter((priv) => {
183
- const role = mainRoles[stableId.role(priv.grantee)];
184
- return !role?.is_superuser;
185
- });
186
- }
187
173
  /**
188
174
  * Generic privilege diffing function that works for any object type
189
175
  */
190
- export function diffPrivileges(mainPrivileges, branchPrivileges, owner, mainRoles) {
191
- // Filter out superuser privileges from branch - PostgreSQL doesn't store GRANTs
192
- // to superusers in relacl because they already have all privileges implicitly
193
- const branchPrivilegesFiltered = filterSuperuserPrivileges(branchPrivileges, mainRoles);
176
+ export function diffPrivileges(mainPrivileges, branchPrivileges, owner) {
194
177
  // Filter out owner privileges if owner is provided
195
178
  const mainFiltered = owner
196
179
  ? filterOwnerPrivileges(mainPrivileges, owner)
197
180
  : mainPrivileges;
198
181
  const branchFiltered = owner
199
- ? filterOwnerPrivileges(branchPrivilegesFiltered, owner)
200
- : branchPrivilegesFiltered;
182
+ ? filterOwnerPrivileges(branchPrivileges, owner)
183
+ : branchPrivileges;
201
184
  const mainByGrantee = groupPrivilegesByGrantee(mainFiltered);
202
185
  const branchByGrantee = groupPrivilegesByGrantee(branchFiltered);
203
186
  // Get all grantees
@@ -214,3 +197,102 @@ export function diffPrivileges(mainPrivileges, branchPrivileges, owner, mainRole
214
197
  }
215
198
  return results;
216
199
  }
200
+ /**
201
+ * Emit privilege changes for object-level privileges (schema, sequence,
202
+ * procedure, etc.).
203
+ *
204
+ * For each grantee in `privilegeResults` the function groups grants and revokes
205
+ * by the `grantable` flag and pushes one change per group. Revoke-grant-option
206
+ * entries produce a single change carrying `privilegeNames`.
207
+ *
208
+ * `grantTarget` is the *branch* object (the desired state) while `revokeTarget`
209
+ * is the *main* object (the current state), so that GRANTs reference the
210
+ * newly-created/altered object and REVOKEs reference the existing one.
211
+ */
212
+ export function emitObjectPrivilegeChanges(privilegeResults, grantTarget, revokeTarget, objectKey, factories, version) {
213
+ const changes = [];
214
+ for (const [grantee, result] of privilegeResults) {
215
+ for (const [, revokes] of groupPrivilegesByGrantable(result.revokes)) {
216
+ changes.push(new factories.Revoke({
217
+ [objectKey]: revokeTarget,
218
+ privileges: revokes,
219
+ grantee,
220
+ version,
221
+ }));
222
+ }
223
+ if (result.revokeGrantOption.length > 0) {
224
+ changes.push(new factories.RevokeGrantOption({
225
+ [objectKey]: revokeTarget,
226
+ privilegeNames: result.revokeGrantOption,
227
+ grantee,
228
+ version,
229
+ }));
230
+ }
231
+ for (const [, grants] of groupPrivilegesByGrantable(result.grants)) {
232
+ changes.push(new factories.Grant({
233
+ [objectKey]: grantTarget,
234
+ privileges: grants,
235
+ grantee,
236
+ version,
237
+ }));
238
+ }
239
+ }
240
+ return changes;
241
+ }
242
+ /**
243
+ * Emit privilege changes for column-level privileges (table, view,
244
+ * materialized view).
245
+ *
246
+ * Like {@link emitObjectPrivilegeChanges} but groups by column set (via
247
+ * `groupPrivilegesByColumns`) instead of only by grantable. For
248
+ * revoke-grant-option the column sets come from `sourcePrivileges` so that
249
+ * `REVOKE GRANT OPTION FOR` is emitted per column set that originally carried
250
+ * the privilege.
251
+ */
252
+ export function emitColumnPrivilegeChanges(privilegeResults, grantTarget, revokeTarget, objectKey, factories, sourcePrivileges, version) {
253
+ const changes = [];
254
+ for (const [grantee, result] of privilegeResults) {
255
+ for (const [, group] of groupPrivilegesByColumns(result.revokes)) {
256
+ const allPrivileges = new Set();
257
+ for (const [, privSet] of group.byGrant) {
258
+ for (const priv of privSet) {
259
+ allPrivileges.add(priv);
260
+ }
261
+ }
262
+ changes.push(new factories.Revoke({
263
+ [objectKey]: revokeTarget,
264
+ privileges: [...allPrivileges].map((p) => ({
265
+ privilege: p,
266
+ grantable: false,
267
+ })),
268
+ grantee,
269
+ columns: group.columns,
270
+ version,
271
+ }));
272
+ }
273
+ if (result.revokeGrantOption.length > 0) {
274
+ const sourcePrivsForGrantee = sourcePrivileges.filter((p) => p.grantee === grantee);
275
+ for (const [, group] of groupPrivilegesByColumns(sourcePrivsForGrantee.filter((p) => result.revokeGrantOption.includes(p.privilege)))) {
276
+ changes.push(new factories.RevokeGrantOption({
277
+ [objectKey]: revokeTarget,
278
+ privilegeNames: result.revokeGrantOption,
279
+ grantee,
280
+ columns: group.columns,
281
+ version,
282
+ }));
283
+ }
284
+ }
285
+ for (const [, group] of groupPrivilegesByColumns(result.grants)) {
286
+ for (const [grantable, privSet] of group.byGrant) {
287
+ changes.push(new factories.Grant({
288
+ [objectKey]: grantTarget,
289
+ privileges: [...privSet].map((p) => ({ privilege: p, grantable })),
290
+ grantee,
291
+ columns: group.columns,
292
+ version,
293
+ }));
294
+ }
295
+ }
296
+ }
297
+ return changes;
298
+ }
@@ -24,4 +24,5 @@ export declare function normalizePrivileges(privileges: PrivilegeProps[]): {
24
24
  grantee: string;
25
25
  privilege: string;
26
26
  grantable: boolean;
27
+ columns: string[] | null | undefined;
27
28
  }[];
@@ -149,7 +149,7 @@ export function getObjectKindPrefix(objectKind) {
149
149
  case "TYPE":
150
150
  return "ON TYPE";
151
151
  case "FOREIGN TABLE":
152
- return "ON FOREIGN TABLE";
152
+ return "ON TABLE";
153
153
  default:
154
154
  return "ON";
155
155
  }
@@ -160,10 +160,17 @@ export function normalizePrivileges(privileges) {
160
160
  grantee: privilege.grantee,
161
161
  privilege: privilege.privilege,
162
162
  grantable: privilege.grantable,
163
+ columns: privilege.columns
164
+ ? [...privilege.columns].sort()
165
+ : privilege.columns,
163
166
  }))
164
167
  .sort((a, b) => {
165
168
  if (a.grantee !== b.grantee)
166
169
  return a.grantee.localeCompare(b.grantee);
167
- return a.privilege.localeCompare(b.privilege);
170
+ if (a.privilege !== b.privilege)
171
+ return a.privilege.localeCompare(b.privilege);
172
+ const colA = a.columns?.join(",") ?? "";
173
+ const colB = b.columns?.join(",") ?? "";
174
+ return colA.localeCompare(colB);
168
175
  });
169
176
  }
@@ -1,3 +1,4 @@
1
+ import type { ObjectDiffContext } from "../diff-context.ts";
1
2
  import type { CollationChange } from "./changes/collation.types.ts";
2
3
  import type { Collation } from "./collation.model.ts";
3
4
  /**
@@ -8,6 +9,4 @@ import type { Collation } from "./collation.model.ts";
8
9
  * @param branch - The collations in the branch catalog.
9
10
  * @returns A list of changes to apply to main to make it match branch.
10
11
  */
11
- export declare function diffCollations(ctx: {
12
- currentUser: string;
13
- }, main: Record<string, Collation>, branch: Record<string, Collation>): CollationChange[];
12
+ export declare function diffCollations(ctx: Pick<ObjectDiffContext, "currentUser">, main: Record<string, Collation>, branch: Record<string, Collation>): CollationChange[];
@@ -0,0 +1,15 @@
1
+ import type { DefaultPrivilegeState } from "./base.default-privileges.ts";
2
+ import type { Role } from "./role/role.model.ts";
3
+ /**
4
+ * Unified context built by `diffCatalogs` and passed to per-object diff
5
+ * functions. Each diff declares only the keys it reads via
6
+ * `Pick<ObjectDiffContext, …>`, so every signature documents its actual
7
+ * requirements. The full object is always assignable to every narrower Pick.
8
+ */
9
+ export interface ObjectDiffContext {
10
+ version: number;
11
+ currentUser: string;
12
+ defaultPrivilegeState: DefaultPrivilegeState;
13
+ mainRoles: Record<string, Role>;
14
+ skipDefaultPrivilegeSubtraction?: boolean;
15
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,4 @@
1
- import { isUserDefinedTypeSchema, stableId } from "../../utils.js";
1
+ import { isUserDefinedTypeSchema, parseTypeString, stableId, } from "../../utils.js";
2
2
  import { CreateDomainChange } from "./domain.base.js";
3
3
  /**
4
4
  * Create a domain.
@@ -58,7 +58,9 @@ export class CreateDomain extends CreateDomainChange {
58
58
  const domainName = `${this.domain.schema}.${this.domain.name}`;
59
59
  // Base type (use formatted string for type+typmod and add schema if needed)
60
60
  let baseType = this.domain.base_type_str;
61
- if (this.domain.base_type_schema &&
61
+ const alreadyQualified = parseTypeString(baseType);
62
+ if (!alreadyQualified &&
63
+ this.domain.base_type_schema &&
62
64
  this.domain.base_type_schema !== "pg_catalog") {
63
65
  baseType = `${this.domain.base_type_schema}.${baseType}`;
64
66
  }
@@ -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 { DomainChange } from "./changes/domain.types.ts";
4
3
  import type { Domain } from "./domain.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import type { Domain } from "./domain.model.ts";
10
9
  * @param branch - The domains 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 diffDomains(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, Domain>, branch: Record<string, Domain>): DomainChange[];
12
+ export declare function diffDomains(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Domain>, branch: Record<string, Domain>): DomainChange[];