@supabase/pg-delta 0.0.0 → 1.0.0-alpha.0

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 (567) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +149 -0
  3. package/dist/cli/app.d.ts +1 -0
  4. package/dist/cli/app.js +26 -0
  5. package/dist/cli/bin/cli.d.ts +2 -0
  6. package/dist/cli/bin/cli.js +7 -0
  7. package/dist/cli/commands/apply.d.ts +5 -0
  8. package/dist/cli/commands/apply.js +85 -0
  9. package/dist/cli/commands/plan.d.ts +5 -0
  10. package/dist/cli/commands/plan.js +137 -0
  11. package/dist/cli/commands/sync.d.ts +5 -0
  12. package/dist/cli/commands/sync.js +141 -0
  13. package/dist/cli/formatters/index.d.ts +4 -0
  14. package/dist/cli/formatters/index.js +4 -0
  15. package/dist/cli/formatters/tree/tree-builder.d.ts +10 -0
  16. package/dist/cli/formatters/tree/tree-builder.js +333 -0
  17. package/dist/cli/formatters/tree/tree-renderer.d.ts +45 -0
  18. package/dist/cli/formatters/tree/tree-renderer.js +303 -0
  19. package/dist/cli/formatters/tree/tree.d.ts +8 -0
  20. package/dist/cli/formatters/tree/tree.js +161 -0
  21. package/dist/cli/utils/integrations.d.ts +13 -0
  22. package/dist/cli/utils/integrations.js +35 -0
  23. package/dist/cli/utils.d.ts +64 -0
  24. package/dist/cli/utils.js +160 -0
  25. package/dist/core/catalog.diff.d.ts +5 -0
  26. package/dist/core/catalog.diff.js +147 -0
  27. package/dist/core/catalog.model.d.ts +93 -0
  28. package/dist/core/catalog.model.js +254 -0
  29. package/dist/core/change.types.d.ts +22 -0
  30. package/dist/core/change.types.js +1 -0
  31. package/dist/core/context.d.ts +11 -0
  32. package/dist/core/context.js +12 -0
  33. package/dist/core/depend.d.ts +31 -0
  34. package/dist/core/depend.js +1833 -0
  35. package/dist/core/expand-replace-dependencies.d.ts +14 -0
  36. package/dist/core/expand-replace-dependencies.js +280 -0
  37. package/dist/core/fingerprint.d.ts +23 -0
  38. package/dist/core/fingerprint.js +174 -0
  39. package/dist/core/index.d.ts +15 -0
  40. package/dist/core/index.js +14 -0
  41. package/dist/core/integrations/filter/dsl.d.ts +97 -0
  42. package/dist/core/integrations/filter/dsl.js +107 -0
  43. package/dist/core/integrations/filter/extractors.d.ts +12 -0
  44. package/dist/core/integrations/filter/extractors.js +136 -0
  45. package/dist/core/integrations/integration-dsl.d.ts +22 -0
  46. package/dist/core/integrations/integration-dsl.js +6 -0
  47. package/dist/core/integrations/integration.types.d.ts +5 -0
  48. package/dist/core/integrations/integration.types.js +1 -0
  49. package/dist/core/integrations/serialize/dsl.d.ts +58 -0
  50. package/dist/core/integrations/serialize/dsl.js +42 -0
  51. package/dist/core/main.d.ts +5 -0
  52. package/dist/core/main.js +44 -0
  53. package/dist/core/objects/aggregate/aggregate.diff.d.ts +10 -0
  54. package/dist/core/objects/aggregate/aggregate.diff.js +186 -0
  55. package/dist/core/objects/aggregate/aggregate.model.d.ts +174 -0
  56. package/dist/core/objects/aggregate/aggregate.model.js +297 -0
  57. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +19 -0
  58. package/dist/core/objects/aggregate/changes/aggregate.alter.js +25 -0
  59. package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +17 -0
  60. package/dist/core/objects/aggregate/changes/aggregate.base.js +13 -0
  61. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +23 -0
  62. package/dist/core/objects/aggregate/changes/aggregate.comment.js +44 -0
  63. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +19 -0
  64. package/dist/core/objects/aggregate/changes/aggregate.create.js +228 -0
  65. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +17 -0
  66. package/dist/core/objects/aggregate/changes/aggregate.drop.js +26 -0
  67. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +62 -0
  68. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +102 -0
  69. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +6 -0
  70. package/dist/core/objects/aggregate/changes/aggregate.types.js +1 -0
  71. package/dist/core/objects/base.change.d.ts +46 -0
  72. package/dist/core/objects/base.change.js +38 -0
  73. package/dist/core/objects/base.default-privileges.d.ts +29 -0
  74. package/dist/core/objects/base.default-privileges.js +167 -0
  75. package/dist/core/objects/base.diff.d.ts +6 -0
  76. package/dist/core/objects/base.diff.js +12 -0
  77. package/dist/core/objects/base.model.d.ts +74 -0
  78. package/dist/core/objects/base.model.js +47 -0
  79. package/dist/core/objects/base.privilege-diff.d.ts +54 -0
  80. package/dist/core/objects/base.privilege-diff.js +216 -0
  81. package/dist/core/objects/base.privilege.d.ts +27 -0
  82. package/dist/core/objects/base.privilege.js +169 -0
  83. package/dist/core/objects/collation/changes/collation.alter.d.ts +45 -0
  84. package/dist/core/objects/collation/changes/collation.alter.js +52 -0
  85. package/dist/core/objects/collation/changes/collation.base.d.ts +17 -0
  86. package/dist/core/objects/collation/changes/collation.base.js +13 -0
  87. package/dist/core/objects/collation/changes/collation.comment.d.ts +26 -0
  88. package/dist/core/objects/collation/changes/collation.comment.js +50 -0
  89. package/dist/core/objects/collation/changes/collation.create.d.ts +32 -0
  90. package/dist/core/objects/collation/changes/collation.create.js +86 -0
  91. package/dist/core/objects/collation/changes/collation.drop.d.ts +22 -0
  92. package/dist/core/objects/collation/changes/collation.drop.js +31 -0
  93. package/dist/core/objects/collation/changes/collation.types.d.ts +5 -0
  94. package/dist/core/objects/collation/changes/collation.types.js +1 -0
  95. package/dist/core/objects/collation/collation.diff.d.ts +13 -0
  96. package/dist/core/objects/collation/collation.diff.js +85 -0
  97. package/dist/core/objects/collation/collation.model.d.ts +67 -0
  98. package/dist/core/objects/collation/collation.model.js +207 -0
  99. package/dist/core/objects/domain/changes/domain.alter.d.ts +143 -0
  100. package/dist/core/objects/domain/changes/domain.alter.js +191 -0
  101. package/dist/core/objects/domain/changes/domain.base.d.ts +17 -0
  102. package/dist/core/objects/domain/changes/domain.base.js +13 -0
  103. package/dist/core/objects/domain/changes/domain.comment.d.ts +25 -0
  104. package/dist/core/objects/domain/changes/domain.comment.js +47 -0
  105. package/dist/core/objects/domain/changes/domain.create.d.ts +30 -0
  106. package/dist/core/objects/domain/changes/domain.create.js +92 -0
  107. package/dist/core/objects/domain/changes/domain.drop.d.ts +22 -0
  108. package/dist/core/objects/domain/changes/domain.drop.js +28 -0
  109. package/dist/core/objects/domain/changes/domain.privilege.d.ts +97 -0
  110. package/dist/core/objects/domain/changes/domain.privilege.js +127 -0
  111. package/dist/core/objects/domain/changes/domain.types.d.ts +6 -0
  112. package/dist/core/objects/domain/changes/domain.types.js +1 -0
  113. package/dist/core/objects/domain/domain.diff.d.ts +18 -0
  114. package/dist/core/objects/domain/domain.diff.js +244 -0
  115. package/dist/core/objects/domain/domain.model.d.ts +103 -0
  116. package/dist/core/objects/domain/domain.model.js +172 -0
  117. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +44 -0
  118. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +51 -0
  119. package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +17 -0
  120. package/dist/core/objects/event-trigger/changes/event-trigger.base.js +13 -0
  121. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +23 -0
  122. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +46 -0
  123. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +25 -0
  124. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +55 -0
  125. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +22 -0
  126. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +28 -0
  127. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +5 -0
  128. package/dist/core/objects/event-trigger/changes/event-trigger.types.js +1 -0
  129. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +13 -0
  130. package/dist/core/objects/event-trigger/event-trigger.diff.js +81 -0
  131. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +45 -0
  132. package/dist/core/objects/event-trigger/event-trigger.model.js +89 -0
  133. package/dist/core/objects/extension/changes/extension.alter.d.ts +44 -0
  134. package/dist/core/objects/extension/changes/extension.alter.js +51 -0
  135. package/dist/core/objects/extension/changes/extension.base.d.ts +17 -0
  136. package/dist/core/objects/extension/changes/extension.base.js +13 -0
  137. package/dist/core/objects/extension/changes/extension.comment.d.ts +26 -0
  138. package/dist/core/objects/extension/changes/extension.comment.js +46 -0
  139. package/dist/core/objects/extension/changes/extension.create.d.ts +25 -0
  140. package/dist/core/objects/extension/changes/extension.create.js +49 -0
  141. package/dist/core/objects/extension/changes/extension.drop.d.ts +22 -0
  142. package/dist/core/objects/extension/changes/extension.drop.js +28 -0
  143. package/dist/core/objects/extension/changes/extension.types.d.ts +5 -0
  144. package/dist/core/objects/extension/changes/extension.types.js +1 -0
  145. package/dist/core/objects/extension/extension.diff.d.ts +10 -0
  146. package/dist/core/objects/extension/extension.diff.js +65 -0
  147. package/dist/core/objects/extension/extension.model.d.ts +52 -0
  148. package/dist/core/objects/extension/extension.model.js +268 -0
  149. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +51 -0
  150. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +61 -0
  151. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.d.ts +17 -0
  152. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.js +13 -0
  153. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +26 -0
  154. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +50 -0
  155. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +25 -0
  156. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +78 -0
  157. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +22 -0
  158. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +28 -0
  159. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +97 -0
  160. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +123 -0
  161. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.d.ts +6 -0
  162. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.js +1 -0
  163. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +18 -0
  164. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +221 -0
  165. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +59 -0
  166. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +128 -0
  167. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.d.ts +5 -0
  168. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.js +1 -0
  169. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +163 -0
  170. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +248 -0
  171. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +17 -0
  172. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.js +13 -0
  173. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +26 -0
  174. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +50 -0
  175. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +25 -0
  176. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +64 -0
  177. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +22 -0
  178. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +31 -0
  179. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +97 -0
  180. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +129 -0
  181. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +6 -0
  182. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.js +1 -0
  183. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +18 -0
  184. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +268 -0
  185. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +117 -0
  186. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +215 -0
  187. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +65 -0
  188. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +84 -0
  189. package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.d.ts +17 -0
  190. package/dist/core/objects/foreign-data-wrapper/server/changes/server.base.js +13 -0
  191. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +26 -0
  192. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +43 -0
  193. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +24 -0
  194. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +62 -0
  195. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +22 -0
  196. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +28 -0
  197. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +97 -0
  198. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +123 -0
  199. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.d.ts +6 -0
  200. package/dist/core/objects/foreign-data-wrapper/server/changes/server.types.js +1 -0
  201. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +18 -0
  202. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +209 -0
  203. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +62 -0
  204. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +118 -0
  205. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +37 -0
  206. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +38 -0
  207. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.d.ts +17 -0
  208. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.js +13 -0
  209. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +24 -0
  210. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +52 -0
  211. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +23 -0
  212. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +34 -0
  213. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.d.ts +4 -0
  214. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.js +1 -0
  215. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.d.ts +10 -0
  216. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.js +77 -0
  217. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +36 -0
  218. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +85 -0
  219. package/dist/core/objects/index/changes/index.alter.d.ts +76 -0
  220. package/dist/core/objects/index/changes/index.alter.js +94 -0
  221. package/dist/core/objects/index/changes/index.base.d.ts +17 -0
  222. package/dist/core/objects/index/changes/index.base.js +13 -0
  223. package/dist/core/objects/index/changes/index.comment.d.ts +26 -0
  224. package/dist/core/objects/index/changes/index.comment.js +50 -0
  225. package/dist/core/objects/index/changes/index.create.d.ts +30 -0
  226. package/dist/core/objects/index/changes/index.create.js +53 -0
  227. package/dist/core/objects/index/changes/index.drop.d.ts +22 -0
  228. package/dist/core/objects/index/changes/index.drop.js +28 -0
  229. package/dist/core/objects/index/changes/index.types.d.ts +5 -0
  230. package/dist/core/objects/index/changes/index.types.js +1 -0
  231. package/dist/core/objects/index/changes/utils.d.ts +3 -0
  232. package/dist/core/objects/index/changes/utils.js +6 -0
  233. package/dist/core/objects/index/index.diff.d.ts +12 -0
  234. package/dist/core/objects/index/index.diff.js +182 -0
  235. package/dist/core/objects/index/index.model.d.ts +150 -0
  236. package/dist/core/objects/index/index.model.js +340 -0
  237. package/dist/core/objects/language/changes/language.alter.d.ts +32 -0
  238. package/dist/core/objects/language/changes/language.alter.js +30 -0
  239. package/dist/core/objects/language/changes/language.base.d.ts +17 -0
  240. package/dist/core/objects/language/changes/language.base.js +13 -0
  241. package/dist/core/objects/language/changes/language.comment.d.ts +26 -0
  242. package/dist/core/objects/language/changes/language.comment.js +45 -0
  243. package/dist/core/objects/language/changes/language.create.d.ts +25 -0
  244. package/dist/core/objects/language/changes/language.create.js +76 -0
  245. package/dist/core/objects/language/changes/language.drop.d.ts +22 -0
  246. package/dist/core/objects/language/changes/language.drop.js +31 -0
  247. package/dist/core/objects/language/changes/language.privilege.d.ts +97 -0
  248. package/dist/core/objects/language/changes/language.privilege.js +128 -0
  249. package/dist/core/objects/language/changes/language.types.d.ts +6 -0
  250. package/dist/core/objects/language/changes/language.types.js +1 -0
  251. package/dist/core/objects/language/language.diff.d.ts +15 -0
  252. package/dist/core/objects/language/language.diff.js +117 -0
  253. package/dist/core/objects/language/language.model.d.ts +62 -0
  254. package/dist/core/objects/language/language.model.js +128 -0
  255. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +67 -0
  256. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +63 -0
  257. package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +17 -0
  258. package/dist/core/objects/materialized-view/changes/materialized-view.base.js +13 -0
  259. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +53 -0
  260. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +112 -0
  261. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +35 -0
  262. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +71 -0
  263. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +26 -0
  264. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +42 -0
  265. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +105 -0
  266. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +151 -0
  267. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +6 -0
  268. package/dist/core/objects/materialized-view/changes/materialized-view.types.js +1 -0
  269. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +18 -0
  270. package/dist/core/objects/materialized-view/materialized-view.diff.js +335 -0
  271. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +152 -0
  272. package/dist/core/objects/materialized-view/materialized-view.model.js +228 -0
  273. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +143 -0
  274. package/dist/core/objects/procedure/changes/procedure.alter.js +207 -0
  275. package/dist/core/objects/procedure/changes/procedure.base.d.ts +17 -0
  276. package/dist/core/objects/procedure/changes/procedure.base.js +13 -0
  277. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +26 -0
  278. package/dist/core/objects/procedure/changes/procedure.comment.js +52 -0
  279. package/dist/core/objects/procedure/changes/procedure.create.d.ts +42 -0
  280. package/dist/core/objects/procedure/changes/procedure.create.js +77 -0
  281. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +23 -0
  282. package/dist/core/objects/procedure/changes/procedure.drop.js +37 -0
  283. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +98 -0
  284. package/dist/core/objects/procedure/changes/procedure.privilege.js +144 -0
  285. package/dist/core/objects/procedure/changes/procedure.types.d.ts +6 -0
  286. package/dist/core/objects/procedure/changes/procedure.types.js +1 -0
  287. package/dist/core/objects/procedure/procedure.diff.d.ts +18 -0
  288. package/dist/core/objects/procedure/procedure.diff.js +282 -0
  289. package/dist/core/objects/procedure/procedure.model.d.ts +132 -0
  290. package/dist/core/objects/procedure/procedure.model.js +244 -0
  291. package/dist/core/objects/procedure/utils.d.ts +14 -0
  292. package/dist/core/objects/procedure/utils.js +55 -0
  293. package/dist/core/objects/publication/changes/publication.alter.d.ts +88 -0
  294. package/dist/core/objects/publication/changes/publication.alter.js +176 -0
  295. package/dist/core/objects/publication/changes/publication.base.d.ts +17 -0
  296. package/dist/core/objects/publication/changes/publication.base.js +13 -0
  297. package/dist/core/objects/publication/changes/publication.comment.d.ts +23 -0
  298. package/dist/core/objects/publication/changes/publication.comment.js +46 -0
  299. package/dist/core/objects/publication/changes/publication.create.d.ts +17 -0
  300. package/dist/core/objects/publication/changes/publication.create.js +61 -0
  301. package/dist/core/objects/publication/changes/publication.drop.d.ts +17 -0
  302. package/dist/core/objects/publication/changes/publication.drop.js +23 -0
  303. package/dist/core/objects/publication/changes/publication.types.d.ts +5 -0
  304. package/dist/core/objects/publication/changes/publication.types.js +1 -0
  305. package/dist/core/objects/publication/publication.diff.d.ts +5 -0
  306. package/dist/core/objects/publication/publication.diff.js +161 -0
  307. package/dist/core/objects/publication/publication.model.d.ts +96 -0
  308. package/dist/core/objects/publication/publication.model.js +186 -0
  309. package/dist/core/objects/publication/utils.d.ts +5 -0
  310. package/dist/core/objects/publication/utils.js +45 -0
  311. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +62 -0
  312. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +90 -0
  313. package/dist/core/objects/rls-policy/changes/rls-policy.base.d.ts +17 -0
  314. package/dist/core/objects/rls-policy/changes/rls-policy.base.js +13 -0
  315. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +23 -0
  316. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +51 -0
  317. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +27 -0
  318. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +79 -0
  319. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +22 -0
  320. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +33 -0
  321. package/dist/core/objects/rls-policy/changes/rls-policy.types.d.ts +5 -0
  322. package/dist/core/objects/rls-policy/changes/rls-policy.types.js +1 -0
  323. package/dist/core/objects/rls-policy/rls-policy.diff.d.ts +10 -0
  324. package/dist/core/objects/rls-policy/rls-policy.diff.js +80 -0
  325. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +52 -0
  326. package/dist/core/objects/rls-policy/rls-policy.model.js +127 -0
  327. package/dist/core/objects/role/changes/role.alter.d.ts +78 -0
  328. package/dist/core/objects/role/changes/role.alter.js +55 -0
  329. package/dist/core/objects/role/changes/role.base.d.ts +17 -0
  330. package/dist/core/objects/role/changes/role.base.js +13 -0
  331. package/dist/core/objects/role/changes/role.comment.d.ts +23 -0
  332. package/dist/core/objects/role/changes/role.comment.js +42 -0
  333. package/dist/core/objects/role/changes/role.create.d.ts +38 -0
  334. package/dist/core/objects/role/changes/role.create.js +83 -0
  335. package/dist/core/objects/role/changes/role.drop.d.ts +22 -0
  336. package/dist/core/objects/role/changes/role.drop.js +28 -0
  337. package/dist/core/objects/role/changes/role.privilege.d.ts +148 -0
  338. package/dist/core/objects/role/changes/role.privilege.js +283 -0
  339. package/dist/core/objects/role/changes/role.types.d.ts +6 -0
  340. package/dist/core/objects/role/changes/role.types.js +1 -0
  341. package/dist/core/objects/role/role.diff.d.ts +13 -0
  342. package/dist/core/objects/role/role.diff.js +386 -0
  343. package/dist/core/objects/role/role.model.d.ts +89 -0
  344. package/dist/core/objects/role/role.model.js +312 -0
  345. package/dist/core/objects/rule/changes/rule.alter.d.ts +22 -0
  346. package/dist/core/objects/rule/changes/rule.alter.js +58 -0
  347. package/dist/core/objects/rule/changes/rule.base.d.ts +17 -0
  348. package/dist/core/objects/rule/changes/rule.base.js +13 -0
  349. package/dist/core/objects/rule/changes/rule.comment.d.ts +22 -0
  350. package/dist/core/objects/rule/changes/rule.comment.js +51 -0
  351. package/dist/core/objects/rule/changes/rule.create.d.ts +14 -0
  352. package/dist/core/objects/rule/changes/rule.create.js +28 -0
  353. package/dist/core/objects/rule/changes/rule.drop.d.ts +12 -0
  354. package/dist/core/objects/rule/changes/rule.drop.js +23 -0
  355. package/dist/core/objects/rule/changes/rule.types.d.ts +5 -0
  356. package/dist/core/objects/rule/changes/rule.types.js +1 -0
  357. package/dist/core/objects/rule/rule.diff.d.ts +3 -0
  358. package/dist/core/objects/rule/rule.diff.js +53 -0
  359. package/dist/core/objects/rule/rule.model.d.ts +72 -0
  360. package/dist/core/objects/rule/rule.model.js +156 -0
  361. package/dist/core/objects/schema/changes/schema.alter.d.ts +32 -0
  362. package/dist/core/objects/schema/changes/schema.alter.js +25 -0
  363. package/dist/core/objects/schema/changes/schema.base.d.ts +17 -0
  364. package/dist/core/objects/schema/changes/schema.base.js +13 -0
  365. package/dist/core/objects/schema/changes/schema.comment.d.ts +23 -0
  366. package/dist/core/objects/schema/changes/schema.comment.js +43 -0
  367. package/dist/core/objects/schema/changes/schema.create.d.ts +27 -0
  368. package/dist/core/objects/schema/changes/schema.create.js +38 -0
  369. package/dist/core/objects/schema/changes/schema.drop.d.ts +22 -0
  370. package/dist/core/objects/schema/changes/schema.drop.js +28 -0
  371. package/dist/core/objects/schema/changes/schema.privilege.d.ts +97 -0
  372. package/dist/core/objects/schema/changes/schema.privilege.js +131 -0
  373. package/dist/core/objects/schema/changes/schema.types.d.ts +6 -0
  374. package/dist/core/objects/schema/changes/schema.types.js +1 -0
  375. package/dist/core/objects/schema/schema.diff.d.ts +18 -0
  376. package/dist/core/objects/schema/schema.diff.js +142 -0
  377. package/dist/core/objects/schema/schema.model.d.ts +47 -0
  378. package/dist/core/objects/schema/schema.model.js +91 -0
  379. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +59 -0
  380. package/dist/core/objects/sequence/changes/sequence.alter.js +75 -0
  381. package/dist/core/objects/sequence/changes/sequence.base.d.ts +17 -0
  382. package/dist/core/objects/sequence/changes/sequence.base.js +13 -0
  383. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +23 -0
  384. package/dist/core/objects/sequence/changes/sequence.comment.js +47 -0
  385. package/dist/core/objects/sequence/changes/sequence.create.d.ts +25 -0
  386. package/dist/core/objects/sequence/changes/sequence.create.js +78 -0
  387. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +22 -0
  388. package/dist/core/objects/sequence/changes/sequence.drop.js +31 -0
  389. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +101 -0
  390. package/dist/core/objects/sequence/changes/sequence.privilege.js +135 -0
  391. package/dist/core/objects/sequence/changes/sequence.types.d.ts +6 -0
  392. package/dist/core/objects/sequence/changes/sequence.types.js +1 -0
  393. package/dist/core/objects/sequence/sequence.diff.d.ts +20 -0
  394. package/dist/core/objects/sequence/sequence.diff.js +258 -0
  395. package/dist/core/objects/sequence/sequence.model.d.ts +76 -0
  396. package/dist/core/objects/sequence/sequence.model.js +169 -0
  397. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +56 -0
  398. package/dist/core/objects/subscription/changes/subscription.alter.js +82 -0
  399. package/dist/core/objects/subscription/changes/subscription.base.d.ts +17 -0
  400. package/dist/core/objects/subscription/changes/subscription.base.js +13 -0
  401. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +23 -0
  402. package/dist/core/objects/subscription/changes/subscription.comment.js +46 -0
  403. package/dist/core/objects/subscription/changes/subscription.create.d.ts +12 -0
  404. package/dist/core/objects/subscription/changes/subscription.create.js +52 -0
  405. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +11 -0
  406. package/dist/core/objects/subscription/changes/subscription.drop.js +15 -0
  407. package/dist/core/objects/subscription/changes/subscription.types.d.ts +5 -0
  408. package/dist/core/objects/subscription/changes/subscription.types.js +1 -0
  409. package/dist/core/objects/subscription/subscription.diff.d.ts +5 -0
  410. package/dist/core/objects/subscription/subscription.diff.js +167 -0
  411. package/dist/core/objects/subscription/subscription.model.d.ts +80 -0
  412. package/dist/core/objects/subscription/subscription.model.js +166 -0
  413. package/dist/core/objects/subscription/utils.d.ts +37 -0
  414. package/dist/core/objects/subscription/utils.js +112 -0
  415. package/dist/core/objects/table/changes/table.alter.d.ts +357 -0
  416. package/dist/core/objects/table/changes/table.alter.js +607 -0
  417. package/dist/core/objects/table/changes/table.base.d.ts +17 -0
  418. package/dist/core/objects/table/changes/table.base.js +13 -0
  419. package/dist/core/objects/table/changes/table.comment.d.ts +106 -0
  420. package/dist/core/objects/table/changes/table.comment.js +175 -0
  421. package/dist/core/objects/table/changes/table.create.d.ts +33 -0
  422. package/dist/core/objects/table/changes/table.create.js +145 -0
  423. package/dist/core/objects/table/changes/table.drop.d.ts +22 -0
  424. package/dist/core/objects/table/changes/table.drop.js +35 -0
  425. package/dist/core/objects/table/changes/table.privilege.d.ts +107 -0
  426. package/dist/core/objects/table/changes/table.privilege.js +150 -0
  427. package/dist/core/objects/table/changes/table.types.d.ts +6 -0
  428. package/dist/core/objects/table/changes/table.types.js +1 -0
  429. package/dist/core/objects/table/table.diff.d.ts +18 -0
  430. package/dist/core/objects/table/table.diff.js +668 -0
  431. package/dist/core/objects/table/table.model.d.ts +341 -0
  432. package/dist/core/objects/table/table.model.js +426 -0
  433. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +29 -0
  434. package/dist/core/objects/trigger/changes/trigger.alter.js +27 -0
  435. package/dist/core/objects/trigger/changes/trigger.base.d.ts +17 -0
  436. package/dist/core/objects/trigger/changes/trigger.base.js +13 -0
  437. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +23 -0
  438. package/dist/core/objects/trigger/changes/trigger.comment.js +51 -0
  439. package/dist/core/objects/trigger/changes/trigger.create.d.ts +41 -0
  440. package/dist/core/objects/trigger/changes/trigger.create.js +61 -0
  441. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +22 -0
  442. package/dist/core/objects/trigger/changes/trigger.drop.js +33 -0
  443. package/dist/core/objects/trigger/changes/trigger.types.d.ts +5 -0
  444. package/dist/core/objects/trigger/changes/trigger.types.js +1 -0
  445. package/dist/core/objects/trigger/trigger.diff.d.ts +11 -0
  446. package/dist/core/objects/trigger/trigger.diff.js +84 -0
  447. package/dist/core/objects/trigger/trigger.model.d.ts +92 -0
  448. package/dist/core/objects/trigger/trigger.model.js +235 -0
  449. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +81 -0
  450. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +123 -0
  451. package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +17 -0
  452. package/dist/core/objects/type/composite-type/changes/composite-type.base.js +13 -0
  453. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +53 -0
  454. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +108 -0
  455. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +23 -0
  456. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +72 -0
  457. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +22 -0
  458. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +31 -0
  459. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +97 -0
  460. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +131 -0
  461. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +6 -0
  462. package/dist/core/objects/type/composite-type/changes/composite-type.types.js +1 -0
  463. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +18 -0
  464. package/dist/core/objects/type/composite-type/composite-type.diff.js +250 -0
  465. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +148 -0
  466. package/dist/core/objects/type/composite-type/composite-type.model.js +223 -0
  467. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +52 -0
  468. package/dist/core/objects/type/enum/changes/enum.alter.js +60 -0
  469. package/dist/core/objects/type/enum/changes/enum.base.d.ts +17 -0
  470. package/dist/core/objects/type/enum/changes/enum.base.js +13 -0
  471. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +26 -0
  472. package/dist/core/objects/type/enum/changes/enum.comment.js +47 -0
  473. package/dist/core/objects/type/enum/changes/enum.create.d.ts +22 -0
  474. package/dist/core/objects/type/enum/changes/enum.create.js +43 -0
  475. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +22 -0
  476. package/dist/core/objects/type/enum/changes/enum.drop.js +28 -0
  477. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +97 -0
  478. package/dist/core/objects/type/enum/changes/enum.privilege.js +131 -0
  479. package/dist/core/objects/type/enum/changes/enum.types.d.ts +6 -0
  480. package/dist/core/objects/type/enum/changes/enum.types.js +1 -0
  481. package/dist/core/objects/type/enum/enum.diff.d.ts +18 -0
  482. package/dist/core/objects/type/enum/enum.diff.js +268 -0
  483. package/dist/core/objects/type/enum/enum.model.d.ts +66 -0
  484. package/dist/core/objects/type/enum/enum.model.js +154 -0
  485. package/dist/core/objects/type/range/changes/range.alter.d.ts +33 -0
  486. package/dist/core/objects/type/range/changes/range.alter.js +30 -0
  487. package/dist/core/objects/type/range/changes/range.base.d.ts +17 -0
  488. package/dist/core/objects/type/range/changes/range.base.js +13 -0
  489. package/dist/core/objects/type/range/changes/range.comment.d.ts +26 -0
  490. package/dist/core/objects/type/range/changes/range.comment.js +47 -0
  491. package/dist/core/objects/type/range/changes/range.create.d.ts +31 -0
  492. package/dist/core/objects/type/range/changes/range.create.js +113 -0
  493. package/dist/core/objects/type/range/changes/range.drop.d.ts +22 -0
  494. package/dist/core/objects/type/range/changes/range.drop.js +28 -0
  495. package/dist/core/objects/type/range/changes/range.privilege.d.ts +97 -0
  496. package/dist/core/objects/type/range/changes/range.privilege.js +131 -0
  497. package/dist/core/objects/type/range/changes/range.types.d.ts +6 -0
  498. package/dist/core/objects/type/range/changes/range.types.js +1 -0
  499. package/dist/core/objects/type/range/range.diff.d.ts +18 -0
  500. package/dist/core/objects/type/range/range.diff.js +172 -0
  501. package/dist/core/objects/type/range/range.model.d.ts +81 -0
  502. package/dist/core/objects/type/range/range.model.js +165 -0
  503. package/dist/core/objects/type/type.types.d.ts +4 -0
  504. package/dist/core/objects/type/type.types.js +1 -0
  505. package/dist/core/objects/utils.d.ts +57 -0
  506. package/dist/core/objects/utils.js +137 -0
  507. package/dist/core/objects/view/changes/view.alter.d.ts +62 -0
  508. package/dist/core/objects/view/changes/view.alter.js +75 -0
  509. package/dist/core/objects/view/changes/view.base.d.ts +17 -0
  510. package/dist/core/objects/view/changes/view.base.js +13 -0
  511. package/dist/core/objects/view/changes/view.comment.d.ts +23 -0
  512. package/dist/core/objects/view/changes/view.comment.js +46 -0
  513. package/dist/core/objects/view/changes/view.create.d.ts +27 -0
  514. package/dist/core/objects/view/changes/view.create.js +57 -0
  515. package/dist/core/objects/view/changes/view.drop.d.ts +17 -0
  516. package/dist/core/objects/view/changes/view.drop.js +30 -0
  517. package/dist/core/objects/view/changes/view.privilege.d.ts +107 -0
  518. package/dist/core/objects/view/changes/view.privilege.js +150 -0
  519. package/dist/core/objects/view/changes/view.types.d.ts +6 -0
  520. package/dist/core/objects/view/changes/view.types.js +1 -0
  521. package/dist/core/objects/view/view.diff.d.ts +18 -0
  522. package/dist/core/objects/view/view.diff.js +270 -0
  523. package/dist/core/objects/view/view.model.d.ts +152 -0
  524. package/dist/core/objects/view/view.model.js +250 -0
  525. package/dist/core/plan/apply.d.ts +33 -0
  526. package/dist/core/plan/apply.js +112 -0
  527. package/dist/core/plan/create.d.ts +22 -0
  528. package/dist/core/plan/create.js +228 -0
  529. package/dist/core/plan/hierarchy.d.ts +19 -0
  530. package/dist/core/plan/hierarchy.js +488 -0
  531. package/dist/core/plan/index.d.ts +19 -0
  532. package/dist/core/plan/index.js +21 -0
  533. package/dist/core/plan/io.d.ts +12 -0
  534. package/dist/core/plan/io.js +17 -0
  535. package/dist/core/plan/risk.d.ts +10 -0
  536. package/dist/core/plan/risk.js +38 -0
  537. package/dist/core/plan/serialize.d.ts +26 -0
  538. package/dist/core/plan/serialize.js +176 -0
  539. package/dist/core/plan/statements.d.ts +8 -0
  540. package/dist/core/plan/statements.js +13 -0
  541. package/dist/core/plan/types.d.ts +153 -0
  542. package/dist/core/plan/types.js +32 -0
  543. package/dist/core/postgres-config.d.ts +8 -0
  544. package/dist/core/postgres-config.js +46 -0
  545. package/dist/core/sort/custom-constraints.d.ts +9 -0
  546. package/dist/core/sort/custom-constraints.js +133 -0
  547. package/dist/core/sort/debug-visualization.d.ts +8 -0
  548. package/dist/core/sort/debug-visualization.js +145 -0
  549. package/dist/core/sort/dependency-filter.d.ts +19 -0
  550. package/dist/core/sort/dependency-filter.js +152 -0
  551. package/dist/core/sort/graph-builder.d.ts +37 -0
  552. package/dist/core/sort/graph-builder.js +172 -0
  553. package/dist/core/sort/graph-utils.d.ts +14 -0
  554. package/dist/core/sort/graph-utils.js +41 -0
  555. package/dist/core/sort/logical-sort.d.ts +26 -0
  556. package/dist/core/sort/logical-sort.js +532 -0
  557. package/dist/core/sort/sort-changes.d.ts +28 -0
  558. package/dist/core/sort/sort-changes.js +147 -0
  559. package/dist/core/sort/topological-sort.d.ts +20 -0
  560. package/dist/core/sort/topological-sort.js +138 -0
  561. package/dist/core/sort/types.d.ts +102 -0
  562. package/dist/core/sort/types.js +1 -0
  563. package/dist/core/sort/utils.d.ts +23 -0
  564. package/dist/core/sort/utils.js +51 -0
  565. package/dist/index.d.ts +1 -0
  566. package/dist/index.js +1 -0
  567. package/package.json +58 -12
@@ -0,0 +1,282 @@
1
+ import { diffObjects } from "../base.diff.js";
2
+ import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../base.privilege-diff.js";
3
+ import { deepEqual, hasNonAlterableChanges } from "../utils.js";
4
+ import { AlterProcedureChangeOwner, AlterProcedureSetConfig, AlterProcedureSetLeakproof, AlterProcedureSetParallel, AlterProcedureSetSecurity, AlterProcedureSetStrictness, AlterProcedureSetVolatility, } from "./changes/procedure.alter.js";
5
+ import { CreateCommentOnProcedure, DropCommentOnProcedure, } from "./changes/procedure.comment.js";
6
+ import { CreateProcedure } from "./changes/procedure.create.js";
7
+ import { DropProcedure } from "./changes/procedure.drop.js";
8
+ import { GrantProcedurePrivileges, RevokeGrantOptionProcedurePrivileges, RevokeProcedurePrivileges, } from "./changes/procedure.privilege.js";
9
+ /**
10
+ * Diff two sets of procedures from main and branch catalogs.
11
+ *
12
+ * @param ctx - Context containing version, currentUser, and defaultPrivilegeState
13
+ * @param main - The procedures in the main catalog.
14
+ * @param branch - The procedures in the branch catalog.
15
+ * @returns A list of changes to apply to main to make it match branch.
16
+ */
17
+ export function diffProcedures(ctx, main, branch) {
18
+ const { created, dropped, altered } = diffObjects(main, branch);
19
+ const changes = [];
20
+ for (const procedureId of created) {
21
+ const proc = branch[procedureId];
22
+ changes.push(new CreateProcedure({ procedure: proc }));
23
+ // OWNER: If the procedure should be owned by someone other than the current user,
24
+ // emit ALTER FUNCTION/PROCEDURE ... OWNER TO after creation
25
+ if (proc.owner !== ctx.currentUser) {
26
+ changes.push(new AlterProcedureChangeOwner({
27
+ procedure: proc,
28
+ owner: proc.owner,
29
+ }));
30
+ }
31
+ if (proc.comment !== null) {
32
+ changes.push(new CreateCommentOnProcedure({ procedure: proc }));
33
+ }
34
+ // PRIVILEGES: For created objects, compare against default privileges state
35
+ // The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
36
+ // so objects are created with the default privileges state in effect.
37
+ // We compare default privileges against desired privileges to generate REVOKE/GRANT statements
38
+ // needed to reach the final desired state.
39
+ const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "procedure", proc.schema ?? "");
40
+ // Filter out PUBLIC's built-in default EXECUTE privilege (PostgreSQL grants it automatically)
41
+ // Reference: https://www.postgresql.org/docs/17/ddl-priv.html Table 5.2
42
+ // This prevents generating unnecessary "GRANT EXECUTE TO PUBLIC" statements
43
+ const desiredPrivileges = filterPublicBuiltInDefaults("procedure", proc.privileges);
44
+ // Filter out owner privileges - owner always has ALL privileges implicitly
45
+ // and shouldn't be compared. Note: we use the final owner (proc.owner), not the
46
+ // 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
+ }
85
+ }
86
+ for (const procedureId of dropped) {
87
+ changes.push(new DropProcedure({ procedure: main[procedureId] }));
88
+ }
89
+ for (const procedureId of altered) {
90
+ const mainProcedure = main[procedureId];
91
+ const branchProcedure = branch[procedureId];
92
+ // Check if non-alterable properties have changed
93
+ // These require dropping and recreating the procedure
94
+ const NON_ALTERABLE_FIELDS = [
95
+ "kind",
96
+ "return_type",
97
+ "return_type_schema",
98
+ "language",
99
+ // The following properties are alterable in SQL, but our generator may choose
100
+ // to replace on changes not covered by explicit ALTER actions. Keep them out here
101
+ // to allow ALTER for those we implement below.
102
+ // security_definer,
103
+ // volatility,
104
+ // parallel_safety,
105
+ // is_strict,
106
+ // leakproof,
107
+ // Returns-set is part of the signature and not alterable
108
+ "returns_set",
109
+ "argument_count",
110
+ "argument_default_count",
111
+ "argument_names",
112
+ "argument_types",
113
+ "all_argument_types",
114
+ "argument_modes",
115
+ "argument_defaults",
116
+ "source_code",
117
+ "binary_path",
118
+ "sql_body",
119
+ // config is alterable via SET/RESET
120
+ ];
121
+ const nonAlterablePropsChanged = hasNonAlterableChanges(mainProcedure, branchProcedure, NON_ALTERABLE_FIELDS, {
122
+ argument_names: deepEqual,
123
+ argument_types: deepEqual,
124
+ all_argument_types: deepEqual,
125
+ argument_modes: deepEqual,
126
+ config: deepEqual,
127
+ });
128
+ if (nonAlterablePropsChanged) {
129
+ // Replace the entire procedure
130
+ changes.push(new CreateProcedure({ procedure: branchProcedure, orReplace: true }));
131
+ }
132
+ else {
133
+ // Only alterable properties changed - check each one
134
+ // OWNER
135
+ if (mainProcedure.owner !== branchProcedure.owner) {
136
+ changes.push(new AlterProcedureChangeOwner({
137
+ procedure: mainProcedure,
138
+ owner: branchProcedure.owner,
139
+ }));
140
+ }
141
+ // COMMENT
142
+ if (mainProcedure.comment !== branchProcedure.comment) {
143
+ if (branchProcedure.comment === null) {
144
+ changes.push(new DropCommentOnProcedure({ procedure: mainProcedure }));
145
+ }
146
+ else {
147
+ changes.push(new CreateCommentOnProcedure({ procedure: branchProcedure }));
148
+ }
149
+ }
150
+ // SECURITY DEFINER/INVOKER
151
+ if (mainProcedure.security_definer !== branchProcedure.security_definer) {
152
+ changes.push(new AlterProcedureSetSecurity({
153
+ procedure: mainProcedure,
154
+ securityDefiner: branchProcedure.security_definer,
155
+ }));
156
+ }
157
+ // CONFIG SET/RESET
158
+ const toMap = (opts) => {
159
+ const map = new Map();
160
+ for (const opt of opts ?? []) {
161
+ const eq = opt.indexOf("=");
162
+ const key = opt.slice(0, eq).trim();
163
+ const value = opt.slice(eq + 1).trim();
164
+ map.set(key, value);
165
+ }
166
+ return map;
167
+ };
168
+ const mainCfg = toMap(mainProcedure.config);
169
+ const branchCfg = toMap(branchProcedure.config);
170
+ if (branchCfg.size === 0 && mainCfg.size > 0) {
171
+ // Branch has no config at all -> prefer a single RESET ALL
172
+ changes.push(new AlterProcedureSetConfig({
173
+ procedure: mainProcedure,
174
+ action: "reset_all",
175
+ }));
176
+ }
177
+ else {
178
+ for (const [key, oldValue] of mainCfg.entries()) {
179
+ const hasInBranch = branchCfg.has(key);
180
+ const newValue = branchCfg.get(key);
181
+ const changed = hasInBranch ? oldValue !== newValue : true;
182
+ if (changed) {
183
+ changes.push(new AlterProcedureSetConfig({
184
+ procedure: mainProcedure,
185
+ action: "reset",
186
+ key,
187
+ }));
188
+ }
189
+ }
190
+ for (const [key, newValue] of branchCfg.entries()) {
191
+ const oldValue = mainCfg.get(key);
192
+ if (oldValue !== newValue) {
193
+ changes.push(new AlterProcedureSetConfig({
194
+ procedure: mainProcedure,
195
+ action: "set",
196
+ key,
197
+ value: newValue,
198
+ }));
199
+ }
200
+ }
201
+ }
202
+ // VOLATILITY
203
+ if (mainProcedure.volatility !== branchProcedure.volatility) {
204
+ changes.push(new AlterProcedureSetVolatility({
205
+ procedure: mainProcedure,
206
+ volatility: branchProcedure.volatility,
207
+ }));
208
+ }
209
+ // STRICTNESS
210
+ if (mainProcedure.is_strict !== branchProcedure.is_strict) {
211
+ changes.push(new AlterProcedureSetStrictness({
212
+ procedure: mainProcedure,
213
+ isStrict: branchProcedure.is_strict,
214
+ }));
215
+ }
216
+ // LEAKPROOF
217
+ if (mainProcedure.leakproof !== branchProcedure.leakproof) {
218
+ changes.push(new AlterProcedureSetLeakproof({
219
+ procedure: mainProcedure,
220
+ leakproof: branchProcedure.leakproof,
221
+ }));
222
+ }
223
+ // PARALLEL
224
+ if (mainProcedure.parallel_safety !== branchProcedure.parallel_safety) {
225
+ changes.push(new AlterProcedureSetParallel({
226
+ procedure: mainProcedure,
227
+ parallelSafety: branchProcedure.parallel_safety,
228
+ }));
229
+ }
230
+ // Note: Procedure renaming would also use ALTER FUNCTION/PROCEDURE ... RENAME TO ...
231
+ // But since our Procedure model uses 'name' as the identity field,
232
+ // a name change would be handled as drop + create by diffObjects()
233
+ // PRIVILEGES
234
+ // Filter out PUBLIC's built-in default EXECUTE privilege from main catalog
235
+ // (PostgreSQL grants it automatically, so we shouldn't compare it)
236
+ const mainPrivilegesFiltered = filterPublicBuiltInDefaults("procedure", mainProcedure.privileges);
237
+ // Filter out PUBLIC's built-in default EXECUTE privilege from branch catalog
238
+ const branchPrivilegesFiltered = filterPublicBuiltInDefaults("procedure", branchProcedure.privileges);
239
+ // Filter out owner privileges - owner always has ALL privileges implicitly
240
+ // 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
+ }
279
+ }
280
+ }
281
+ return changes;
282
+ }
@@ -0,0 +1,132 @@
1
+ import type { Sql } from "postgres";
2
+ import z from "zod";
3
+ import { BasePgModel } from "../base.model.ts";
4
+ import { type PrivilegeProps } from "../base.privilege-diff.ts";
5
+ declare const procedurePropsSchema: z.ZodObject<{
6
+ schema: z.ZodString;
7
+ name: z.ZodString;
8
+ kind: z.ZodEnum<{
9
+ a: "a";
10
+ w: "w";
11
+ p: "p";
12
+ f: "f";
13
+ }>;
14
+ return_type: z.ZodString;
15
+ return_type_schema: z.ZodString;
16
+ language: z.ZodString;
17
+ security_definer: z.ZodBoolean;
18
+ volatility: z.ZodEnum<{
19
+ i: "i";
20
+ s: "s";
21
+ v: "v";
22
+ }>;
23
+ parallel_safety: z.ZodEnum<{
24
+ u: "u";
25
+ s: "s";
26
+ r: "r";
27
+ }>;
28
+ execution_cost: z.ZodNumber;
29
+ result_rows: z.ZodNumber;
30
+ is_strict: z.ZodBoolean;
31
+ leakproof: z.ZodBoolean;
32
+ returns_set: z.ZodBoolean;
33
+ argument_count: z.ZodNumber;
34
+ argument_default_count: z.ZodNumber;
35
+ argument_names: z.ZodNullable<z.ZodArray<z.ZodString>>;
36
+ argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
37
+ all_argument_types: z.ZodNullable<z.ZodArray<z.ZodString>>;
38
+ argument_modes: z.ZodNullable<z.ZodArray<z.ZodEnum<{
39
+ i: "i";
40
+ o: "o";
41
+ b: "b";
42
+ v: "v";
43
+ t: "t";
44
+ }>>>;
45
+ argument_defaults: z.ZodNullable<z.ZodString>;
46
+ source_code: z.ZodNullable<z.ZodString>;
47
+ binary_path: z.ZodNullable<z.ZodString>;
48
+ sql_body: z.ZodNullable<z.ZodString>;
49
+ definition: z.ZodString;
50
+ config: z.ZodNullable<z.ZodArray<z.ZodString>>;
51
+ owner: z.ZodString;
52
+ comment: z.ZodNullable<z.ZodString>;
53
+ privileges: z.ZodArray<z.ZodObject<{
54
+ grantee: z.ZodString;
55
+ privilege: z.ZodString;
56
+ grantable: z.ZodBoolean;
57
+ columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
58
+ }, z.z.core.$strip>>;
59
+ }, z.z.core.$strip>;
60
+ type ProcedurePrivilegeProps = PrivilegeProps;
61
+ export type ProcedureProps = z.infer<typeof procedurePropsSchema>;
62
+ export declare class Procedure extends BasePgModel {
63
+ readonly schema: ProcedureProps["schema"];
64
+ readonly name: ProcedureProps["name"];
65
+ readonly kind: ProcedureProps["kind"];
66
+ readonly return_type: ProcedureProps["return_type"];
67
+ readonly return_type_schema: ProcedureProps["return_type_schema"];
68
+ readonly language: ProcedureProps["language"];
69
+ readonly security_definer: ProcedureProps["security_definer"];
70
+ readonly volatility: ProcedureProps["volatility"];
71
+ readonly parallel_safety: ProcedureProps["parallel_safety"];
72
+ readonly execution_cost: ProcedureProps["execution_cost"];
73
+ readonly result_rows: ProcedureProps["result_rows"];
74
+ readonly is_strict: ProcedureProps["is_strict"];
75
+ readonly leakproof: ProcedureProps["leakproof"];
76
+ readonly returns_set: ProcedureProps["returns_set"];
77
+ readonly argument_count: ProcedureProps["argument_count"];
78
+ readonly argument_default_count: ProcedureProps["argument_default_count"];
79
+ readonly argument_names: ProcedureProps["argument_names"];
80
+ readonly argument_types: ProcedureProps["argument_types"];
81
+ readonly all_argument_types: ProcedureProps["all_argument_types"];
82
+ readonly argument_modes: ProcedureProps["argument_modes"];
83
+ readonly argument_defaults: ProcedureProps["argument_defaults"];
84
+ readonly source_code: ProcedureProps["source_code"];
85
+ readonly binary_path: ProcedureProps["binary_path"];
86
+ readonly sql_body: ProcedureProps["sql_body"];
87
+ readonly definition: ProcedureProps["definition"];
88
+ readonly config: ProcedureProps["config"];
89
+ readonly owner: ProcedureProps["owner"];
90
+ readonly comment: ProcedureProps["comment"];
91
+ readonly privileges: ProcedurePrivilegeProps[];
92
+ constructor(props: ProcedureProps);
93
+ get stableId(): `procedure:${string}`;
94
+ get identityFields(): {
95
+ schema: string;
96
+ name: string;
97
+ };
98
+ get dataFields(): {
99
+ kind: "a" | "w" | "p" | "f";
100
+ return_type: string;
101
+ return_type_schema: string;
102
+ language: string;
103
+ security_definer: boolean;
104
+ volatility: "i" | "s" | "v";
105
+ parallel_safety: "u" | "s" | "r";
106
+ is_strict: boolean;
107
+ leakproof: boolean;
108
+ returns_set: boolean;
109
+ argument_count: number;
110
+ argument_default_count: number;
111
+ argument_names: string[] | null;
112
+ argument_types: string[] | null;
113
+ all_argument_types: string[] | null;
114
+ argument_modes: ("i" | "o" | "b" | "v" | "t")[] | null;
115
+ argument_defaults: string | null;
116
+ source_code: string | null;
117
+ binary_path: string | null;
118
+ sql_body: string | null;
119
+ definition: string;
120
+ config: string[] | null;
121
+ owner: string;
122
+ comment: string | null;
123
+ privileges: {
124
+ grantee: string;
125
+ privilege: string;
126
+ grantable: boolean;
127
+ columns?: string[] | null | undefined;
128
+ }[];
129
+ };
130
+ }
131
+ export declare function extractProcedures(sql: Sql): Promise<Procedure[]>;
132
+ export {};
@@ -0,0 +1,244 @@
1
+ import z from "zod";
2
+ import { BasePgModel } from "../base.model.js";
3
+ import { privilegePropsSchema, } from "../base.privilege-diff.js";
4
+ const FunctionKindSchema = z.enum([
5
+ "f", // function
6
+ "p", // procedure
7
+ "a", // aggregate function
8
+ "w", // window function
9
+ ]);
10
+ const FunctionVolatilitySchema = z.enum([
11
+ "i", // IMMUTABLE
12
+ "s", // STABLE
13
+ "v", // VOLATILE
14
+ ]);
15
+ const FunctionParallelSafetySchema = z.enum([
16
+ "u", // UNSAFE (cannot run in parallel)
17
+ "s", // SAFE (can run in parallel)
18
+ "r", // RESTRICTED (can run in parallel with restrictions)
19
+ ]);
20
+ const FunctionArgumentModeSchema = z.enum([
21
+ "i", // IN parameter
22
+ "o", // OUT parameter
23
+ "b", // INOUT parameter
24
+ "v", // VARIADIC parameter
25
+ "t", // TABLE parameter
26
+ ]);
27
+ const procedurePropsSchema = z.object({
28
+ schema: z.string(),
29
+ name: z.string(),
30
+ kind: FunctionKindSchema,
31
+ return_type: z.string(),
32
+ return_type_schema: z.string(),
33
+ language: z.string(),
34
+ security_definer: z.boolean(),
35
+ volatility: FunctionVolatilitySchema,
36
+ parallel_safety: FunctionParallelSafetySchema,
37
+ execution_cost: z.number(),
38
+ result_rows: z.number(),
39
+ is_strict: z.boolean(),
40
+ leakproof: z.boolean(),
41
+ returns_set: z.boolean(),
42
+ argument_count: z.number(),
43
+ argument_default_count: z.number(),
44
+ argument_names: z.array(z.string()).nullable(),
45
+ argument_types: z.array(z.string()).nullable(),
46
+ all_argument_types: z.array(z.string()).nullable(),
47
+ argument_modes: z.array(FunctionArgumentModeSchema).nullable(),
48
+ argument_defaults: z.string().nullable(),
49
+ source_code: z.string().nullable(),
50
+ binary_path: z.string().nullable(),
51
+ sql_body: z.string().nullable(),
52
+ definition: z.string(),
53
+ config: z.array(z.string()).nullable(),
54
+ owner: z.string(),
55
+ comment: z.string().nullable(),
56
+ privileges: z.array(privilegePropsSchema),
57
+ });
58
+ export class Procedure extends BasePgModel {
59
+ schema;
60
+ name;
61
+ kind;
62
+ return_type;
63
+ return_type_schema;
64
+ language;
65
+ security_definer;
66
+ volatility;
67
+ parallel_safety;
68
+ execution_cost;
69
+ result_rows;
70
+ is_strict;
71
+ leakproof;
72
+ returns_set;
73
+ argument_count;
74
+ argument_default_count;
75
+ argument_names;
76
+ argument_types;
77
+ all_argument_types;
78
+ argument_modes;
79
+ argument_defaults;
80
+ source_code;
81
+ binary_path;
82
+ sql_body;
83
+ definition;
84
+ config;
85
+ owner;
86
+ comment;
87
+ privileges;
88
+ constructor(props) {
89
+ super();
90
+ // Identity fields
91
+ this.schema = props.schema;
92
+ this.name = props.name;
93
+ // Data fields
94
+ this.kind = props.kind;
95
+ this.return_type = props.return_type;
96
+ this.return_type_schema = props.return_type_schema;
97
+ this.language = props.language;
98
+ this.security_definer = props.security_definer;
99
+ this.volatility = props.volatility;
100
+ this.parallel_safety = props.parallel_safety;
101
+ this.execution_cost = props.execution_cost;
102
+ this.result_rows = props.result_rows;
103
+ this.is_strict = props.is_strict;
104
+ this.leakproof = props.leakproof;
105
+ this.returns_set = props.returns_set;
106
+ this.argument_count = props.argument_count;
107
+ this.argument_default_count = props.argument_default_count;
108
+ this.argument_names = props.argument_names;
109
+ this.argument_types = props.argument_types;
110
+ this.all_argument_types = props.all_argument_types;
111
+ this.argument_modes = props.argument_modes;
112
+ this.argument_defaults = props.argument_defaults;
113
+ this.source_code = props.source_code;
114
+ this.binary_path = props.binary_path;
115
+ this.sql_body = props.sql_body;
116
+ this.definition = props.definition;
117
+ this.config = props.config;
118
+ this.owner = props.owner;
119
+ this.comment = props.comment;
120
+ this.privileges = props.privileges;
121
+ }
122
+ get stableId() {
123
+ const args = this.argument_types?.join(",") ?? "";
124
+ return `procedure:${this.schema}.${this.name}(${args})`;
125
+ }
126
+ get identityFields() {
127
+ return {
128
+ schema: this.schema,
129
+ name: this.name,
130
+ };
131
+ }
132
+ get dataFields() {
133
+ return {
134
+ kind: this.kind,
135
+ return_type: this.return_type,
136
+ return_type_schema: this.return_type_schema,
137
+ language: this.language,
138
+ security_definer: this.security_definer,
139
+ volatility: this.volatility,
140
+ parallel_safety: this.parallel_safety,
141
+ // execution_cost and result_rows are planner hints. We intentionally
142
+ // exclude them from dataFields to avoid generating diffs solely due to
143
+ // changes in estimates. They are still used for CREATE serialization.
144
+ is_strict: this.is_strict,
145
+ leakproof: this.leakproof,
146
+ returns_set: this.returns_set,
147
+ argument_count: this.argument_count,
148
+ argument_default_count: this.argument_default_count,
149
+ argument_names: this.argument_names,
150
+ argument_types: this.argument_types,
151
+ all_argument_types: this.all_argument_types,
152
+ argument_modes: this.argument_modes,
153
+ argument_defaults: this.argument_defaults,
154
+ source_code: this.source_code,
155
+ binary_path: this.binary_path,
156
+ sql_body: this.sql_body,
157
+ definition: this.definition,
158
+ config: this.config,
159
+ owner: this.owner,
160
+ comment: this.comment,
161
+ privileges: this.privileges,
162
+ };
163
+ }
164
+ }
165
+ export async function extractProcedures(sql) {
166
+ return sql.begin(async (sql) => {
167
+ await sql `set search_path = ''`;
168
+ const procedureRows = await sql `
169
+ with extension_oids as (
170
+ select
171
+ objid
172
+ from
173
+ pg_depend d
174
+ where
175
+ d.refclassid = 'pg_extension'::regclass
176
+ and d.classid = 'pg_proc'::regclass
177
+ )
178
+ select
179
+ p.pronamespace::regnamespace::text as schema,
180
+ quote_ident(p.proname) as name,
181
+ p.prokind as kind,
182
+ format_type(p.prorettype, null) as return_type,
183
+ rt.typnamespace::regnamespace::text as return_type_schema,
184
+ l.lanname as language,
185
+ p.prosecdef as security_definer,
186
+ p.provolatile as volatility,
187
+ p.proparallel as parallel_safety,
188
+ p.procost as execution_cost,
189
+ p.prorows as result_rows,
190
+ p.proisstrict as is_strict,
191
+ p.proleakproof as leakproof,
192
+ p.proretset as returns_set,
193
+ p.pronargs as argument_count,
194
+ p.pronargdefaults as argument_default_count,
195
+ -- quote argument names server-side for safe serialization
196
+ case when p.proargnames is null then null
197
+ else array(select quote_ident(n) from unnest(p.proargnames) as n)
198
+ end as argument_names,
199
+ array(
200
+ select format_type(oid, null)
201
+ from unnest(p.proargtypes) as oid
202
+ ) as argument_types,
203
+ array(
204
+ select format_type(oid, null)
205
+ from unnest(p.proallargtypes) as oid
206
+ ) as all_argument_types,
207
+ p.proargmodes as argument_modes,
208
+ pg_get_expr(p.proargdefaults, 0) as argument_defaults,
209
+ p.prosrc as source_code,
210
+ p.probin as binary_path,
211
+ pg_get_function_sqlbody(p.oid) as sql_body,
212
+ pg_get_functiondef(p.oid) as definition,
213
+ p.proconfig as config,
214
+ p.proowner::regrole::text as owner,
215
+ obj_description(p.oid, 'pg_proc') as comment,
216
+ coalesce(
217
+ (
218
+ select json_agg(
219
+ json_build_object(
220
+ 'grantee', case when x.grantee = 0 then 'PUBLIC' else x.grantee::regrole::text end,
221
+ 'privilege', x.privilege_type,
222
+ 'grantable', x.is_grantable
223
+ )
224
+ order by x.grantee, x.privilege_type
225
+ )
226
+ from lateral aclexplode(p.proacl) as x(grantor, grantee, privilege_type, is_grantable)
227
+ ), '[]'
228
+ ) as privileges
229
+ from
230
+ pg_catalog.pg_proc p
231
+ inner join pg_catalog.pg_language l on l.oid = p.prolang
232
+ left join pg_catalog.pg_type rt on rt.oid = p.prorettype
233
+ left outer join extension_oids e on p.oid = e.objid
234
+ where not p.pronamespace::regnamespace::text like any(array['pg\\_%', 'information\\_schema'])
235
+ and e.objid is null
236
+ and l.lanname not in ('c', 'internal')
237
+ order by
238
+ 1, 2;
239
+ `;
240
+ // Validate and parse each row using the Zod schema
241
+ const validatedRows = procedureRows.map((row) => procedurePropsSchema.parse(row));
242
+ return validatedRows.map((row) => new Procedure(row));
243
+ });
244
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Format function arguments for CREATE/DROP FUNCTION statements.
3
+ *
4
+ * @param argNames - Array of argument names (can be null)
5
+ * @param argTypes - Array of argument types (required)
6
+ * @param argModes - Array of argument modes (can be null)
7
+ * @returns Formatted argument string
8
+ */
9
+ export declare function formatFunctionArguments(argNames: string[] | null, argTypes: string[] | null, argModes: string[] | null): string;
10
+ /**
11
+ * Format a GUC value for SET ... TO ... in function/procedure definitions.
12
+ * Applies quoting rules consistent with PostgreSQL docs and psql style.
13
+ */
14
+ export declare function formatConfigValue(key: string, rawValue: string): string;