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

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 (664) 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 +16 -3
  27. package/dist/core/catalog.model.js +132 -30
  28. package/dist/core/catalog.snapshot.d.ts +66 -0
  29. package/dist/core/catalog.snapshot.js +206 -0
  30. package/dist/core/context.d.ts +3 -3
  31. package/dist/core/context.js +7 -10
  32. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  33. package/dist/core/declarative-apply/discover-sql.js +86 -0
  34. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  35. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  36. package/dist/core/declarative-apply/index.d.ts +49 -0
  37. package/dist/core/declarative-apply/index.js +134 -0
  38. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  39. package/dist/core/declarative-apply/round-apply.js +378 -0
  40. package/dist/core/depend.d.ts +2 -2
  41. package/dist/core/depend.js +8 -7
  42. package/dist/core/export/file-mapper.d.ts +71 -0
  43. package/dist/core/export/file-mapper.js +474 -0
  44. package/dist/core/export/grouper.d.ts +13 -0
  45. package/dist/core/export/grouper.js +76 -0
  46. package/dist/core/export/index.d.ts +45 -0
  47. package/dist/core/export/index.js +63 -0
  48. package/dist/core/export/types.d.ts +84 -0
  49. package/dist/core/export/types.js +25 -0
  50. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  51. package/dist/core/integrations/filter/dsl.d.ts +38 -1
  52. package/dist/core/integrations/filter/dsl.js +20 -2
  53. package/dist/core/integrations/filter/extractors.js +42 -0
  54. package/dist/core/integrations/integration-dsl.d.ts +10 -0
  55. package/dist/core/integrations/supabase.d.ts +8 -0
  56. package/dist/core/integrations/supabase.js +11 -0
  57. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  58. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  59. package/dist/core/objects/aggregate/aggregate.model.d.ts +10 -10
  60. package/dist/core/objects/aggregate/aggregate.model.js +8 -10
  61. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  62. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  63. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  64. package/dist/core/objects/base.privilege-diff.js +104 -22
  65. package/dist/core/objects/base.privilege.d.ts +1 -0
  66. package/dist/core/objects/base.privilege.js +9 -2
  67. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  68. package/dist/core/objects/collation/collation.model.d.ts +2 -2
  69. package/dist/core/objects/collation/collation.model.js +29 -28
  70. package/dist/core/objects/diff-context.d.ts +15 -0
  71. package/dist/core/objects/diff-context.js +1 -0
  72. package/dist/core/objects/domain/changes/domain.create.js +4 -2
  73. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  74. package/dist/core/objects/domain/domain.diff.js +16 -77
  75. package/dist/core/objects/domain/domain.model.d.ts +2 -2
  76. package/dist/core/objects/domain/domain.model.js +9 -11
  77. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  78. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +2 -2
  79. package/dist/core/objects/event-trigger/event-trigger.model.js +7 -9
  80. package/dist/core/objects/extension/extension.model.d.ts +2 -2
  81. package/dist/core/objects/extension/extension.model.js +8 -10
  82. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  83. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  84. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +2 -2
  85. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +22 -24
  86. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  87. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  88. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +2 -2
  89. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +21 -23
  90. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  91. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  92. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +2 -2
  93. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +20 -22
  94. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +2 -2
  95. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +20 -22
  96. package/dist/core/objects/index/index.model.d.ts +4 -4
  97. package/dist/core/objects/index/index.model.js +9 -11
  98. package/dist/core/objects/language/language.diff.d.ts +2 -5
  99. package/dist/core/objects/language/language.diff.js +7 -39
  100. package/dist/core/objects/language/language.model.js +5 -7
  101. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  102. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  103. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +5 -5
  104. package/dist/core/objects/materialized-view/materialized-view.model.js +9 -11
  105. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  106. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  107. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  108. package/dist/core/objects/procedure/procedure.model.d.ts +11 -11
  109. package/dist/core/objects/procedure/procedure.model.js +9 -11
  110. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  111. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  112. package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
  113. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  114. package/dist/core/objects/publication/publication.diff.js +8 -13
  115. package/dist/core/objects/publication/publication.model.d.ts +2 -2
  116. package/dist/core/objects/publication/publication.model.js +7 -9
  117. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  118. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +4 -4
  119. package/dist/core/objects/rls-policy/rls-policy.model.js +8 -10
  120. package/dist/core/objects/role/role.diff.js +22 -1
  121. package/dist/core/objects/role/role.model.d.ts +6 -5
  122. package/dist/core/objects/role/role.model.js +146 -40
  123. package/dist/core/objects/rule/rule.model.d.ts +3 -3
  124. package/dist/core/objects/rule/rule.model.js +7 -9
  125. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  126. package/dist/core/objects/schema/schema.diff.js +16 -77
  127. package/dist/core/objects/schema/schema.model.d.ts +2 -2
  128. package/dist/core/objects/schema/schema.model.js +9 -11
  129. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  130. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  131. package/dist/core/objects/sequence/sequence.model.d.ts +2 -2
  132. package/dist/core/objects/sequence/sequence.model.js +9 -11
  133. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  134. package/dist/core/objects/subscription/subscription.model.d.ts +2 -2
  135. package/dist/core/objects/subscription/subscription.model.js +25 -20
  136. package/dist/core/objects/table/changes/table.create.js +3 -0
  137. package/dist/core/objects/table/table.diff.d.ts +2 -8
  138. package/dist/core/objects/table/table.diff.js +26 -157
  139. package/dist/core/objects/table/table.model.d.ts +27 -24
  140. package/dist/core/objects/table/table.model.js +12 -11
  141. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  142. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  143. package/dist/core/objects/trigger/trigger.model.d.ts +11 -2
  144. package/dist/core/objects/trigger/trigger.model.js +22 -10
  145. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  146. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  147. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +5 -5
  148. package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
  149. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  150. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  151. package/dist/core/objects/type/enum/enum.model.d.ts +2 -2
  152. package/dist/core/objects/type/enum/enum.model.js +23 -25
  153. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  154. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  155. package/dist/core/objects/type/range/range.diff.js +16 -77
  156. package/dist/core/objects/type/range/range.model.d.ts +2 -2
  157. package/dist/core/objects/type/range/range.model.js +8 -10
  158. package/dist/core/objects/view/view.diff.d.ts +2 -8
  159. package/dist/core/objects/view/view.diff.js +16 -158
  160. package/dist/core/objects/view/view.model.d.ts +20 -6
  161. package/dist/core/objects/view/view.model.js +11 -23
  162. package/dist/core/plan/apply.d.ts +2 -2
  163. package/dist/core/plan/apply.js +33 -16
  164. package/dist/core/plan/create.d.ts +20 -7
  165. package/dist/core/plan/create.js +153 -112
  166. package/dist/core/plan/serialize.js +16 -4
  167. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  168. package/dist/core/plan/sql-format/constants.js +11 -0
  169. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  170. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  171. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  172. package/dist/core/plan/sql-format/format-utils.js +274 -0
  173. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  174. package/dist/core/plan/sql-format/formatters.js +737 -0
  175. package/dist/core/plan/sql-format/index.d.ts +2 -0
  176. package/dist/core/plan/sql-format/index.js +98 -0
  177. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  178. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  179. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  180. package/dist/core/plan/sql-format/protect.js +269 -0
  181. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  182. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  183. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  184. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  185. package/dist/core/plan/sql-format/types.d.ts +28 -0
  186. package/dist/core/plan/sql-format/types.js +1 -0
  187. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  188. package/dist/core/plan/sql-format/wrap.js +165 -0
  189. package/dist/core/plan/sql-format.d.ts +2 -0
  190. package/dist/core/plan/sql-format.js +1 -0
  191. package/dist/core/plan/ssl-config.d.ts +32 -0
  192. package/dist/core/plan/ssl-config.js +115 -0
  193. package/dist/core/plan/statements.d.ts +2 -1
  194. package/dist/core/plan/statements.js +6 -2
  195. package/dist/core/plan/types.d.ts +6 -0
  196. package/dist/core/postgres-config.d.ts +47 -3
  197. package/dist/core/postgres-config.js +225 -39
  198. package/dist/core/sort/graph-builder.js +10 -0
  199. package/dist/core/sort/logical-sort.js +31 -23
  200. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  201. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  202. package/dist/index.d.ts +9 -0
  203. package/dist/index.js +9 -1
  204. package/package.json +56 -22
  205. package/src/cli/app.ts +52 -0
  206. package/src/cli/bin/cli.ts +15 -0
  207. package/src/cli/commands/apply.ts +101 -0
  208. package/src/cli/commands/catalog-export.ts +78 -0
  209. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  210. package/src/cli/commands/declarative-apply.ts +380 -0
  211. package/src/cli/commands/declarative-export.ts +330 -0
  212. package/src/cli/commands/plan.ts +216 -0
  213. package/src/cli/commands/sync.ts +185 -0
  214. package/src/cli/exit-code.test.ts +19 -0
  215. package/src/cli/exit-code.ts +7 -0
  216. package/src/cli/formatters/index.ts +5 -0
  217. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  218. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  219. package/src/cli/formatters/tree/tree.ts +238 -0
  220. package/src/cli/utils/apply-display.test.ts +348 -0
  221. package/src/cli/utils/apply-display.ts +238 -0
  222. package/src/cli/utils/export-display.test.ts +103 -0
  223. package/src/cli/utils/export-display.ts +275 -0
  224. package/src/cli/utils/integrations.test.ts +44 -0
  225. package/src/cli/utils/integrations.ts +42 -0
  226. package/src/cli/utils/resolve-input.test.ts +38 -0
  227. package/src/cli/utils/resolve-input.ts +17 -0
  228. package/src/cli/utils.ts +231 -0
  229. package/src/core/catalog-export/index.ts +20 -0
  230. package/src/core/catalog.diff.ts +247 -0
  231. package/src/core/catalog.model.test.ts +122 -0
  232. package/src/core/catalog.model.ts +510 -0
  233. package/src/core/catalog.snapshot.test.ts +477 -0
  234. package/src/core/catalog.snapshot.ts +289 -0
  235. package/src/core/change.types.ts +44 -0
  236. package/src/core/context.ts +26 -0
  237. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  238. package/src/core/declarative-apply/discover-sql.ts +107 -0
  239. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  240. package/src/core/declarative-apply/index.test.ts +67 -0
  241. package/src/core/declarative-apply/index.ts +205 -0
  242. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  243. package/src/core/declarative-apply/round-apply.ts +562 -0
  244. package/src/core/depend.ts +1870 -0
  245. package/src/core/expand-replace-dependencies.test.ts +70 -0
  246. package/src/core/expand-replace-dependencies.ts +380 -0
  247. package/src/core/export/file-mapper.test.ts +816 -0
  248. package/src/core/export/file-mapper.ts +574 -0
  249. package/src/core/export/grouper.ts +108 -0
  250. package/src/core/export/index.ts +129 -0
  251. package/src/core/export/types.ts +104 -0
  252. package/src/core/fingerprint.ts +204 -0
  253. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  254. package/src/core/integrations/filter/dsl.test.ts +211 -0
  255. package/src/core/integrations/filter/dsl.ts +266 -0
  256. package/src/core/integrations/filter/extractors.test.ts +244 -0
  257. package/src/core/integrations/filter/extractors.ts +187 -0
  258. package/src/core/integrations/filter/filter.types.ts +3 -0
  259. package/src/core/integrations/integration-dsl.ts +34 -0
  260. package/src/core/integrations/integration.types.ts +7 -0
  261. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  262. package/src/core/integrations/serialize/dsl.ts +77 -0
  263. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  264. package/src/core/integrations/supabase.ts +130 -0
  265. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  266. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  267. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  268. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  269. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  270. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  271. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  272. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  273. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  274. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  275. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  276. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  277. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  278. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  279. package/src/core/objects/aggregate/changes/aggregate.types.ts +12 -0
  280. package/src/core/objects/base.change.ts +62 -0
  281. package/src/core/objects/base.default-privileges.ts +204 -0
  282. package/src/core/objects/base.diff.ts +20 -0
  283. package/src/core/objects/base.model.ts +82 -0
  284. package/src/core/objects/base.privilege-diff.ts +447 -0
  285. package/src/core/objects/base.privilege.ts +191 -0
  286. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  287. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  288. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  289. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  290. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  291. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  292. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  293. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  294. package/src/core/objects/collation/changes/collation.types.ts +10 -0
  295. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  296. package/src/core/objects/collation/collation.diff.ts +127 -0
  297. package/src/core/objects/collation/collation.model.ts +224 -0
  298. package/src/core/objects/diff-context.ts +16 -0
  299. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  300. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  301. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  302. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  303. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  304. package/src/core/objects/domain/changes/domain.create.ts +124 -0
  305. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  306. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  307. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  308. package/src/core/objects/domain/changes/domain.types.ts +12 -0
  309. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  310. package/src/core/objects/domain/domain.diff.ts +295 -0
  311. package/src/core/objects/domain/domain.model.ts +190 -0
  312. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  313. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  314. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  315. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  316. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  317. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  318. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  319. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  320. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +10 -0
  321. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  322. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  323. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  324. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  325. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  326. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  327. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  328. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  329. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  330. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  331. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  332. package/src/core/objects/extension/changes/extension.types.ts +10 -0
  333. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  334. package/src/core/objects/extension/extension.diff.ts +90 -0
  335. package/src/core/objects/extension/extension.model.test.ts +98 -0
  336. package/src/core/objects/extension/extension.model.ts +280 -0
  337. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  338. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  339. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  340. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  341. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  342. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  343. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  344. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  345. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  346. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +12 -0
  347. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  348. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  349. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  350. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +10 -0
  351. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  352. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  353. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  354. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  355. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  356. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  357. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  358. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  359. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  360. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +12 -0
  361. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  362. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  363. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  364. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  365. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  366. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  367. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  368. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  369. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  370. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  371. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  372. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  373. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +12 -0
  374. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  375. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  376. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  377. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  378. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  379. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  380. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  381. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  382. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  383. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  384. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +8 -0
  385. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  386. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  387. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  388. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  389. package/src/core/objects/index/changes/index.alter.ts +144 -0
  390. package/src/core/objects/index/changes/index.base.ts +20 -0
  391. package/src/core/objects/index/changes/index.comment.ts +63 -0
  392. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  393. package/src/core/objects/index/changes/index.create.ts +68 -0
  394. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  395. package/src/core/objects/index/changes/index.drop.ts +34 -0
  396. package/src/core/objects/index/changes/index.types.ts +6 -0
  397. package/src/core/objects/index/changes/utils.ts +16 -0
  398. package/src/core/objects/index/index.diff.test.ts +153 -0
  399. package/src/core/objects/index/index.diff.ts +243 -0
  400. package/src/core/objects/index/index.model.ts +370 -0
  401. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  402. package/src/core/objects/language/changes/language.alter.ts +53 -0
  403. package/src/core/objects/language/changes/language.base.ts +20 -0
  404. package/src/core/objects/language/changes/language.comment.ts +58 -0
  405. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  406. package/src/core/objects/language/changes/language.create.ts +104 -0
  407. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  408. package/src/core/objects/language/changes/language.drop.ts +39 -0
  409. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  410. package/src/core/objects/language/changes/language.types.ts +12 -0
  411. package/src/core/objects/language/language.diff.test.ts +135 -0
  412. package/src/core/objects/language/language.diff.ts +144 -0
  413. package/src/core/objects/language/language.model.ts +150 -0
  414. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  415. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  416. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  417. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  418. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  419. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  420. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  421. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  422. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  423. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +12 -0
  424. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  425. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  426. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  427. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  428. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  429. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  430. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  431. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  432. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  433. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  434. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  435. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  436. package/src/core/objects/procedure/changes/procedure.types.ts +12 -0
  437. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  438. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  439. package/src/core/objects/procedure/procedure.model.ts +264 -0
  440. package/src/core/objects/procedure/utils.ts +58 -0
  441. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  442. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  443. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  444. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  445. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  446. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  447. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  448. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  449. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  450. package/src/core/objects/publication/changes/publication.types.ts +24 -0
  451. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  452. package/src/core/objects/publication/publication.diff.ts +247 -0
  453. package/src/core/objects/publication/publication.model.ts +206 -0
  454. package/src/core/objects/publication/utils.ts +55 -0
  455. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  456. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  457. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  458. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  459. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  460. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  461. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  462. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  463. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +10 -0
  464. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  465. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  466. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  467. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  468. package/src/core/objects/role/changes/role.alter.ts +110 -0
  469. package/src/core/objects/role/changes/role.base.ts +24 -0
  470. package/src/core/objects/role/changes/role.comment.ts +55 -0
  471. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  472. package/src/core/objects/role/changes/role.create.ts +102 -0
  473. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  474. package/src/core/objects/role/changes/role.drop.ts +34 -0
  475. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  476. package/src/core/objects/role/changes/role.types.ts +12 -0
  477. package/src/core/objects/role/role.diff.test.ts +279 -0
  478. package/src/core/objects/role/role.diff.ts +499 -0
  479. package/src/core/objects/role/role.model.ts +452 -0
  480. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  481. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  482. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  483. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  484. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  485. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  486. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  487. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  488. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  489. package/src/core/objects/rule/changes/rule.types.ts +12 -0
  490. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  491. package/src/core/objects/rule/rule.diff.ts +79 -0
  492. package/src/core/objects/rule/rule.model.ts +173 -0
  493. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  494. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  495. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  496. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  497. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  498. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  499. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  500. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  501. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  502. package/src/core/objects/schema/changes/schema.types.ts +12 -0
  503. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  504. package/src/core/objects/schema/schema.diff.ts +146 -0
  505. package/src/core/objects/schema/schema.model.ts +107 -0
  506. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  507. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  508. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  509. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  510. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  511. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  512. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  513. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  514. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  515. package/src/core/objects/sequence/changes/sequence.types.ts +12 -0
  516. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  517. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  518. package/src/core/objects/sequence/sequence.model.ts +185 -0
  519. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  520. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  521. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  522. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  523. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  524. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  525. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  526. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  527. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  528. package/src/core/objects/subscription/changes/subscription.types.ts +22 -0
  529. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  530. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  531. package/src/core/objects/subscription/subscription.model.ts +190 -0
  532. package/src/core/objects/subscription/utils.ts +156 -0
  533. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  534. package/src/core/objects/table/changes/table.alter.ts +806 -0
  535. package/src/core/objects/table/changes/table.base.ts +20 -0
  536. package/src/core/objects/table/changes/table.comment.ts +266 -0
  537. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  538. package/src/core/objects/table/changes/table.create.ts +192 -0
  539. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  540. package/src/core/objects/table/changes/table.drop.ts +45 -0
  541. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  542. package/src/core/objects/table/changes/table.types.ts +12 -0
  543. package/src/core/objects/table/table.diff.test.ts +868 -0
  544. package/src/core/objects/table/table.diff.ts +817 -0
  545. package/src/core/objects/table/table.model.ts +460 -0
  546. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  547. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  548. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  549. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  550. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  551. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  552. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  553. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  554. package/src/core/objects/trigger/changes/trigger.types.ts +10 -0
  555. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  556. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  557. package/src/core/objects/trigger/trigger.model.ts +264 -0
  558. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  559. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  560. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  561. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  562. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  563. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  564. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  565. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  566. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  567. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +12 -0
  568. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  569. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  570. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  571. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  572. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  573. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  574. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  575. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  576. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  577. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  578. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  579. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  580. package/src/core/objects/type/enum/changes/enum.types.ts +12 -0
  581. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  582. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  583. package/src/core/objects/type/enum/enum.model.ts +194 -0
  584. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  585. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  586. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  587. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  588. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  589. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  590. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  591. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  592. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  593. package/src/core/objects/type/range/changes/range.types.ts +12 -0
  594. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  595. package/src/core/objects/type/range/range.diff.ts +197 -0
  596. package/src/core/objects/type/range/range.model.ts +187 -0
  597. package/src/core/objects/type/type.types.ts +5 -0
  598. package/src/core/objects/utils.ts +171 -0
  599. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  600. package/src/core/objects/view/changes/view.alter.ts +112 -0
  601. package/src/core/objects/view/changes/view.base.ts +20 -0
  602. package/src/core/objects/view/changes/view.comment.ts +59 -0
  603. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  604. package/src/core/objects/view/changes/view.create.ts +73 -0
  605. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  606. package/src/core/objects/view/changes/view.drop.ts +40 -0
  607. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  608. package/src/core/objects/view/changes/view.types.ts +12 -0
  609. package/src/core/objects/view/view.diff.test.ts +173 -0
  610. package/src/core/objects/view/view.diff.ts +215 -0
  611. package/src/core/objects/view/view.model.ts +262 -0
  612. package/src/core/plan/apply.ts +172 -0
  613. package/src/core/plan/create.ts +384 -0
  614. package/src/core/plan/hierarchy.ts +574 -0
  615. package/src/core/plan/index.ts +29 -0
  616. package/src/core/plan/io.ts +20 -0
  617. package/src/core/plan/risk.ts +48 -0
  618. package/src/core/plan/serialize.test.ts +317 -0
  619. package/src/core/plan/serialize.ts +209 -0
  620. package/src/core/plan/sql-format/constants.ts +13 -0
  621. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  622. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  623. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  624. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  625. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  626. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  627. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  628. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  629. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  630. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  631. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  632. package/src/core/plan/sql-format/format-utils.ts +391 -0
  633. package/src/core/plan/sql-format/formatters.ts +921 -0
  634. package/src/core/plan/sql-format/index.ts +149 -0
  635. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  636. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  637. package/src/core/plan/sql-format/protect.test.ts +127 -0
  638. package/src/core/plan/sql-format/protect.ts +337 -0
  639. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  640. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  641. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  642. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  643. package/src/core/plan/sql-format/types.ts +31 -0
  644. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  645. package/src/core/plan/sql-format/wrap.ts +196 -0
  646. package/src/core/plan/sql-format.ts +2 -0
  647. package/src/core/plan/ssl-config.ts +172 -0
  648. package/src/core/plan/statements.ts +22 -0
  649. package/src/core/plan/types.ts +171 -0
  650. package/src/core/postgres-config.ts +293 -0
  651. package/src/core/sort/custom-constraints.ts +161 -0
  652. package/src/core/sort/debug-visualization.ts +239 -0
  653. package/src/core/sort/dependency-filter.ts +224 -0
  654. package/src/core/sort/graph-builder.ts +235 -0
  655. package/src/core/sort/graph-utils.ts +51 -0
  656. package/src/core/sort/logical-sort.test.ts +371 -0
  657. package/src/core/sort/logical-sort.ts +597 -0
  658. package/src/core/sort/sort-changes.ts +234 -0
  659. package/src/core/sort/topological-sort.test.ts +275 -0
  660. package/src/core/sort/topological-sort.ts +184 -0
  661. package/src/core/sort/types.ts +112 -0
  662. package/src/core/sort/utils.ts +69 -0
  663. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  664. package/src/index.ts +41 -0
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel } from "../base.model.js";
3
4
  import { privilegePropsSchema, } from "../base.privilege-diff.js";
@@ -71,10 +72,8 @@ export class Language extends BasePgModel {
71
72
  };
72
73
  }
73
74
  }
74
- async function _extractLanguages(sql) {
75
- const languageRows = await sql.begin(async (sql) => {
76
- await sql `set search_path = ''`;
77
- return sql `
75
+ async function _extractLanguages(pool) {
76
+ const { rows: languageRows } = await pool.query(sql `
78
77
  with extension_oids as (
79
78
  select
80
79
  objid
@@ -112,9 +111,8 @@ async function _extractLanguages(sql) {
112
111
  -- <EXCLUDE_INTERNAL and default>
113
112
  where lan.lanname not in ('internal', 'c')
114
113
  order by
115
- lan.lanname;
116
- `;
117
- });
114
+ lan.lanname
115
+ `);
118
116
  // Process rows to handle "-" as null values
119
117
  const processedRows = languageRows.map((row) => ({
120
118
  ...row,
@@ -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 { MaterializedViewChange } from "./changes/materialized-view.types.ts";
4
3
  import type { MaterializedView } from "./materialized-view.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import type { MaterializedView } from "./materialized-view.model.ts";
10
9
  * @param branch - The materialized views 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 diffMaterializedViews(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, MaterializedView>, branch: Record<string, MaterializedView>): MaterializedViewChange[];
12
+ export declare function diffMaterializedViews(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, MaterializedView>, branch: Record<string, MaterializedView>): MaterializedViewChange[];
@@ -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, hasNonAlterableChanges } from "../utils.js";
4
4
  import { AlterMaterializedViewChangeOwner, AlterMaterializedViewSetStorageParams, } from "./changes/materialized-view.alter.js";
5
5
  import { CreateCommentOnMaterializedView, CreateCommentOnMaterializedViewColumn, DropCommentOnMaterializedView, DropCommentOnMaterializedViewColumn, } from "./changes/materialized-view.comment.js";
@@ -54,87 +54,18 @@ export function diffMaterializedViews(ctx, main, branch) {
54
54
  // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
55
55
  // needed to reach the final desired state.
56
56
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "materialized_view", mv.schema ?? "");
57
+ const creatorFilteredDefaults = mv.owner !== ctx.currentUser
58
+ ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
59
+ : effectiveDefaults;
57
60
  const desiredPrivileges = mv.privileges;
58
61
  // Filter out owner privileges - owner always has ALL privileges implicitly
59
62
  // and shouldn't be compared. Use the materialized view owner as the reference.
60
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, mv.owner, ctx.mainRoles);
61
- // Generate grant changes
62
- for (const [grantee, result] of privilegeResults) {
63
- if (result.grants.length > 0) {
64
- const grantGroups = groupPrivilegesByColumns(result.grants);
65
- for (const [, group] of grantGroups) {
66
- for (const [grantable, privSet] of group.byGrant) {
67
- const privileges = Array.from(privSet).map((priv) => ({
68
- privilege: priv,
69
- grantable,
70
- }));
71
- changes.push(new GrantMaterializedViewPrivileges({
72
- materializedView: mv,
73
- grantee,
74
- privileges,
75
- columns: group.columns,
76
- version: ctx.version,
77
- }));
78
- }
79
- }
80
- }
81
- // Generate revoke changes
82
- if (result.revokes.length > 0) {
83
- const revokeGroups = groupPrivilegesByColumns(result.revokes);
84
- for (const [, group] of revokeGroups) {
85
- const allPrivileges = new Set();
86
- for (const [, privSet] of group.byGrant) {
87
- for (const priv of privSet) {
88
- allPrivileges.add(priv);
89
- }
90
- }
91
- const privileges = Array.from(allPrivileges).map((priv) => ({
92
- privilege: priv,
93
- grantable: false,
94
- }));
95
- changes.push(new RevokeMaterializedViewPrivileges({
96
- materializedView: mv,
97
- grantee,
98
- privileges,
99
- columns: group.columns,
100
- version: ctx.version,
101
- }));
102
- }
103
- }
104
- // Generate revoke grant option changes
105
- if (result.revokeGrantOption.length > 0) {
106
- const revokeGrantGroups = new Map();
107
- for (const r of result.revokeGrantOption) {
108
- // For revoke grant option, we need to find the columns from the effective defaults
109
- const originalPriv = effectiveDefaults.find((p) => p.grantee === grantee && p.privilege === r);
110
- const key = originalPriv?.columns
111
- ? originalPriv.columns.sort().join(",")
112
- : "";
113
- if (!revokeGrantGroups.has(key)) {
114
- revokeGrantGroups.set(key, {
115
- columns: originalPriv?.columns
116
- ? [...originalPriv.columns]
117
- : undefined,
118
- privileges: new Set(),
119
- });
120
- }
121
- const group = revokeGrantGroups.get(key);
122
- if (!group)
123
- continue;
124
- group.privileges.add(r);
125
- }
126
- for (const [, group] of revokeGrantGroups) {
127
- const privilegeNames = Array.from(group.privileges);
128
- changes.push(new RevokeGrantOptionMaterializedViewPrivileges({
129
- materializedView: mv,
130
- grantee,
131
- privilegeNames,
132
- columns: group.columns,
133
- version: ctx.version,
134
- }));
135
- }
136
- }
137
- }
63
+ const privilegeResults = diffPrivileges(creatorFilteredDefaults, desiredPrivileges, mv.owner);
64
+ changes.push(...emitColumnPrivilegeChanges(privilegeResults, mv, mv, "materializedView", {
65
+ Grant: GrantMaterializedViewPrivileges,
66
+ Revoke: RevokeMaterializedViewPrivileges,
67
+ RevokeGrantOption: RevokeGrantOptionMaterializedViewPrivileges,
68
+ }, effectiveDefaults, ctx.version));
138
69
  }
139
70
  for (const materializedViewId of dropped) {
140
71
  changes.push(new DropMaterializedView({ materializedView: main[materializedViewId] }));
@@ -250,85 +181,12 @@ export function diffMaterializedViews(ctx, main, branch) {
250
181
  // PRIVILEGES (unified object and column privileges)
251
182
  // Filter out owner privileges - owner always has ALL privileges implicitly
252
183
  // and shouldn't be compared. Use branch owner as the reference.
253
- const privilegeResults = diffPrivileges(mainMaterializedView.privileges, branchMaterializedView.privileges, branchMaterializedView.owner, ctx.mainRoles);
254
- for (const [grantee, result] of privilegeResults) {
255
- // Generate grant changes
256
- if (result.grants.length > 0) {
257
- const grantGroups = groupPrivilegesByColumns(result.grants);
258
- for (const [, group] of grantGroups) {
259
- for (const [grantable, privSet] of group.byGrant) {
260
- const privileges = Array.from(privSet).map((priv) => ({
261
- privilege: priv,
262
- grantable,
263
- }));
264
- changes.push(new GrantMaterializedViewPrivileges({
265
- materializedView: branchMaterializedView,
266
- grantee,
267
- privileges,
268
- columns: group.columns,
269
- version: ctx.version,
270
- }));
271
- }
272
- }
273
- }
274
- // Generate revoke changes
275
- if (result.revokes.length > 0) {
276
- const revokeGroups = groupPrivilegesByColumns(result.revokes);
277
- for (const [, group] of revokeGroups) {
278
- // Collapse all grantable groups into a single revoke (grantable: false)
279
- const allPrivileges = new Set();
280
- for (const [, privSet] of group.byGrant) {
281
- for (const priv of privSet) {
282
- allPrivileges.add(priv);
283
- }
284
- }
285
- const privileges = Array.from(allPrivileges).map((priv) => ({
286
- privilege: priv,
287
- grantable: false,
288
- }));
289
- changes.push(new RevokeMaterializedViewPrivileges({
290
- materializedView: mainMaterializedView,
291
- grantee,
292
- privileges,
293
- columns: group.columns,
294
- version: ctx.version,
295
- }));
296
- }
297
- }
298
- // Generate revoke grant option changes
299
- if (result.revokeGrantOption.length > 0) {
300
- const revokeGrantGroups = new Map();
301
- for (const r of result.revokeGrantOption) {
302
- // For revoke grant option, we need to find the columns from the original privilege
303
- const originalPriv = mainMaterializedView.privileges.find((p) => p.grantee === grantee && p.privilege === r);
304
- const key = originalPriv?.columns
305
- ? originalPriv.columns.sort().join(",")
306
- : "";
307
- if (!revokeGrantGroups.has(key)) {
308
- revokeGrantGroups.set(key, {
309
- columns: originalPriv?.columns
310
- ? [...originalPriv.columns]
311
- : undefined,
312
- privileges: new Set(),
313
- });
314
- }
315
- const group = revokeGrantGroups.get(key);
316
- if (!group)
317
- continue;
318
- group.privileges.add(r);
319
- }
320
- for (const [, group] of revokeGrantGroups) {
321
- const privilegeNames = Array.from(group.privileges);
322
- changes.push(new RevokeGrantOptionMaterializedViewPrivileges({
323
- materializedView: mainMaterializedView,
324
- grantee,
325
- privilegeNames,
326
- columns: group.columns,
327
- version: ctx.version,
328
- }));
329
- }
330
- }
331
- }
184
+ const privilegeResults = diffPrivileges(mainMaterializedView.privileges, branchMaterializedView.privileges, branchMaterializedView.owner);
185
+ changes.push(...emitColumnPrivilegeChanges(privilegeResults, branchMaterializedView, mainMaterializedView, "materializedView", {
186
+ Grant: GrantMaterializedViewPrivileges,
187
+ Revoke: RevokeMaterializedViewPrivileges,
188
+ RevokeGrantOption: RevokeGrantOptionMaterializedViewPrivileges,
189
+ }, mainMaterializedView.privileges, ctx.version));
332
190
  }
333
191
  }
334
192
  return changes;
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel, type TableLikeObject } from "../base.model.ts";
4
4
  import { type PrivilegeProps } from "../base.privilege-diff.ts";
@@ -14,10 +14,10 @@ declare const materializedViewPropsSchema: z.ZodObject<{
14
14
  has_subclasses: z.ZodBoolean;
15
15
  is_populated: z.ZodBoolean;
16
16
  replica_identity: z.ZodEnum<{
17
- f: "f";
18
17
  n: "n";
19
18
  i: "i";
20
19
  d: "d";
20
+ f: "f";
21
21
  }>;
22
22
  is_partition: z.ZodBoolean;
23
23
  options: z.ZodNullable<z.ZodArray<z.ZodString>>;
@@ -85,7 +85,7 @@ export declare class MaterializedView extends BasePgModel implements TableLikeOb
85
85
  has_triggers: boolean;
86
86
  has_subclasses: boolean;
87
87
  is_populated: boolean;
88
- replica_identity: "f" | "n" | "i" | "d";
88
+ replica_identity: "n" | "i" | "d" | "f";
89
89
  is_partition: boolean;
90
90
  options: string[] | null;
91
91
  partition_bound: string | null;
@@ -133,7 +133,7 @@ export declare class MaterializedView extends BasePgModel implements TableLikeOb
133
133
  has_triggers: boolean;
134
134
  has_subclasses: boolean;
135
135
  is_populated: boolean;
136
- replica_identity: "f" | "n" | "i" | "d";
136
+ replica_identity: "n" | "i" | "d" | "f";
137
137
  is_partition: boolean;
138
138
  options: string[] | null;
139
139
  partition_bound: string | null;
@@ -148,5 +148,5 @@ export declare class MaterializedView extends BasePgModel implements TableLikeOb
148
148
  };
149
149
  };
150
150
  }
151
- export declare function extractMaterializedViews(sql: Sql): Promise<MaterializedView[]>;
151
+ export declare function extractMaterializedViews(pool: Pool): Promise<MaterializedView[]>;
152
152
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel, columnPropsSchema, } from "../base.model.js";
3
4
  import { privilegePropsSchema, } from "../base.privilege-diff.js";
@@ -113,10 +114,8 @@ export class MaterializedView extends BasePgModel {
113
114
  };
114
115
  }
115
116
  }
116
- export async function extractMaterializedViews(sql) {
117
- return sql.begin(async (sql) => {
118
- await sql `set search_path = ''`;
119
- const mvRows = await sql `
117
+ export async function extractMaterializedViews(pool) {
118
+ const { rows: mvRows } = await pool.query(sql `
120
119
  with extension_oids as (
121
120
  select
122
121
  objid
@@ -194,7 +193,7 @@ select
194
193
  filter (where src.attname is not null) as cols
195
194
  from (
196
195
  -- one row for object ACL + one row per column ACL
197
- select null::name as attname, c.relacl as acl
196
+ select null::name as attname, COALESCE(c.relacl, acldefault('r', c.relowner)) as acl
198
197
  union all
199
198
  select a2.attname, a2.attacl
200
199
  from pg_attribute a2
@@ -219,10 +218,9 @@ where not c.relnamespace::regnamespace::text like any(array['pg\\_%', 'informati
219
218
  group by
220
219
  c.oid, c.relnamespace, c.relname, pg_get_viewdef(c.oid), c.relrowsecurity, c.relforcerowsecurity, c.relhasindex, c.relhasrules, c.relhastriggers, c.relhassubclass, c.relispopulated, c.relreplident, c.relispartition, c.reloptions, pg_get_expr(c.relpartbound, c.oid), c.relowner
221
220
  order by
222
- c.relnamespace::regnamespace, c.relname;
223
- `;
224
- // Validate and parse each row using the Zod schema
225
- const validatedRows = mvRows.map((row) => materializedViewPropsSchema.parse(row));
226
- return validatedRows.map((row) => new MaterializedView(row));
227
- });
221
+ c.relnamespace::regnamespace, c.relname
222
+ `);
223
+ // Validate and parse each row using the Zod schema
224
+ const validatedRows = mvRows.map((row) => materializedViewPropsSchema.parse(row));
225
+ return validatedRows.map((row) => new MaterializedView(row));
228
226
  }
@@ -1,5 +1,10 @@
1
1
  import { formatConfigValue } from "../utils.js";
2
2
  import { AlterProcedureChange } from "./procedure.base.js";
3
+ /** Build schema.name(args) for ALTER statements so overloaded functions are unambiguous. */
4
+ function procedureSignature(procedure) {
5
+ const args = procedure.argument_types?.join(", ") ?? "";
6
+ return `${procedure.schema}.${procedure.name}(${args})`;
7
+ }
3
8
  /**
4
9
  * ALTER FUNCTION/PROCEDURE ... OWNER TO ...
5
10
  */
@@ -20,7 +25,7 @@ export class AlterProcedureChangeOwner extends AlterProcedureChange {
20
25
  return [
21
26
  "ALTER",
22
27
  objectType,
23
- `${this.procedure.schema}.${this.procedure.name}`,
28
+ procedureSignature(this.procedure),
24
29
  "OWNER TO",
25
30
  this.owner,
26
31
  ].join(" ");
@@ -49,7 +54,7 @@ export class AlterProcedureSetSecurity extends AlterProcedureChange {
49
54
  return [
50
55
  "ALTER",
51
56
  objectType,
52
- `${this.procedure.schema}.${this.procedure.name}`,
57
+ procedureSignature(this.procedure),
53
58
  security,
54
59
  ].join(" ");
55
60
  }
@@ -78,7 +83,7 @@ export class AlterProcedureSetConfig extends AlterProcedureChange {
78
83
  const head = [
79
84
  "ALTER",
80
85
  this.procedure.kind === "p" ? "PROCEDURE" : "FUNCTION",
81
- `${this.procedure.schema}.${this.procedure.name}`,
86
+ procedureSignature(this.procedure),
82
87
  ].join(" ");
83
88
  if (this.action === "reset_all")
84
89
  return `${head} RESET ALL`;
@@ -113,7 +118,7 @@ export class AlterProcedureSetVolatility extends AlterProcedureChange {
113
118
  return [
114
119
  "ALTER",
115
120
  objectType,
116
- `${this.procedure.schema}.${this.procedure.name}`,
121
+ procedureSignature(this.procedure),
117
122
  volMap[this.volatility],
118
123
  ].join(" ");
119
124
  }
@@ -139,7 +144,7 @@ export class AlterProcedureSetStrictness extends AlterProcedureChange {
139
144
  return [
140
145
  "ALTER",
141
146
  objectType,
142
- `${this.procedure.schema}.${this.procedure.name}`,
147
+ procedureSignature(this.procedure),
143
148
  strictness,
144
149
  ].join(" ");
145
150
  }
@@ -162,12 +167,7 @@ export class AlterProcedureSetLeakproof extends AlterProcedureChange {
162
167
  serialize() {
163
168
  const objectType = this.procedure.kind === "p" ? "PROCEDURE" : "FUNCTION";
164
169
  const leak = this.leakproof ? "LEAKPROOF" : "NOT LEAKPROOF";
165
- return [
166
- "ALTER",
167
- objectType,
168
- `${this.procedure.schema}.${this.procedure.name}`,
169
- leak,
170
- ].join(" ");
170
+ return ["ALTER", objectType, procedureSignature(this.procedure), leak].join(" ");
171
171
  }
172
172
  }
173
173
  /**
@@ -195,7 +195,7 @@ export class AlterProcedureSetParallel extends AlterProcedureChange {
195
195
  return [
196
196
  "ALTER",
197
197
  objectType,
198
- `${this.procedure.schema}.${this.procedure.name}`,
198
+ procedureSignature(this.procedure),
199
199
  parallelMap[this.parallelSafety],
200
200
  ].join(" ");
201
201
  }
@@ -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 { ProcedureChange } from "./changes/procedure.types.ts";
4
3
  import type { Procedure } from "./procedure.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import type { Procedure } from "./procedure.model.ts";
10
9
  * @param branch - The procedures 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 diffProcedures(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, Procedure>, branch: Record<string, Procedure>): ProcedureChange[];
12
+ export declare function diffProcedures(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, Procedure>, branch: Record<string, Procedure>): ProcedureChange[];
@@ -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 { AlterProcedureChangeOwner, AlterProcedureSetConfig, AlterProcedureSetLeakproof, AlterProcedureSetParallel, AlterProcedureSetSecurity, AlterProcedureSetStrictness, AlterProcedureSetVolatility, } from "./changes/procedure.alter.js";
5
5
  import { CreateCommentOnProcedure, DropCommentOnProcedure, } from "./changes/procedure.comment.js";
@@ -37,6 +37,9 @@ export function diffProcedures(ctx, main, branch) {
37
37
  // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
38
38
  // needed to reach the final desired state.
39
39
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "procedure", proc.schema ?? "");
40
+ const creatorFilteredDefaults = proc.owner !== ctx.currentUser
41
+ ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
42
+ : effectiveDefaults;
40
43
  // Filter out PUBLIC's built-in default EXECUTE privilege (PostgreSQL grants it automatically)
41
44
  // Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
42
45
  // This prevents generating unnecessary "GRANT EXECUTE TO PUBLIC" statements
@@ -44,44 +47,12 @@ export function diffProcedures(ctx, main, branch) {
44
47
  // Filter out owner privileges - owner always has ALL privileges implicitly
45
48
  // and shouldn't be compared. Note: we use the final owner (proc.owner), not the
46
49
  // current user, because ownership change happens before privilege diffing.
47
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, proc.owner, ctx.mainRoles);
48
- // Generate grant changes
49
- for (const [grantee, result] of privilegeResults) {
50
- if (result.grants.length > 0) {
51
- const grantGroups = groupPrivilegesByGrantable(result.grants);
52
- for (const [grantable, list] of grantGroups) {
53
- void grantable;
54
- changes.push(new GrantProcedurePrivileges({
55
- procedure: proc,
56
- grantee,
57
- privileges: list,
58
- version: ctx.version,
59
- }));
60
- }
61
- }
62
- // Generate revoke changes
63
- if (result.revokes.length > 0) {
64
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
65
- for (const [grantable, list] of revokeGroups) {
66
- void grantable;
67
- changes.push(new RevokeProcedurePrivileges({
68
- procedure: proc,
69
- grantee,
70
- privileges: list,
71
- version: ctx.version,
72
- }));
73
- }
74
- }
75
- // Generate revoke grant option changes
76
- if (result.revokeGrantOption.length > 0) {
77
- changes.push(new RevokeGrantOptionProcedurePrivileges({
78
- procedure: proc,
79
- grantee,
80
- privilegeNames: result.revokeGrantOption,
81
- version: ctx.version,
82
- }));
83
- }
84
- }
50
+ const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("procedure", creatorFilteredDefaults), desiredPrivileges, proc.owner);
51
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, proc, proc, "procedure", {
52
+ Grant: GrantProcedurePrivileges,
53
+ Revoke: RevokeProcedurePrivileges,
54
+ RevokeGrantOption: RevokeGrantOptionProcedurePrivileges,
55
+ }, ctx.version));
85
56
  }
86
57
  for (const procedureId of dropped) {
87
58
  changes.push(new DropProcedure({ procedure: main[procedureId] }));
@@ -238,44 +209,12 @@ export function diffProcedures(ctx, main, branch) {
238
209
  const branchPrivilegesFiltered = filterPublicBuiltInDefaults("procedure", branchProcedure.privileges);
239
210
  // Filter out owner privileges - owner always has ALL privileges implicitly
240
211
  // and shouldn't be compared. Use branch owner as the reference.
241
- const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchProcedure.owner, ctx.mainRoles);
242
- for (const [grantee, result] of privilegeResults) {
243
- // Generate grant changes
244
- if (result.grants.length > 0) {
245
- const grantGroups = groupPrivilegesByGrantable(result.grants);
246
- for (const [grantable, list] of grantGroups) {
247
- void grantable;
248
- changes.push(new GrantProcedurePrivileges({
249
- procedure: branchProcedure,
250
- grantee,
251
- privileges: list,
252
- version: ctx.version,
253
- }));
254
- }
255
- }
256
- // Generate revoke changes
257
- if (result.revokes.length > 0) {
258
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
259
- for (const [grantable, list] of revokeGroups) {
260
- void grantable;
261
- changes.push(new RevokeProcedurePrivileges({
262
- procedure: mainProcedure,
263
- grantee,
264
- privileges: list,
265
- version: ctx.version,
266
- }));
267
- }
268
- }
269
- // Generate revoke grant option changes
270
- if (result.revokeGrantOption.length > 0) {
271
- changes.push(new RevokeGrantOptionProcedurePrivileges({
272
- procedure: mainProcedure,
273
- grantee,
274
- privilegeNames: result.revokeGrantOption,
275
- version: ctx.version,
276
- }));
277
- }
278
- }
212
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchProcedure.owner);
213
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchProcedure, mainProcedure, "procedure", {
214
+ Grant: GrantProcedurePrivileges,
215
+ Revoke: RevokeProcedurePrivileges,
216
+ RevokeGrantOption: RevokeGrantOptionProcedurePrivileges,
217
+ }, ctx.version));
279
218
  }
280
219
  }
281
220
  return changes;
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel } from "../base.model.ts";
4
4
  import { type PrivilegeProps } from "../base.privilege-diff.ts";
@@ -6,24 +6,24 @@ declare const procedurePropsSchema: z.ZodObject<{
6
6
  schema: z.ZodString;
7
7
  name: z.ZodString;
8
8
  kind: z.ZodEnum<{
9
- f: "f";
10
- w: "w";
11
9
  a: "a";
10
+ w: "w";
12
11
  p: "p";
12
+ f: "f";
13
13
  }>;
14
14
  return_type: z.ZodString;
15
15
  return_type_schema: z.ZodString;
16
16
  language: z.ZodString;
17
17
  security_definer: z.ZodBoolean;
18
18
  volatility: z.ZodEnum<{
19
- s: "s";
20
19
  i: "i";
20
+ s: "s";
21
21
  v: "v";
22
22
  }>;
23
23
  parallel_safety: z.ZodEnum<{
24
- r: "r";
25
24
  u: "u";
26
25
  s: "s";
26
+ r: "r";
27
27
  }>;
28
28
  execution_cost: z.ZodNumber;
29
29
  result_rows: z.ZodNumber;
@@ -36,8 +36,8 @@ declare const procedurePropsSchema: z.ZodObject<{
36
36
  argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
37
37
  all_argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
38
38
  argument_modes: z.ZodNullable<z.ZodArray<z.ZodEnum<{
39
- o: "o";
40
39
  i: "i";
40
+ o: "o";
41
41
  b: "b";
42
42
  v: "v";
43
43
  t: "t";
@@ -96,13 +96,13 @@ export declare class Procedure extends BasePgModel {
96
96
  name: string;
97
97
  };
98
98
  get dataFields(): {
99
- kind: "f" | "w" | "a" | "p";
99
+ kind: "a" | "w" | "p" | "f";
100
100
  return_type: string;
101
101
  return_type_schema: string;
102
102
  language: string;
103
103
  security_definer: boolean;
104
- volatility: "s" | "i" | "v";
105
- parallel_safety: "r" | "u" | "s";
104
+ volatility: "i" | "s" | "v";
105
+ parallel_safety: "u" | "s" | "r";
106
106
  is_strict: boolean;
107
107
  leakproof: boolean;
108
108
  returns_set: boolean;
@@ -111,7 +111,7 @@ export declare class Procedure extends BasePgModel {
111
111
  argument_names: string[] | null;
112
112
  argument_types: string[] | null;
113
113
  all_argument_types: string[] | null;
114
- argument_modes: ("o" | "i" | "b" | "v" | "t")[] | null;
114
+ argument_modes: ("i" | "o" | "b" | "v" | "t")[] | null;
115
115
  argument_defaults: string | null;
116
116
  source_code: string | null;
117
117
  binary_path: string | null;
@@ -128,5 +128,5 @@ export declare class Procedure extends BasePgModel {
128
128
  }[];
129
129
  };
130
130
  }
131
- export declare function extractProcedures(sql: Sql): Promise<Procedure[]>;
131
+ export declare function extractProcedures(pool: Pool): Promise<Procedure[]>;
132
132
  export {};