@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,50 @@
1
+ import { quoteLiteral } from "../../../base.change.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { CreateForeignDataWrapperChange, DropForeignDataWrapperChange, } from "./foreign-data-wrapper.base.js";
4
+ export class CreateCommentOnForeignDataWrapper extends CreateForeignDataWrapperChange {
5
+ foreignDataWrapper;
6
+ scope = "comment";
7
+ constructor(props) {
8
+ super();
9
+ this.foreignDataWrapper = props.foreignDataWrapper;
10
+ }
11
+ get creates() {
12
+ return [stableId.comment(this.foreignDataWrapper.stableId)];
13
+ }
14
+ get requires() {
15
+ return [this.foreignDataWrapper.stableId];
16
+ }
17
+ serialize() {
18
+ return [
19
+ "COMMENT ON FOREIGN DATA WRAPPER",
20
+ this.foreignDataWrapper.name,
21
+ "IS",
22
+ // biome-ignore lint/style/noNonNullAssertion: comment is not nullable in this case
23
+ quoteLiteral(this.foreignDataWrapper.comment),
24
+ ].join(" ");
25
+ }
26
+ }
27
+ export class DropCommentOnForeignDataWrapper extends DropForeignDataWrapperChange {
28
+ foreignDataWrapper;
29
+ scope = "comment";
30
+ constructor(props) {
31
+ super();
32
+ this.foreignDataWrapper = props.foreignDataWrapper;
33
+ }
34
+ get drops() {
35
+ return [stableId.comment(this.foreignDataWrapper.stableId)];
36
+ }
37
+ get requires() {
38
+ return [
39
+ stableId.comment(this.foreignDataWrapper.stableId),
40
+ this.foreignDataWrapper.stableId,
41
+ ];
42
+ }
43
+ serialize() {
44
+ return [
45
+ "COMMENT ON FOREIGN DATA WRAPPER",
46
+ this.foreignDataWrapper.name,
47
+ "IS NULL",
48
+ ].join(" ");
49
+ }
50
+ }
@@ -0,0 +1,25 @@
1
+ import type { ForeignDataWrapper } from "../foreign-data-wrapper.model.ts";
2
+ import { CreateForeignDataWrapperChange } from "./foreign-data-wrapper.base.ts";
3
+ /**
4
+ * Create a foreign data wrapper.
5
+ *
6
+ * @see https://www.postgresql.org/docs/17/sql-createforeigndatawrapper.html
7
+ *
8
+ * Synopsis
9
+ * ```sql
10
+ * CREATE FOREIGN DATA WRAPPER name
11
+ * [ HANDLER handler_function | NO HANDLER ]
12
+ * [ VALIDATOR validator_function | NO VALIDATOR ]
13
+ * [ OPTIONS ( option 'value' [, ... ] ) ]
14
+ * ```
15
+ */
16
+ export declare class CreateForeignDataWrapper extends CreateForeignDataWrapperChange {
17
+ readonly foreignDataWrapper: ForeignDataWrapper;
18
+ readonly scope: "object";
19
+ constructor(props: {
20
+ foreignDataWrapper: ForeignDataWrapper;
21
+ });
22
+ get creates(): `foreignDataWrapper:${string}`[];
23
+ get requires(): string[];
24
+ serialize(): string;
25
+ }
@@ -0,0 +1,78 @@
1
+ import { quoteLiteral } from "../../../base.change.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { CreateForeignDataWrapperChange } from "./foreign-data-wrapper.base.js";
4
+ /**
5
+ * Create a foreign data wrapper.
6
+ *
7
+ * @see https://www.postgresql.org/docs/17/sql-createforeigndatawrapper.html
8
+ *
9
+ * Synopsis
10
+ * ```sql
11
+ * CREATE FOREIGN DATA WRAPPER name
12
+ * [ HANDLER handler_function | NO HANDLER ]
13
+ * [ VALIDATOR validator_function | NO VALIDATOR ]
14
+ * [ OPTIONS ( option 'value' [, ... ] ) ]
15
+ * ```
16
+ */
17
+ export class CreateForeignDataWrapper extends CreateForeignDataWrapperChange {
18
+ foreignDataWrapper;
19
+ scope = "object";
20
+ constructor(props) {
21
+ super();
22
+ this.foreignDataWrapper = props.foreignDataWrapper;
23
+ }
24
+ get creates() {
25
+ return [this.foreignDataWrapper.stableId];
26
+ }
27
+ get requires() {
28
+ const dependencies = new Set();
29
+ // Owner dependency
30
+ dependencies.add(stableId.role(this.foreignDataWrapper.owner));
31
+ // Handler function dependency (if specified)
32
+ if (this.foreignDataWrapper.handler) {
33
+ // Handler is stored as "schema.function_name(args)"
34
+ // We need to parse it to get the procedure stableId
35
+ // For now, we'll skip this dependency as it's complex to parse
36
+ // TODO: Parse handler function reference to add procedure dependency
37
+ }
38
+ // Validator function dependency (if specified)
39
+ if (this.foreignDataWrapper.validator) {
40
+ // Similar to handler
41
+ // TODO: Parse validator function reference to add procedure dependency
42
+ }
43
+ return Array.from(dependencies);
44
+ }
45
+ serialize() {
46
+ const parts = ["CREATE FOREIGN DATA WRAPPER"];
47
+ // Add FDW name
48
+ parts.push(this.foreignDataWrapper.name);
49
+ // Add HANDLER clause
50
+ if (this.foreignDataWrapper.handler) {
51
+ parts.push("HANDLER", this.foreignDataWrapper.handler);
52
+ }
53
+ else {
54
+ parts.push("NO HANDLER");
55
+ }
56
+ // Add VALIDATOR clause
57
+ if (this.foreignDataWrapper.validator) {
58
+ parts.push("VALIDATOR", this.foreignDataWrapper.validator);
59
+ }
60
+ else {
61
+ parts.push("NO VALIDATOR");
62
+ }
63
+ // Add OPTIONS clause
64
+ if (this.foreignDataWrapper.options &&
65
+ this.foreignDataWrapper.options.length > 0) {
66
+ const optionPairs = [];
67
+ for (let i = 0; i < this.foreignDataWrapper.options.length; i += 2) {
68
+ if (i + 1 < this.foreignDataWrapper.options.length) {
69
+ optionPairs.push(`${this.foreignDataWrapper.options[i]} ${quoteLiteral(this.foreignDataWrapper.options[i + 1])}`);
70
+ }
71
+ }
72
+ if (optionPairs.length > 0) {
73
+ parts.push(`OPTIONS (${optionPairs.join(", ")})`);
74
+ }
75
+ }
76
+ return parts.join(" ");
77
+ }
78
+ }
@@ -0,0 +1,22 @@
1
+ import type { ForeignDataWrapper } from "../foreign-data-wrapper.model.ts";
2
+ import { DropForeignDataWrapperChange } from "./foreign-data-wrapper.base.ts";
3
+ /**
4
+ * Drop a foreign data wrapper.
5
+ *
6
+ * @see https://www.postgresql.org/docs/17/sql-dropforeigndatawrapper.html
7
+ *
8
+ * Synopsis
9
+ * ```sql
10
+ * DROP FOREIGN DATA WRAPPER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
11
+ * ```
12
+ */
13
+ export declare class DropForeignDataWrapper extends DropForeignDataWrapperChange {
14
+ readonly foreignDataWrapper: ForeignDataWrapper;
15
+ readonly scope: "object";
16
+ constructor(props: {
17
+ foreignDataWrapper: ForeignDataWrapper;
18
+ });
19
+ get drops(): `foreignDataWrapper:${string}`[];
20
+ get requires(): `foreignDataWrapper:${string}`[];
21
+ serialize(): string;
22
+ }
@@ -0,0 +1,28 @@
1
+ import { DropForeignDataWrapperChange } from "./foreign-data-wrapper.base.js";
2
+ /**
3
+ * Drop a foreign data wrapper.
4
+ *
5
+ * @see https://www.postgresql.org/docs/17/sql-dropforeigndatawrapper.html
6
+ *
7
+ * Synopsis
8
+ * ```sql
9
+ * DROP FOREIGN DATA WRAPPER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
10
+ * ```
11
+ */
12
+ export class DropForeignDataWrapper extends DropForeignDataWrapperChange {
13
+ foreignDataWrapper;
14
+ scope = "object";
15
+ constructor(props) {
16
+ super();
17
+ this.foreignDataWrapper = props.foreignDataWrapper;
18
+ }
19
+ get drops() {
20
+ return [this.foreignDataWrapper.stableId];
21
+ }
22
+ get requires() {
23
+ return [this.foreignDataWrapper.stableId];
24
+ }
25
+ serialize() {
26
+ return ["DROP FOREIGN DATA WRAPPER", this.foreignDataWrapper.name].join(" ");
27
+ }
28
+ }
@@ -0,0 +1,97 @@
1
+ import type { ForeignDataWrapper } from "../foreign-data-wrapper.model.ts";
2
+ import { AlterForeignDataWrapperChange } from "./foreign-data-wrapper.base.ts";
3
+ export type ForeignDataWrapperPrivilege = GrantForeignDataWrapperPrivileges | RevokeForeignDataWrapperPrivileges | RevokeGrantOptionForeignDataWrapperPrivileges;
4
+ /**
5
+ * Grant privileges on a foreign data wrapper.
6
+ *
7
+ * @see https://www.postgresql.org/docs/17/sql-grant.html
8
+ *
9
+ * Synopsis
10
+ * ```sql
11
+ * GRANT { USAGE | ALL [ PRIVILEGES ] }
12
+ * ON FOREIGN DATA WRAPPER name [, ...]
13
+ * TO role_specification [, ...] [ WITH GRANT OPTION ]
14
+ * [ GRANTED BY role_specification ]
15
+ * ```
16
+ */
17
+ export declare class GrantForeignDataWrapperPrivileges extends AlterForeignDataWrapperChange {
18
+ readonly foreignDataWrapper: ForeignDataWrapper;
19
+ readonly grantee: string;
20
+ readonly privileges: {
21
+ privilege: string;
22
+ grantable: boolean;
23
+ }[];
24
+ readonly version: number | undefined;
25
+ readonly scope: "privilege";
26
+ constructor(props: {
27
+ foreignDataWrapper: ForeignDataWrapper;
28
+ grantee: string;
29
+ privileges: {
30
+ privilege: string;
31
+ grantable: boolean;
32
+ }[];
33
+ version?: number;
34
+ });
35
+ get creates(): `acl:${string}::grantee:${string}`[];
36
+ get requires(): (`role:${string}` | `foreignDataWrapper:${string}`)[];
37
+ serialize(): string;
38
+ }
39
+ /**
40
+ * Revoke privileges on a foreign data wrapper.
41
+ *
42
+ * @see https://www.postgresql.org/docs/17/sql-revoke.html
43
+ *
44
+ * Synopsis
45
+ * ```sql
46
+ * REVOKE [ GRANT OPTION FOR ]
47
+ * { USAGE | ALL [ PRIVILEGES ] }
48
+ * ON FOREIGN DATA WRAPPER name [, ...]
49
+ * FROM role_specification [, ...]
50
+ * [ GRANTED BY role_specification ]
51
+ * [ CASCADE | RESTRICT ]
52
+ * ```
53
+ */
54
+ export declare class RevokeForeignDataWrapperPrivileges extends AlterForeignDataWrapperChange {
55
+ readonly foreignDataWrapper: ForeignDataWrapper;
56
+ readonly grantee: string;
57
+ readonly privileges: {
58
+ privilege: string;
59
+ grantable: boolean;
60
+ }[];
61
+ readonly version: number | undefined;
62
+ readonly scope: "privilege";
63
+ constructor(props: {
64
+ foreignDataWrapper: ForeignDataWrapper;
65
+ grantee: string;
66
+ privileges: {
67
+ privilege: string;
68
+ grantable: boolean;
69
+ }[];
70
+ version?: number;
71
+ });
72
+ get drops(): `acl:${string}::grantee:${string}`[];
73
+ get requires(): (`acl:${string}::grantee:${string}` | `role:${string}` | `foreignDataWrapper:${string}`)[];
74
+ serialize(): string;
75
+ }
76
+ /**
77
+ * Revoke grant option for privileges on a foreign data wrapper.
78
+ *
79
+ * This removes the ability to grant the privilege to others, but keeps the privilege itself.
80
+ *
81
+ * @see https://www.postgresql.org/docs/17/sql-revoke.html
82
+ */
83
+ export declare class RevokeGrantOptionForeignDataWrapperPrivileges extends AlterForeignDataWrapperChange {
84
+ readonly foreignDataWrapper: ForeignDataWrapper;
85
+ readonly grantee: string;
86
+ readonly privilegeNames: string[];
87
+ readonly version: number | undefined;
88
+ readonly scope: "privilege";
89
+ constructor(props: {
90
+ foreignDataWrapper: ForeignDataWrapper;
91
+ grantee: string;
92
+ privilegeNames: string[];
93
+ version?: number;
94
+ });
95
+ get requires(): (`acl:${string}::grantee:${string}` | `role:${string}` | `foreignDataWrapper:${string}`)[];
96
+ serialize(): string;
97
+ }
@@ -0,0 +1,123 @@
1
+ import { formatObjectPrivilegeList } from "../../../base.privilege.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { AlterForeignDataWrapperChange } from "./foreign-data-wrapper.base.js";
4
+ /**
5
+ * Grant privileges on a foreign data wrapper.
6
+ *
7
+ * @see https://www.postgresql.org/docs/17/sql-grant.html
8
+ *
9
+ * Synopsis
10
+ * ```sql
11
+ * GRANT { USAGE | ALL [ PRIVILEGES ] }
12
+ * ON FOREIGN DATA WRAPPER name [, ...]
13
+ * TO role_specification [, ...] [ WITH GRANT OPTION ]
14
+ * [ GRANTED BY role_specification ]
15
+ * ```
16
+ */
17
+ export class GrantForeignDataWrapperPrivileges extends AlterForeignDataWrapperChange {
18
+ foreignDataWrapper;
19
+ grantee;
20
+ privileges;
21
+ version;
22
+ scope = "privilege";
23
+ constructor(props) {
24
+ super();
25
+ this.foreignDataWrapper = props.foreignDataWrapper;
26
+ this.grantee = props.grantee;
27
+ this.privileges = props.privileges;
28
+ this.version = props.version;
29
+ }
30
+ get creates() {
31
+ return [stableId.acl(this.foreignDataWrapper.stableId, this.grantee)];
32
+ }
33
+ get requires() {
34
+ return [this.foreignDataWrapper.stableId, stableId.role(this.grantee)];
35
+ }
36
+ serialize() {
37
+ const hasGrantable = this.privileges.some((p) => p.grantable);
38
+ const hasBase = this.privileges.some((p) => !p.grantable);
39
+ if (hasGrantable && hasBase) {
40
+ throw new Error("GrantForeignDataWrapperPrivileges expects privileges with uniform grantable flag");
41
+ }
42
+ const withGrant = hasGrantable ? " WITH GRANT OPTION" : "";
43
+ const list = this.privileges.map((p) => p.privilege);
44
+ const privSql = formatObjectPrivilegeList("FOREIGN DATA WRAPPER", list, this.version);
45
+ return `GRANT ${privSql} ON FOREIGN DATA WRAPPER ${this.foreignDataWrapper.name} TO ${this.grantee}${withGrant}`;
46
+ }
47
+ }
48
+ /**
49
+ * Revoke privileges on a foreign data wrapper.
50
+ *
51
+ * @see https://www.postgresql.org/docs/17/sql-revoke.html
52
+ *
53
+ * Synopsis
54
+ * ```sql
55
+ * REVOKE [ GRANT OPTION FOR ]
56
+ * { USAGE | ALL [ PRIVILEGES ] }
57
+ * ON FOREIGN DATA WRAPPER name [, ...]
58
+ * FROM role_specification [, ...]
59
+ * [ GRANTED BY role_specification ]
60
+ * [ CASCADE | RESTRICT ]
61
+ * ```
62
+ */
63
+ export class RevokeForeignDataWrapperPrivileges extends AlterForeignDataWrapperChange {
64
+ foreignDataWrapper;
65
+ grantee;
66
+ privileges;
67
+ version;
68
+ scope = "privilege";
69
+ constructor(props) {
70
+ super();
71
+ this.foreignDataWrapper = props.foreignDataWrapper;
72
+ this.grantee = props.grantee;
73
+ this.privileges = props.privileges;
74
+ this.version = props.version;
75
+ }
76
+ get drops() {
77
+ return [stableId.acl(this.foreignDataWrapper.stableId, this.grantee)];
78
+ }
79
+ get requires() {
80
+ return [
81
+ stableId.acl(this.foreignDataWrapper.stableId, this.grantee),
82
+ this.foreignDataWrapper.stableId,
83
+ stableId.role(this.grantee),
84
+ ];
85
+ }
86
+ serialize() {
87
+ const list = this.privileges.map((p) => p.privilege);
88
+ const privSql = formatObjectPrivilegeList("FOREIGN DATA WRAPPER", list, this.version);
89
+ return `REVOKE ${privSql} ON FOREIGN DATA WRAPPER ${this.foreignDataWrapper.name} FROM ${this.grantee}`;
90
+ }
91
+ }
92
+ /**
93
+ * Revoke grant option for privileges on a foreign data wrapper.
94
+ *
95
+ * This removes the ability to grant the privilege to others, but keeps the privilege itself.
96
+ *
97
+ * @see https://www.postgresql.org/docs/17/sql-revoke.html
98
+ */
99
+ export class RevokeGrantOptionForeignDataWrapperPrivileges extends AlterForeignDataWrapperChange {
100
+ foreignDataWrapper;
101
+ grantee;
102
+ privilegeNames;
103
+ version;
104
+ scope = "privilege";
105
+ constructor(props) {
106
+ super();
107
+ this.foreignDataWrapper = props.foreignDataWrapper;
108
+ this.grantee = props.grantee;
109
+ this.privilegeNames = [...new Set(props.privilegeNames)].sort();
110
+ this.version = props.version;
111
+ }
112
+ get requires() {
113
+ return [
114
+ stableId.acl(this.foreignDataWrapper.stableId, this.grantee),
115
+ this.foreignDataWrapper.stableId,
116
+ stableId.role(this.grantee),
117
+ ];
118
+ }
119
+ serialize() {
120
+ const privSql = formatObjectPrivilegeList("FOREIGN DATA WRAPPER", this.privilegeNames, this.version);
121
+ return `REVOKE GRANT OPTION FOR ${privSql} ON FOREIGN DATA WRAPPER ${this.foreignDataWrapper.name} FROM ${this.grantee}`;
122
+ }
123
+ }
@@ -0,0 +1,6 @@
1
+ import type { AlterForeignDataWrapper } from "./foreign-data-wrapper.alter.ts";
2
+ import type { CommentForeignDataWrapper } from "./foreign-data-wrapper.comment.ts";
3
+ import type { CreateForeignDataWrapper } from "./foreign-data-wrapper.create.ts";
4
+ import type { DropForeignDataWrapper } from "./foreign-data-wrapper.drop.ts";
5
+ import type { ForeignDataWrapperPrivilege } from "./foreign-data-wrapper.privilege.ts";
6
+ export type ForeignDataWrapperChange = AlterForeignDataWrapper | CommentForeignDataWrapper | CreateForeignDataWrapper | DropForeignDataWrapper | ForeignDataWrapperPrivilege;
@@ -0,0 +1,18 @@
1
+ import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
2
+ import type { Role } from "../../role/role.model.ts";
3
+ import type { ForeignDataWrapperChange } from "./changes/foreign-data-wrapper.types.ts";
4
+ import type { ForeignDataWrapper } from "./foreign-data-wrapper.model.ts";
5
+ /**
6
+ * Diff two sets of foreign data wrappers from main and branch catalogs.
7
+ *
8
+ * @param ctx - Context containing version, currentUser, and defaultPrivilegeState
9
+ * @param main - The foreign data wrappers in the main catalog.
10
+ * @param branch - The foreign data wrappers in the branch catalog.
11
+ * @returns A list of changes to apply to main to make it match branch.
12
+ */
13
+ export declare function diffForeignDataWrappers(ctx: {
14
+ version: number;
15
+ currentUser: string;
16
+ defaultPrivilegeState: DefaultPrivilegeState;
17
+ mainRoles: Record<string, Role>;
18
+ }, main: Record<string, ForeignDataWrapper>, branch: Record<string, ForeignDataWrapper>): ForeignDataWrapperChange[];
@@ -0,0 +1,221 @@
1
+ import { diffObjects } from "../../base.diff.js";
2
+ import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
3
+ import { AlterForeignDataWrapperChangeOwner, AlterForeignDataWrapperSetOptions, } from "./changes/foreign-data-wrapper.alter.js";
4
+ import { CreateCommentOnForeignDataWrapper, DropCommentOnForeignDataWrapper, } from "./changes/foreign-data-wrapper.comment.js";
5
+ import { CreateForeignDataWrapper } from "./changes/foreign-data-wrapper.create.js";
6
+ import { DropForeignDataWrapper } from "./changes/foreign-data-wrapper.drop.js";
7
+ import { GrantForeignDataWrapperPrivileges, RevokeForeignDataWrapperPrivileges, RevokeGrantOptionForeignDataWrapperPrivileges, } from "./changes/foreign-data-wrapper.privilege.js";
8
+ /**
9
+ * Diff two sets of foreign data wrappers from main and branch catalogs.
10
+ *
11
+ * @param ctx - Context containing version, currentUser, and defaultPrivilegeState
12
+ * @param main - The foreign data wrappers in the main catalog.
13
+ * @param branch - The foreign data wrappers in the branch catalog.
14
+ * @returns A list of changes to apply to main to make it match branch.
15
+ */
16
+ export function diffForeignDataWrappers(ctx, main, branch) {
17
+ const { created, dropped, altered } = diffObjects(main, branch);
18
+ const changes = [];
19
+ for (const fdwId of created) {
20
+ const createdFdw = branch[fdwId];
21
+ changes.push(new CreateForeignDataWrapper({ foreignDataWrapper: createdFdw }));
22
+ // OWNER: If the FDW should be owned by someone other than the current user,
23
+ // emit ALTER FOREIGN DATA WRAPPER ... OWNER TO after creation
24
+ if (createdFdw.owner !== ctx.currentUser) {
25
+ changes.push(new AlterForeignDataWrapperChangeOwner({
26
+ foreignDataWrapper: createdFdw,
27
+ owner: createdFdw.owner,
28
+ }));
29
+ }
30
+ if (createdFdw.comment !== null) {
31
+ changes.push(new CreateCommentOnForeignDataWrapper({
32
+ foreignDataWrapper: createdFdw,
33
+ }));
34
+ }
35
+ // PRIVILEGES: For created objects, compare against default privileges state
36
+ // Foreign Data Wrappers don't have default privileges, so we compare against empty array
37
+ const effectiveDefaults = [];
38
+ const desiredPrivileges = filterPublicBuiltInDefaults("foreign_data_wrapper", createdFdw.privileges);
39
+ // Filter out owner privileges - owner always has ALL privileges implicitly
40
+ const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdFdw.owner, ctx.mainRoles);
41
+ // Generate grant changes
42
+ for (const [grantee, result] of privilegeResults) {
43
+ if (result.grants.length > 0) {
44
+ const grantGroups = groupPrivilegesByGrantable(result.grants);
45
+ for (const [grantable, list] of grantGroups) {
46
+ void grantable;
47
+ changes.push(new GrantForeignDataWrapperPrivileges({
48
+ foreignDataWrapper: createdFdw,
49
+ grantee,
50
+ privileges: list,
51
+ version: ctx.version,
52
+ }));
53
+ }
54
+ }
55
+ // Generate revoke changes
56
+ if (result.revokes.length > 0) {
57
+ const revokeGroups = groupPrivilegesByGrantable(result.revokes);
58
+ for (const [grantable, list] of revokeGroups) {
59
+ void grantable;
60
+ changes.push(new RevokeForeignDataWrapperPrivileges({
61
+ foreignDataWrapper: createdFdw,
62
+ grantee,
63
+ privileges: list,
64
+ version: ctx.version,
65
+ }));
66
+ }
67
+ }
68
+ // Generate revoke grant option changes
69
+ if (result.revokeGrantOption.length > 0) {
70
+ changes.push(new RevokeGrantOptionForeignDataWrapperPrivileges({
71
+ foreignDataWrapper: createdFdw,
72
+ grantee,
73
+ privilegeNames: result.revokeGrantOption,
74
+ version: ctx.version,
75
+ }));
76
+ }
77
+ }
78
+ }
79
+ for (const fdwId of dropped) {
80
+ changes.push(new DropForeignDataWrapper({ foreignDataWrapper: main[fdwId] }));
81
+ }
82
+ for (const fdwId of altered) {
83
+ const mainFdw = main[fdwId];
84
+ const branchFdw = branch[fdwId];
85
+ // OWNER
86
+ if (mainFdw.owner !== branchFdw.owner) {
87
+ changes.push(new AlterForeignDataWrapperChangeOwner({
88
+ foreignDataWrapper: mainFdw,
89
+ owner: branchFdw.owner,
90
+ }));
91
+ }
92
+ // HANDLER - if changed, need to recreate (not directly alterable)
93
+ if (mainFdw.handler !== branchFdw.handler) {
94
+ changes.push(new DropForeignDataWrapper({ foreignDataWrapper: mainFdw }));
95
+ changes.push(new CreateForeignDataWrapper({ foreignDataWrapper: branchFdw }));
96
+ if (branchFdw.comment !== null) {
97
+ changes.push(new CreateCommentOnForeignDataWrapper({
98
+ foreignDataWrapper: branchFdw,
99
+ }));
100
+ }
101
+ continue;
102
+ }
103
+ // VALIDATOR - if changed, need to recreate (not directly alterable)
104
+ if (mainFdw.validator !== branchFdw.validator) {
105
+ changes.push(new DropForeignDataWrapper({ foreignDataWrapper: mainFdw }));
106
+ changes.push(new CreateForeignDataWrapper({ foreignDataWrapper: branchFdw }));
107
+ if (branchFdw.comment !== null) {
108
+ changes.push(new CreateCommentOnForeignDataWrapper({
109
+ foreignDataWrapper: branchFdw,
110
+ }));
111
+ }
112
+ continue;
113
+ }
114
+ // OPTIONS
115
+ const optionsChanged = diffOptions(mainFdw.options, branchFdw.options);
116
+ if (optionsChanged.length > 0) {
117
+ changes.push(new AlterForeignDataWrapperSetOptions({
118
+ foreignDataWrapper: mainFdw,
119
+ options: optionsChanged,
120
+ }));
121
+ }
122
+ // COMMENT
123
+ if (mainFdw.comment !== branchFdw.comment) {
124
+ if (branchFdw.comment === null) {
125
+ changes.push(new DropCommentOnForeignDataWrapper({ foreignDataWrapper: mainFdw }));
126
+ }
127
+ else {
128
+ changes.push(new CreateCommentOnForeignDataWrapper({
129
+ foreignDataWrapper: branchFdw,
130
+ }));
131
+ }
132
+ }
133
+ // PRIVILEGES
134
+ const mainPrivilegesFiltered = filterPublicBuiltInDefaults("foreign_data_wrapper", mainFdw.privileges);
135
+ const branchPrivilegesFiltered = filterPublicBuiltInDefaults("foreign_data_wrapper", branchFdw.privileges);
136
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchFdw.owner, ctx.mainRoles);
137
+ for (const [grantee, result] of privilegeResults) {
138
+ // Generate grant changes
139
+ if (result.grants.length > 0) {
140
+ const grantGroups = groupPrivilegesByGrantable(result.grants);
141
+ for (const [grantable, list] of grantGroups) {
142
+ void grantable;
143
+ changes.push(new GrantForeignDataWrapperPrivileges({
144
+ foreignDataWrapper: branchFdw,
145
+ grantee,
146
+ privileges: list,
147
+ version: ctx.version,
148
+ }));
149
+ }
150
+ }
151
+ // Generate revoke changes
152
+ if (result.revokes.length > 0) {
153
+ const revokeGroups = groupPrivilegesByGrantable(result.revokes);
154
+ for (const [grantable, list] of revokeGroups) {
155
+ void grantable;
156
+ changes.push(new RevokeForeignDataWrapperPrivileges({
157
+ foreignDataWrapper: mainFdw,
158
+ grantee,
159
+ privileges: list,
160
+ version: ctx.version,
161
+ }));
162
+ }
163
+ }
164
+ // Generate revoke grant option changes
165
+ if (result.revokeGrantOption.length > 0) {
166
+ changes.push(new RevokeGrantOptionForeignDataWrapperPrivileges({
167
+ foreignDataWrapper: mainFdw,
168
+ grantee,
169
+ privilegeNames: result.revokeGrantOption,
170
+ version: ctx.version,
171
+ }));
172
+ }
173
+ }
174
+ // Note: FDW renaming would also use ALTER FOREIGN DATA WRAPPER ... RENAME TO ...
175
+ // But since our ForeignDataWrapper model uses 'name' as the identity field,
176
+ // a name change would be handled as drop + create by diffObjects()
177
+ }
178
+ return changes;
179
+ }
180
+ /**
181
+ * Diff options arrays to determine ADD/SET/DROP operations.
182
+ * Options are stored as [key1, value1, key2, value2, ...]
183
+ */
184
+ function diffOptions(mainOptions, branchOptions) {
185
+ const mainMap = new Map();
186
+ const branchMap = new Map();
187
+ // Parse main options
188
+ if (mainOptions) {
189
+ for (let i = 0; i < mainOptions.length; i += 2) {
190
+ if (i + 1 < mainOptions.length) {
191
+ mainMap.set(mainOptions[i], mainOptions[i + 1]);
192
+ }
193
+ }
194
+ }
195
+ // Parse branch options
196
+ if (branchOptions) {
197
+ for (let i = 0; i < branchOptions.length; i += 2) {
198
+ if (i + 1 < branchOptions.length) {
199
+ branchMap.set(branchOptions[i], branchOptions[i + 1]);
200
+ }
201
+ }
202
+ }
203
+ const changes = [];
204
+ // Find options to ADD or SET
205
+ for (const [key, value] of branchMap) {
206
+ const mainValue = mainMap.get(key);
207
+ if (mainValue === undefined) {
208
+ changes.push({ action: "ADD", option: key, value });
209
+ }
210
+ else if (mainValue !== value) {
211
+ changes.push({ action: "SET", option: key, value });
212
+ }
213
+ }
214
+ // Find options to DROP
215
+ for (const [key] of mainMap) {
216
+ if (!branchMap.has(key)) {
217
+ changes.push({ action: "DROP", option: key });
218
+ }
219
+ }
220
+ return changes;
221
+ }