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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (680) hide show
  1. package/README.md +41 -2
  2. package/dist/cli/app.js +26 -3
  3. package/dist/cli/bin/cli.js +5 -0
  4. package/dist/cli/commands/catalog-export.d.ts +5 -0
  5. package/dist/cli/commands/catalog-export.js +64 -0
  6. package/dist/cli/commands/declarative-apply.d.ts +6 -0
  7. package/dist/cli/commands/declarative-apply.js +288 -0
  8. package/dist/cli/commands/declarative-export.d.ts +5 -0
  9. package/dist/cli/commands/declarative-export.js +245 -0
  10. package/dist/cli/commands/plan.js +40 -6
  11. package/dist/cli/exit-code.d.ts +2 -0
  12. package/dist/cli/exit-code.js +7 -0
  13. package/dist/cli/formatters/tree/tree.js +3 -2
  14. package/dist/cli/utils/apply-display.d.ts +52 -0
  15. package/dist/cli/utils/apply-display.js +183 -0
  16. package/dist/cli/utils/export-display.d.ts +43 -0
  17. package/dist/cli/utils/export-display.js +202 -0
  18. package/dist/cli/utils/integrations.d.ts +4 -3
  19. package/dist/cli/utils/integrations.js +25 -16
  20. package/dist/cli/utils/resolve-input.d.ts +7 -0
  21. package/dist/cli/utils/resolve-input.js +13 -0
  22. package/dist/cli/utils.d.ts +2 -0
  23. package/dist/cli/utils.js +1 -1
  24. package/dist/core/catalog-export/index.d.ts +11 -0
  25. package/dist/core/catalog-export/index.js +10 -0
  26. package/dist/core/catalog.diff.d.ts +1 -0
  27. package/dist/core/catalog.diff.js +64 -48
  28. package/dist/core/catalog.model.d.ts +16 -3
  29. package/dist/core/catalog.model.js +132 -30
  30. package/dist/core/catalog.snapshot.d.ts +66 -0
  31. package/dist/core/catalog.snapshot.js +206 -0
  32. package/dist/core/context.d.ts +3 -3
  33. package/dist/core/context.js +7 -10
  34. package/dist/core/declarative-apply/discover-sql.d.ts +18 -0
  35. package/dist/core/declarative-apply/discover-sql.js +86 -0
  36. package/dist/core/declarative-apply/extract-catalog-providers.d.ts +23 -0
  37. package/dist/core/declarative-apply/extract-catalog-providers.js +159 -0
  38. package/dist/core/declarative-apply/index.d.ts +49 -0
  39. package/dist/core/declarative-apply/index.js +134 -0
  40. package/dist/core/declarative-apply/round-apply.d.ts +100 -0
  41. package/dist/core/declarative-apply/round-apply.js +378 -0
  42. package/dist/core/depend.d.ts +2 -2
  43. package/dist/core/depend.js +8 -7
  44. package/dist/core/export/file-mapper.d.ts +71 -0
  45. package/dist/core/export/file-mapper.js +474 -0
  46. package/dist/core/export/grouper.d.ts +13 -0
  47. package/dist/core/export/grouper.js +76 -0
  48. package/dist/core/export/index.d.ts +45 -0
  49. package/dist/core/export/index.js +63 -0
  50. package/dist/core/export/types.d.ts +84 -0
  51. package/dist/core/export/types.js +25 -0
  52. package/dist/core/fingerprint.d.ts +0 -8
  53. package/dist/core/fingerprint.js +2 -2
  54. package/dist/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  55. package/dist/core/integrations/filter/dsl.d.ts +39 -2
  56. package/dist/core/integrations/filter/dsl.js +20 -2
  57. package/dist/core/integrations/filter/extractors.js +42 -0
  58. package/dist/core/integrations/filter/filter.types.d.ts +2 -0
  59. package/dist/core/integrations/filter/filter.types.js +1 -0
  60. package/dist/core/integrations/integration-dsl.d.ts +10 -0
  61. package/dist/core/integrations/integration.types.d.ts +2 -1
  62. package/dist/core/integrations/serialize/dsl.d.ts +1 -1
  63. package/dist/core/integrations/serialize/serialize.types.d.ts +2 -0
  64. package/dist/core/integrations/serialize/serialize.types.js +1 -0
  65. package/dist/core/integrations/supabase.d.ts +18 -0
  66. package/dist/core/integrations/supabase.js +125 -0
  67. package/dist/core/objects/aggregate/aggregate.diff.d.ts +2 -8
  68. package/dist/core/objects/aggregate/aggregate.diff.js +16 -70
  69. package/dist/core/objects/aggregate/aggregate.model.d.ts +2 -2
  70. package/dist/core/objects/aggregate/aggregate.model.js +8 -10
  71. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  72. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  73. package/dist/core/objects/base.privilege-diff.d.ts +38 -13
  74. package/dist/core/objects/base.privilege-diff.js +104 -22
  75. package/dist/core/objects/base.privilege.d.ts +1 -0
  76. package/dist/core/objects/base.privilege.js +9 -2
  77. package/dist/core/objects/collation/collation.diff.d.ts +2 -3
  78. package/dist/core/objects/collation/collation.model.d.ts +2 -2
  79. package/dist/core/objects/collation/collation.model.js +29 -28
  80. package/dist/core/objects/diff-context.d.ts +15 -0
  81. package/dist/core/objects/diff-context.js +1 -0
  82. package/dist/core/objects/domain/changes/domain.create.js +4 -2
  83. package/dist/core/objects/domain/domain.diff.d.ts +2 -8
  84. package/dist/core/objects/domain/domain.diff.js +16 -77
  85. package/dist/core/objects/domain/domain.model.d.ts +2 -2
  86. package/dist/core/objects/domain/domain.model.js +9 -11
  87. package/dist/core/objects/event-trigger/event-trigger.diff.d.ts +2 -3
  88. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +2 -2
  89. package/dist/core/objects/event-trigger/event-trigger.model.js +7 -9
  90. package/dist/core/objects/extension/extension.model.d.ts +2 -2
  91. package/dist/core/objects/extension/extension.model.js +8 -10
  92. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.d.ts +2 -8
  93. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.js +13 -77
  94. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.d.ts +2 -2
  95. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.js +22 -24
  96. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.d.ts +2 -8
  97. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -77
  98. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +2 -2
  99. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +21 -23
  100. package/dist/core/objects/foreign-data-wrapper/server/server.diff.d.ts +2 -8
  101. package/dist/core/objects/foreign-data-wrapper/server/server.diff.js +13 -77
  102. package/dist/core/objects/foreign-data-wrapper/server/server.model.d.ts +2 -2
  103. package/dist/core/objects/foreign-data-wrapper/server/server.model.js +20 -22
  104. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.d.ts +2 -2
  105. package/dist/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.js +20 -22
  106. package/dist/core/objects/index/index.model.d.ts +4 -4
  107. package/dist/core/objects/index/index.model.js +9 -11
  108. package/dist/core/objects/language/language.diff.d.ts +2 -5
  109. package/dist/core/objects/language/language.diff.js +7 -39
  110. package/dist/core/objects/language/language.model.js +5 -7
  111. package/dist/core/objects/materialized-view/materialized-view.diff.d.ts +2 -8
  112. package/dist/core/objects/materialized-view/materialized-view.diff.js +16 -158
  113. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +2 -2
  114. package/dist/core/objects/materialized-view/materialized-view.model.js +9 -11
  115. package/dist/core/objects/procedure/changes/procedure.alter.js +12 -12
  116. package/dist/core/objects/procedure/procedure.diff.d.ts +2 -8
  117. package/dist/core/objects/procedure/procedure.diff.js +16 -77
  118. package/dist/core/objects/procedure/procedure.model.d.ts +2 -2
  119. package/dist/core/objects/procedure/procedure.model.js +9 -11
  120. package/dist/core/objects/publication/changes/publication.alter.d.ts +0 -9
  121. package/dist/core/objects/publication/changes/publication.alter.js +0 -14
  122. package/dist/core/objects/publication/changes/publication.types.d.ts +2 -2
  123. package/dist/core/objects/publication/publication.diff.d.ts +2 -3
  124. package/dist/core/objects/publication/publication.diff.js +8 -13
  125. package/dist/core/objects/publication/publication.model.d.ts +2 -2
  126. package/dist/core/objects/publication/publication.model.js +7 -9
  127. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  128. package/dist/core/objects/rls-policy/rls-policy.model.d.ts +2 -2
  129. package/dist/core/objects/rls-policy/rls-policy.model.js +8 -10
  130. package/dist/core/objects/role/role.diff.js +22 -1
  131. package/dist/core/objects/role/role.model.d.ts +3 -2
  132. package/dist/core/objects/role/role.model.js +146 -40
  133. package/dist/core/objects/rule/rule.model.d.ts +2 -2
  134. package/dist/core/objects/rule/rule.model.js +7 -9
  135. package/dist/core/objects/schema/schema.diff.d.ts +2 -8
  136. package/dist/core/objects/schema/schema.diff.js +16 -77
  137. package/dist/core/objects/schema/schema.model.d.ts +2 -2
  138. package/dist/core/objects/schema/schema.model.js +9 -11
  139. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -8
  140. package/dist/core/objects/sequence/sequence.diff.js +16 -79
  141. package/dist/core/objects/sequence/sequence.model.d.ts +2 -2
  142. package/dist/core/objects/sequence/sequence.model.js +9 -11
  143. package/dist/core/objects/subscription/subscription.diff.d.ts +2 -3
  144. package/dist/core/objects/subscription/subscription.model.d.ts +2 -2
  145. package/dist/core/objects/subscription/subscription.model.js +25 -20
  146. package/dist/core/objects/table/changes/table.create.js +3 -0
  147. package/dist/core/objects/table/table.diff.d.ts +2 -8
  148. package/dist/core/objects/table/table.diff.js +26 -157
  149. package/dist/core/objects/table/table.model.d.ts +7 -4
  150. package/dist/core/objects/table/table.model.js +12 -11
  151. package/dist/core/objects/trigger/changes/trigger.alter.js +23 -0
  152. package/dist/core/objects/trigger/changes/trigger.create.js +4 -5
  153. package/dist/core/objects/trigger/trigger.model.d.ts +11 -2
  154. package/dist/core/objects/trigger/trigger.model.js +22 -10
  155. package/dist/core/objects/type/composite-type/composite-type.diff.d.ts +2 -8
  156. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -77
  157. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +2 -2
  158. package/dist/core/objects/type/composite-type/composite-type.model.js +10 -11
  159. package/dist/core/objects/type/enum/enum.diff.d.ts +2 -8
  160. package/dist/core/objects/type/enum/enum.diff.js +25 -112
  161. package/dist/core/objects/type/enum/enum.model.d.ts +2 -2
  162. package/dist/core/objects/type/enum/enum.model.js +23 -25
  163. package/dist/core/objects/type/range/changes/range.create.js +6 -3
  164. package/dist/core/objects/type/range/range.diff.d.ts +2 -8
  165. package/dist/core/objects/type/range/range.diff.js +16 -77
  166. package/dist/core/objects/type/range/range.model.d.ts +2 -2
  167. package/dist/core/objects/type/range/range.model.js +8 -10
  168. package/dist/core/objects/view/view.diff.d.ts +2 -8
  169. package/dist/core/objects/view/view.diff.js +16 -158
  170. package/dist/core/objects/view/view.model.d.ts +17 -3
  171. package/dist/core/objects/view/view.model.js +11 -23
  172. package/dist/core/plan/apply.d.ts +2 -2
  173. package/dist/core/plan/apply.js +33 -16
  174. package/dist/core/plan/create.d.ts +20 -7
  175. package/dist/core/plan/create.js +153 -112
  176. package/dist/core/plan/index.d.ts +1 -2
  177. package/dist/core/plan/index.js +0 -1
  178. package/dist/core/plan/serialize.js +16 -4
  179. package/dist/core/plan/sql-format/constants.d.ts +2 -0
  180. package/dist/core/plan/sql-format/constants.js +11 -0
  181. package/dist/core/plan/sql-format/fixtures.d.ts +2 -0
  182. package/dist/core/plan/sql-format/fixtures.js +2447 -0
  183. package/dist/core/plan/sql-format/format-utils.d.ts +37 -0
  184. package/dist/core/plan/sql-format/format-utils.js +274 -0
  185. package/dist/core/plan/sql-format/formatters.d.ts +20 -0
  186. package/dist/core/plan/sql-format/formatters.js +737 -0
  187. package/dist/core/plan/sql-format/index.d.ts +2 -0
  188. package/dist/core/plan/sql-format/index.js +98 -0
  189. package/dist/core/plan/sql-format/keyword-case.d.ts +2 -0
  190. package/dist/core/plan/sql-format/keyword-case.js +893 -0
  191. package/dist/core/plan/sql-format/protect.d.ts +3 -0
  192. package/dist/core/plan/sql-format/protect.js +269 -0
  193. package/dist/core/plan/sql-format/sql-scanner.d.ts +59 -0
  194. package/dist/core/plan/sql-format/sql-scanner.js +202 -0
  195. package/dist/core/plan/sql-format/tokenizer.d.ts +22 -0
  196. package/dist/core/plan/sql-format/tokenizer.js +118 -0
  197. package/dist/core/plan/sql-format/types.d.ts +28 -0
  198. package/dist/core/plan/sql-format/types.js +1 -0
  199. package/dist/core/plan/sql-format/wrap.d.ts +2 -0
  200. package/dist/core/plan/sql-format/wrap.js +165 -0
  201. package/dist/core/plan/sql-format.d.ts +2 -0
  202. package/dist/core/plan/sql-format.js +1 -0
  203. package/dist/core/plan/ssl-config.d.ts +32 -0
  204. package/dist/core/plan/ssl-config.js +115 -0
  205. package/dist/core/plan/statements.d.ts +2 -1
  206. package/dist/core/plan/statements.js +6 -2
  207. package/dist/core/plan/types.d.ts +10 -15
  208. package/dist/core/postgres-config.d.ts +47 -3
  209. package/dist/core/postgres-config.js +225 -39
  210. package/dist/core/sort/graph-builder.js +10 -0
  211. package/dist/core/sort/logical-sort.js +31 -23
  212. package/dist/core/test-utils/assert-valid-sql.d.ts +10 -0
  213. package/dist/core/test-utils/assert-valid-sql.js +19 -0
  214. package/dist/index.d.ts +18 -1
  215. package/dist/index.js +16 -1
  216. package/package.json +58 -21
  217. package/src/cli/app.ts +52 -0
  218. package/src/cli/bin/cli.ts +15 -0
  219. package/src/cli/commands/apply.ts +101 -0
  220. package/src/cli/commands/catalog-export.ts +78 -0
  221. package/src/cli/commands/declarative-apply.diagnostics.test.ts +77 -0
  222. package/src/cli/commands/declarative-apply.ts +380 -0
  223. package/src/cli/commands/declarative-export.ts +330 -0
  224. package/src/cli/commands/plan.ts +216 -0
  225. package/src/cli/commands/sync.ts +185 -0
  226. package/src/cli/exit-code.test.ts +19 -0
  227. package/src/cli/exit-code.ts +7 -0
  228. package/src/cli/formatters/index.ts +5 -0
  229. package/src/cli/formatters/tree/tree-builder.ts +380 -0
  230. package/src/cli/formatters/tree/tree-renderer.ts +372 -0
  231. package/src/cli/formatters/tree/tree.ts +238 -0
  232. package/src/cli/utils/apply-display.test.ts +348 -0
  233. package/src/cli/utils/apply-display.ts +238 -0
  234. package/src/cli/utils/export-display.test.ts +103 -0
  235. package/src/cli/utils/export-display.ts +275 -0
  236. package/src/cli/utils/integrations.test.ts +44 -0
  237. package/src/cli/utils/integrations.ts +42 -0
  238. package/src/cli/utils/resolve-input.test.ts +38 -0
  239. package/src/cli/utils/resolve-input.ts +17 -0
  240. package/src/cli/utils.ts +231 -0
  241. package/src/core/catalog-export/index.ts +20 -0
  242. package/src/core/catalog.diff.ts +247 -0
  243. package/src/core/catalog.model.test.ts +122 -0
  244. package/src/core/catalog.model.ts +510 -0
  245. package/src/core/catalog.snapshot.test.ts +477 -0
  246. package/src/core/catalog.snapshot.ts +289 -0
  247. package/src/core/change.types.ts +44 -0
  248. package/src/core/context.ts +26 -0
  249. package/src/core/declarative-apply/discover-sql.test.ts +103 -0
  250. package/src/core/declarative-apply/discover-sql.ts +107 -0
  251. package/src/core/declarative-apply/extract-catalog-providers.ts +220 -0
  252. package/src/core/declarative-apply/index.test.ts +67 -0
  253. package/src/core/declarative-apply/index.ts +205 -0
  254. package/src/core/declarative-apply/round-apply.test.ts +504 -0
  255. package/src/core/declarative-apply/round-apply.ts +562 -0
  256. package/src/core/depend.ts +1870 -0
  257. package/src/core/expand-replace-dependencies.test.ts +70 -0
  258. package/src/core/expand-replace-dependencies.ts +380 -0
  259. package/src/core/export/file-mapper.test.ts +816 -0
  260. package/src/core/export/file-mapper.ts +574 -0
  261. package/src/core/export/grouper.ts +108 -0
  262. package/src/core/export/index.ts +129 -0
  263. package/src/core/export/types.ts +104 -0
  264. package/src/core/fingerprint.ts +204 -0
  265. package/src/core/fixtures/empty-catalogs/postgres-15-16-baseline.json +287 -0
  266. package/src/core/integrations/filter/dsl.test.ts +211 -0
  267. package/src/core/integrations/filter/dsl.ts +266 -0
  268. package/src/core/integrations/filter/extractors.test.ts +244 -0
  269. package/src/core/integrations/filter/extractors.ts +187 -0
  270. package/src/core/integrations/filter/filter.types.ts +3 -0
  271. package/src/core/integrations/integration-dsl.ts +34 -0
  272. package/src/core/integrations/integration.types.ts +7 -0
  273. package/src/core/integrations/serialize/dsl.test.ts +91 -0
  274. package/src/core/integrations/serialize/dsl.ts +77 -0
  275. package/src/core/integrations/serialize/serialize.types.ts +3 -0
  276. package/src/core/integrations/supabase.ts +130 -0
  277. package/src/core/objects/aggregate/aggregate.diff.test.ts +215 -0
  278. package/src/core/objects/aggregate/aggregate.diff.ts +222 -0
  279. package/src/core/objects/aggregate/aggregate.model.ts +317 -0
  280. package/src/core/objects/aggregate/changes/aggregate.alter.test.ts +66 -0
  281. package/src/core/objects/aggregate/changes/aggregate.alter.ts +32 -0
  282. package/src/core/objects/aggregate/changes/aggregate.base.ts +20 -0
  283. package/src/core/objects/aggregate/changes/aggregate.comment.test.ts +89 -0
  284. package/src/core/objects/aggregate/changes/aggregate.comment.ts +62 -0
  285. package/src/core/objects/aggregate/changes/aggregate.create.test.ts +104 -0
  286. package/src/core/objects/aggregate/changes/aggregate.create.ts +329 -0
  287. package/src/core/objects/aggregate/changes/aggregate.drop.test.ts +82 -0
  288. package/src/core/objects/aggregate/changes/aggregate.drop.ts +32 -0
  289. package/src/core/objects/aggregate/changes/aggregate.privilege.test.ts +136 -0
  290. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +146 -0
  291. package/src/core/objects/aggregate/changes/aggregate.types.ts +12 -0
  292. package/src/core/objects/base.change.ts +62 -0
  293. package/src/core/objects/base.default-privileges.ts +204 -0
  294. package/src/core/objects/base.diff.ts +20 -0
  295. package/src/core/objects/base.model.ts +82 -0
  296. package/src/core/objects/base.privilege-diff.ts +447 -0
  297. package/src/core/objects/base.privilege.ts +191 -0
  298. package/src/core/objects/collation/changes/collation.alter.test.ts +68 -0
  299. package/src/core/objects/collation/changes/collation.alter.ts +79 -0
  300. package/src/core/objects/collation/changes/collation.base.ts +20 -0
  301. package/src/core/objects/collation/changes/collation.comment.ts +68 -0
  302. package/src/core/objects/collation/changes/collation.create.test.ts +56 -0
  303. package/src/core/objects/collation/changes/collation.create.ts +106 -0
  304. package/src/core/objects/collation/changes/collation.drop.test.ts +31 -0
  305. package/src/core/objects/collation/changes/collation.drop.ts +37 -0
  306. package/src/core/objects/collation/changes/collation.types.ts +10 -0
  307. package/src/core/objects/collation/collation.diff.test.ts +97 -0
  308. package/src/core/objects/collation/collation.diff.ts +127 -0
  309. package/src/core/objects/collation/collation.model.ts +224 -0
  310. package/src/core/objects/diff-context.ts +16 -0
  311. package/src/core/objects/domain/changes/domain.alter.test.ts +335 -0
  312. package/src/core/objects/domain/changes/domain.alter.ts +286 -0
  313. package/src/core/objects/domain/changes/domain.base.ts +20 -0
  314. package/src/core/objects/domain/changes/domain.comment.ts +59 -0
  315. package/src/core/objects/domain/changes/domain.create.test.ts +95 -0
  316. package/src/core/objects/domain/changes/domain.create.ts +124 -0
  317. package/src/core/objects/domain/changes/domain.drop.test.ts +33 -0
  318. package/src/core/objects/domain/changes/domain.drop.ts +34 -0
  319. package/src/core/objects/domain/changes/domain.privilege.ts +171 -0
  320. package/src/core/objects/domain/changes/domain.types.ts +12 -0
  321. package/src/core/objects/domain/domain.diff.test.ts +284 -0
  322. package/src/core/objects/domain/domain.diff.ts +295 -0
  323. package/src/core/objects/domain/domain.model.ts +190 -0
  324. package/src/core/objects/event-trigger/changes/event-trigger.alter.test.ts +57 -0
  325. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +82 -0
  326. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +20 -0
  327. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +66 -0
  328. package/src/core/objects/event-trigger/changes/event-trigger.create.test.ts +27 -0
  329. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +72 -0
  330. package/src/core/objects/event-trigger/changes/event-trigger.drop.test.ts +25 -0
  331. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +34 -0
  332. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +10 -0
  333. package/src/core/objects/event-trigger/event-trigger.diff.test.ts +131 -0
  334. package/src/core/objects/event-trigger/event-trigger.diff.ts +127 -0
  335. package/src/core/objects/event-trigger/event-trigger.model.ts +106 -0
  336. package/src/core/objects/extension/changes/extension.alter.test.ts +63 -0
  337. package/src/core/objects/extension/changes/extension.alter.ts +78 -0
  338. package/src/core/objects/extension/changes/extension.base.ts +20 -0
  339. package/src/core/objects/extension/changes/extension.comment.ts +64 -0
  340. package/src/core/objects/extension/changes/extension.create.test.ts +28 -0
  341. package/src/core/objects/extension/changes/extension.create.ts +63 -0
  342. package/src/core/objects/extension/changes/extension.drop.test.ts +26 -0
  343. package/src/core/objects/extension/changes/extension.drop.ts +34 -0
  344. package/src/core/objects/extension/changes/extension.types.ts +10 -0
  345. package/src/core/objects/extension/extension.diff.test.ts +42 -0
  346. package/src/core/objects/extension/extension.diff.ts +90 -0
  347. package/src/core/objects/extension/extension.model.test.ts +98 -0
  348. package/src/core/objects/extension/extension.model.ts +280 -0
  349. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.test.ts +136 -0
  350. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +101 -0
  351. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.base.ts +20 -0
  352. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +72 -0
  353. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.test.ts +160 -0
  354. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +95 -0
  355. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.test.ts +26 -0
  356. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +36 -0
  357. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +172 -0
  358. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.types.ts +12 -0
  359. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.test.ts +286 -0
  360. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.diff.ts +271 -0
  361. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/foreign-data-wrapper.model.ts +149 -0
  362. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper.types.ts +10 -0
  363. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.test.ts +340 -0
  364. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +341 -0
  365. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +20 -0
  366. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +72 -0
  367. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.test.ts +210 -0
  368. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +81 -0
  369. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.test.ts +46 -0
  370. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +37 -0
  371. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +181 -0
  372. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +12 -0
  373. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.test.ts +813 -0
  374. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +343 -0
  375. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +242 -0
  376. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.test.ts +183 -0
  377. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +126 -0
  378. package/src/core/objects/foreign-data-wrapper/server/changes/server.base.ts +20 -0
  379. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +60 -0
  380. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.test.ts +144 -0
  381. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +81 -0
  382. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.test.ts +27 -0
  383. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +34 -0
  384. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +164 -0
  385. package/src/core/objects/foreign-data-wrapper/server/changes/server.types.ts +12 -0
  386. package/src/core/objects/foreign-data-wrapper/server/server.diff.test.ts +262 -0
  387. package/src/core/objects/foreign-data-wrapper/server/server.diff.ts +247 -0
  388. package/src/core/objects/foreign-data-wrapper/server/server.model.ts +133 -0
  389. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.test.ts +91 -0
  390. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +69 -0
  391. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.base.ts +20 -0
  392. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.test.ts +96 -0
  393. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +66 -0
  394. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.test.ts +60 -0
  395. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +40 -0
  396. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.types.ts +8 -0
  397. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.test.ts +77 -0
  398. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.diff.ts +107 -0
  399. package/src/core/objects/foreign-data-wrapper/user-mapping/user-mapping.model.ts +96 -0
  400. package/src/core/objects/index/changes/index.alter.test.ts +209 -0
  401. package/src/core/objects/index/changes/index.alter.ts +144 -0
  402. package/src/core/objects/index/changes/index.base.ts +20 -0
  403. package/src/core/objects/index/changes/index.comment.ts +63 -0
  404. package/src/core/objects/index/changes/index.create.test.ts +69 -0
  405. package/src/core/objects/index/changes/index.create.ts +68 -0
  406. package/src/core/objects/index/changes/index.drop.test.ts +47 -0
  407. package/src/core/objects/index/changes/index.drop.ts +34 -0
  408. package/src/core/objects/index/changes/index.types.ts +6 -0
  409. package/src/core/objects/index/changes/utils.ts +16 -0
  410. package/src/core/objects/index/index.diff.test.ts +153 -0
  411. package/src/core/objects/index/index.diff.ts +243 -0
  412. package/src/core/objects/index/index.model.ts +370 -0
  413. package/src/core/objects/language/changes/language.alter.test.ts +36 -0
  414. package/src/core/objects/language/changes/language.alter.ts +53 -0
  415. package/src/core/objects/language/changes/language.base.ts +20 -0
  416. package/src/core/objects/language/changes/language.comment.ts +58 -0
  417. package/src/core/objects/language/changes/language.create.test.ts +30 -0
  418. package/src/core/objects/language/changes/language.create.ts +104 -0
  419. package/src/core/objects/language/changes/language.drop.test.ts +28 -0
  420. package/src/core/objects/language/changes/language.drop.ts +39 -0
  421. package/src/core/objects/language/changes/language.privilege.ts +172 -0
  422. package/src/core/objects/language/changes/language.types.ts +12 -0
  423. package/src/core/objects/language/language.diff.test.ts +135 -0
  424. package/src/core/objects/language/language.diff.ts +144 -0
  425. package/src/core/objects/language/language.model.ts +150 -0
  426. package/src/core/objects/materialized-view/changes/materialized-view.alter.test.ts +130 -0
  427. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +113 -0
  428. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +20 -0
  429. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +176 -0
  430. package/src/core/objects/materialized-view/changes/materialized-view.create.test.ts +69 -0
  431. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +93 -0
  432. package/src/core/objects/materialized-view/changes/materialized-view.drop.test.ts +37 -0
  433. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +60 -0
  434. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +212 -0
  435. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +12 -0
  436. package/src/core/objects/materialized-view/materialized-view.diff.test.ts +264 -0
  437. package/src/core/objects/materialized-view/materialized-view.diff.ts +301 -0
  438. package/src/core/objects/materialized-view/materialized-view.model.ts +258 -0
  439. package/src/core/objects/procedure/changes/procedure.alter.test.ts +1077 -0
  440. package/src/core/objects/procedure/changes/procedure.alter.ts +290 -0
  441. package/src/core/objects/procedure/changes/procedure.base.ts +20 -0
  442. package/src/core/objects/procedure/changes/procedure.comment.ts +70 -0
  443. package/src/core/objects/procedure/changes/procedure.create.test.ts +51 -0
  444. package/src/core/objects/procedure/changes/procedure.create.ts +92 -0
  445. package/src/core/objects/procedure/changes/procedure.drop.test.ts +90 -0
  446. package/src/core/objects/procedure/changes/procedure.drop.ts +49 -0
  447. package/src/core/objects/procedure/changes/procedure.privilege.ts +188 -0
  448. package/src/core/objects/procedure/changes/procedure.types.ts +12 -0
  449. package/src/core/objects/procedure/procedure.diff.test.ts +161 -0
  450. package/src/core/objects/procedure/procedure.diff.ts +341 -0
  451. package/src/core/objects/procedure/procedure.model.ts +264 -0
  452. package/src/core/objects/procedure/utils.ts +58 -0
  453. package/src/core/objects/publication/changes/publication.alter.test.ts +217 -0
  454. package/src/core/objects/publication/changes/publication.alter.ts +225 -0
  455. package/src/core/objects/publication/changes/publication.base.ts +20 -0
  456. package/src/core/objects/publication/changes/publication.comment.test.ts +73 -0
  457. package/src/core/objects/publication/changes/publication.comment.ts +64 -0
  458. package/src/core/objects/publication/changes/publication.create.test.ts +90 -0
  459. package/src/core/objects/publication/changes/publication.create.ts +82 -0
  460. package/src/core/objects/publication/changes/publication.drop.test.ts +48 -0
  461. package/src/core/objects/publication/changes/publication.drop.ts +29 -0
  462. package/src/core/objects/publication/changes/publication.types.ts +24 -0
  463. package/src/core/objects/publication/publication.diff.test.ts +297 -0
  464. package/src/core/objects/publication/publication.diff.ts +247 -0
  465. package/src/core/objects/publication/publication.model.ts +206 -0
  466. package/src/core/objects/publication/utils.ts +55 -0
  467. package/src/core/objects/rls-policy/changes/rls-policy.alter.test.ts +267 -0
  468. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +128 -0
  469. package/src/core/objects/rls-policy/changes/rls-policy.base.ts +20 -0
  470. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +69 -0
  471. package/src/core/objects/rls-policy/changes/rls-policy.create.test.ts +81 -0
  472. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +100 -0
  473. package/src/core/objects/rls-policy/changes/rls-policy.drop.test.ts +31 -0
  474. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +39 -0
  475. package/src/core/objects/rls-policy/changes/rls-policy.types.ts +10 -0
  476. package/src/core/objects/rls-policy/rls-policy.diff.test.ts +79 -0
  477. package/src/core/objects/rls-policy/rls-policy.diff.ts +121 -0
  478. package/src/core/objects/rls-policy/rls-policy.model.ts +140 -0
  479. package/src/core/objects/role/changes/role.alter.test.ts +362 -0
  480. package/src/core/objects/role/changes/role.alter.ts +110 -0
  481. package/src/core/objects/role/changes/role.base.ts +24 -0
  482. package/src/core/objects/role/changes/role.comment.ts +55 -0
  483. package/src/core/objects/role/changes/role.create.test.ts +56 -0
  484. package/src/core/objects/role/changes/role.create.ts +102 -0
  485. package/src/core/objects/role/changes/role.drop.test.ts +32 -0
  486. package/src/core/objects/role/changes/role.drop.ts +34 -0
  487. package/src/core/objects/role/changes/role.privilege.ts +376 -0
  488. package/src/core/objects/role/changes/role.types.ts +12 -0
  489. package/src/core/objects/role/role.diff.test.ts +279 -0
  490. package/src/core/objects/role/role.diff.ts +499 -0
  491. package/src/core/objects/role/role.model.ts +452 -0
  492. package/src/core/objects/rule/changes/rule.alter.test.ts +82 -0
  493. package/src/core/objects/rule/changes/rule.alter.ts +72 -0
  494. package/src/core/objects/rule/changes/rule.base.ts +20 -0
  495. package/src/core/objects/rule/changes/rule.comment.test.ts +58 -0
  496. package/src/core/objects/rule/changes/rule.comment.ts +62 -0
  497. package/src/core/objects/rule/changes/rule.create.test.ts +63 -0
  498. package/src/core/objects/rule/changes/rule.create.ts +42 -0
  499. package/src/core/objects/rule/changes/rule.drop.test.ts +40 -0
  500. package/src/core/objects/rule/changes/rule.drop.ts +29 -0
  501. package/src/core/objects/rule/changes/rule.types.ts +12 -0
  502. package/src/core/objects/rule/rule.diff.test.ts +132 -0
  503. package/src/core/objects/rule/rule.diff.ts +79 -0
  504. package/src/core/objects/rule/rule.model.ts +173 -0
  505. package/src/core/objects/schema/changes/schema.alter.test.ts +31 -0
  506. package/src/core/objects/schema/changes/schema.alter.ts +45 -0
  507. package/src/core/objects/schema/changes/schema.base.ts +20 -0
  508. package/src/core/objects/schema/changes/schema.comment.ts +56 -0
  509. package/src/core/objects/schema/changes/schema.create.test.ts +25 -0
  510. package/src/core/objects/schema/changes/schema.create.ts +47 -0
  511. package/src/core/objects/schema/changes/schema.drop.test.ts +23 -0
  512. package/src/core/objects/schema/changes/schema.drop.ts +34 -0
  513. package/src/core/objects/schema/changes/schema.privilege.ts +175 -0
  514. package/src/core/objects/schema/changes/schema.types.ts +12 -0
  515. package/src/core/objects/schema/schema.diff.test.ts +42 -0
  516. package/src/core/objects/schema/schema.diff.ts +146 -0
  517. package/src/core/objects/schema/schema.model.ts +107 -0
  518. package/src/core/objects/sequence/changes/sequence.alter.test.ts +157 -0
  519. package/src/core/objects/sequence/changes/sequence.alter.ts +115 -0
  520. package/src/core/objects/sequence/changes/sequence.base.ts +20 -0
  521. package/src/core/objects/sequence/changes/sequence.comment.ts +60 -0
  522. package/src/core/objects/sequence/changes/sequence.create.test.ts +89 -0
  523. package/src/core/objects/sequence/changes/sequence.create.ts +111 -0
  524. package/src/core/objects/sequence/changes/sequence.drop.test.ts +35 -0
  525. package/src/core/objects/sequence/changes/sequence.drop.ts +37 -0
  526. package/src/core/objects/sequence/changes/sequence.privilege.ts +179 -0
  527. package/src/core/objects/sequence/changes/sequence.types.ts +12 -0
  528. package/src/core/objects/sequence/sequence.diff.test.ts +255 -0
  529. package/src/core/objects/sequence/sequence.diff.ts +294 -0
  530. package/src/core/objects/sequence/sequence.model.ts +185 -0
  531. package/src/core/objects/subscription/changes/subscription.alter.test.ts +134 -0
  532. package/src/core/objects/subscription/changes/subscription.alter.ts +110 -0
  533. package/src/core/objects/subscription/changes/subscription.base.ts +20 -0
  534. package/src/core/objects/subscription/changes/subscription.comment.test.ts +70 -0
  535. package/src/core/objects/subscription/changes/subscription.comment.ts +64 -0
  536. package/src/core/objects/subscription/changes/subscription.create.test.ts +80 -0
  537. package/src/core/objects/subscription/changes/subscription.create.ts +69 -0
  538. package/src/core/objects/subscription/changes/subscription.drop.test.ts +48 -0
  539. package/src/core/objects/subscription/changes/subscription.drop.ts +20 -0
  540. package/src/core/objects/subscription/changes/subscription.types.ts +22 -0
  541. package/src/core/objects/subscription/subscription.diff.test.ts +237 -0
  542. package/src/core/objects/subscription/subscription.diff.ts +242 -0
  543. package/src/core/objects/subscription/subscription.model.ts +190 -0
  544. package/src/core/objects/subscription/utils.ts +156 -0
  545. package/src/core/objects/table/changes/table.alter.test.ts +846 -0
  546. package/src/core/objects/table/changes/table.alter.ts +806 -0
  547. package/src/core/objects/table/changes/table.base.ts +20 -0
  548. package/src/core/objects/table/changes/table.comment.ts +266 -0
  549. package/src/core/objects/table/changes/table.create.test.ts +188 -0
  550. package/src/core/objects/table/changes/table.create.ts +192 -0
  551. package/src/core/objects/table/changes/table.drop.test.ts +36 -0
  552. package/src/core/objects/table/changes/table.drop.ts +45 -0
  553. package/src/core/objects/table/changes/table.privilege.ts +200 -0
  554. package/src/core/objects/table/changes/table.types.ts +12 -0
  555. package/src/core/objects/table/table.diff.test.ts +868 -0
  556. package/src/core/objects/table/table.diff.ts +817 -0
  557. package/src/core/objects/table/table.model.ts +460 -0
  558. package/src/core/objects/trigger/changes/trigger.alter.test.ts +50 -0
  559. package/src/core/objects/trigger/changes/trigger.alter.ts +76 -0
  560. package/src/core/objects/trigger/changes/trigger.base.ts +20 -0
  561. package/src/core/objects/trigger/changes/trigger.comment.ts +64 -0
  562. package/src/core/objects/trigger/changes/trigger.create.test.ts +47 -0
  563. package/src/core/objects/trigger/changes/trigger.create.ts +88 -0
  564. package/src/core/objects/trigger/changes/trigger.drop.test.ts +47 -0
  565. package/src/core/objects/trigger/changes/trigger.drop.ts +39 -0
  566. package/src/core/objects/trigger/changes/trigger.types.ts +10 -0
  567. package/src/core/objects/trigger/trigger.diff.test.ts +84 -0
  568. package/src/core/objects/trigger/trigger.diff.ts +116 -0
  569. package/src/core/objects/trigger/trigger.model.ts +264 -0
  570. package/src/core/objects/type/composite-type/changes/composite-type.alter.test.ts +208 -0
  571. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +174 -0
  572. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +20 -0
  573. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +145 -0
  574. package/src/core/objects/type/composite-type/changes/composite-type.create.test.ts +106 -0
  575. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +95 -0
  576. package/src/core/objects/type/composite-type/changes/composite-type.drop.test.ts +36 -0
  577. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +37 -0
  578. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +175 -0
  579. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +12 -0
  580. package/src/core/objects/type/composite-type/composite-type.diff.test.ts +269 -0
  581. package/src/core/objects/type/composite-type/composite-type.diff.ts +310 -0
  582. package/src/core/objects/type/composite-type/composite-type.model.ts +253 -0
  583. package/src/core/objects/type/enum/changes/enum.alter.test.ts +113 -0
  584. package/src/core/objects/type/enum/changes/enum.alter.ts +91 -0
  585. package/src/core/objects/type/enum/changes/enum.base.ts +20 -0
  586. package/src/core/objects/type/enum/changes/enum.comment.ts +64 -0
  587. package/src/core/objects/type/enum/changes/enum.create.test.ts +31 -0
  588. package/src/core/objects/type/enum/changes/enum.create.ts +56 -0
  589. package/src/core/objects/type/enum/changes/enum.drop.test.ts +28 -0
  590. package/src/core/objects/type/enum/changes/enum.drop.ts +34 -0
  591. package/src/core/objects/type/enum/changes/enum.privilege.ts +175 -0
  592. package/src/core/objects/type/enum/changes/enum.types.ts +12 -0
  593. package/src/core/objects/type/enum/enum.diff.test.ts +372 -0
  594. package/src/core/objects/type/enum/enum.diff.ts +308 -0
  595. package/src/core/objects/type/enum/enum.model.ts +194 -0
  596. package/src/core/objects/type/range/changes/range.alter.test.ts +29 -0
  597. package/src/core/objects/type/range/changes/range.alter.ts +51 -0
  598. package/src/core/objects/type/range/changes/range.base.ts +20 -0
  599. package/src/core/objects/type/range/changes/range.comment.ts +64 -0
  600. package/src/core/objects/type/range/changes/range.create.test.ts +54 -0
  601. package/src/core/objects/type/range/changes/range.create.ts +155 -0
  602. package/src/core/objects/type/range/changes/range.drop.test.ts +28 -0
  603. package/src/core/objects/type/range/changes/range.drop.ts +34 -0
  604. package/src/core/objects/type/range/changes/range.privilege.ts +175 -0
  605. package/src/core/objects/type/range/changes/range.types.ts +12 -0
  606. package/src/core/objects/type/range/range.diff.test.ts +147 -0
  607. package/src/core/objects/type/range/range.diff.ts +197 -0
  608. package/src/core/objects/type/range/range.model.ts +187 -0
  609. package/src/core/objects/type/type.types.ts +5 -0
  610. package/src/core/objects/utils.ts +171 -0
  611. package/src/core/objects/view/changes/view.alter.test.ts +115 -0
  612. package/src/core/objects/view/changes/view.alter.ts +112 -0
  613. package/src/core/objects/view/changes/view.base.ts +20 -0
  614. package/src/core/objects/view/changes/view.comment.ts +59 -0
  615. package/src/core/objects/view/changes/view.create.test.ts +70 -0
  616. package/src/core/objects/view/changes/view.create.ts +73 -0
  617. package/src/core/objects/view/changes/view.drop.test.ts +37 -0
  618. package/src/core/objects/view/changes/view.drop.ts +40 -0
  619. package/src/core/objects/view/changes/view.privilege.ts +200 -0
  620. package/src/core/objects/view/changes/view.types.ts +12 -0
  621. package/src/core/objects/view/view.diff.test.ts +173 -0
  622. package/src/core/objects/view/view.diff.ts +215 -0
  623. package/src/core/objects/view/view.model.ts +262 -0
  624. package/src/core/plan/apply.ts +172 -0
  625. package/src/core/plan/create.ts +384 -0
  626. package/src/core/plan/hierarchy.ts +574 -0
  627. package/src/core/plan/index.ts +29 -0
  628. package/src/core/plan/io.ts +20 -0
  629. package/src/core/plan/risk.ts +48 -0
  630. package/src/core/plan/serialize.test.ts +317 -0
  631. package/src/core/plan/serialize.ts +209 -0
  632. package/src/core/plan/sql-format/constants.ts +13 -0
  633. package/src/core/plan/sql-format/fixtures.ts +2803 -0
  634. package/src/core/plan/sql-format/format-comment-literals.test.ts +96 -0
  635. package/src/core/plan/sql-format/format-functions.test.ts +127 -0
  636. package/src/core/plan/sql-format/format-lowercase-coverage.test.ts +119 -0
  637. package/src/core/plan/sql-format/format-off.test.ts +806 -0
  638. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1061 -0
  639. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1279 -0
  640. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1057 -0
  641. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1048 -0
  642. package/src/core/plan/sql-format/format-stress.test.ts +616 -0
  643. package/src/core/plan/sql-format/format-utils.test.ts +91 -0
  644. package/src/core/plan/sql-format/format-utils.ts +391 -0
  645. package/src/core/plan/sql-format/formatters.ts +921 -0
  646. package/src/core/plan/sql-format/index.ts +149 -0
  647. package/src/core/plan/sql-format/keyword-case.test.ts +118 -0
  648. package/src/core/plan/sql-format/keyword-case.ts +1120 -0
  649. package/src/core/plan/sql-format/protect.test.ts +127 -0
  650. package/src/core/plan/sql-format/protect.ts +337 -0
  651. package/src/core/plan/sql-format/sql-scanner.test.ts +240 -0
  652. package/src/core/plan/sql-format/sql-scanner.ts +252 -0
  653. package/src/core/plan/sql-format/tokenizer.test.ts +68 -0
  654. package/src/core/plan/sql-format/tokenizer.ts +152 -0
  655. package/src/core/plan/sql-format/types.ts +31 -0
  656. package/src/core/plan/sql-format/wrap.test.ts +119 -0
  657. package/src/core/plan/sql-format/wrap.ts +196 -0
  658. package/src/core/plan/sql-format.ts +2 -0
  659. package/src/core/plan/ssl-config.ts +172 -0
  660. package/src/core/plan/statements.ts +22 -0
  661. package/src/core/plan/types.ts +171 -0
  662. package/src/core/postgres-config.ts +293 -0
  663. package/src/core/sort/custom-constraints.ts +161 -0
  664. package/src/core/sort/debug-visualization.ts +239 -0
  665. package/src/core/sort/dependency-filter.ts +224 -0
  666. package/src/core/sort/graph-builder.ts +235 -0
  667. package/src/core/sort/graph-utils.ts +51 -0
  668. package/src/core/sort/logical-sort.test.ts +371 -0
  669. package/src/core/sort/logical-sort.ts +597 -0
  670. package/src/core/sort/sort-changes.ts +234 -0
  671. package/src/core/sort/topological-sort.test.ts +275 -0
  672. package/src/core/sort/topological-sort.ts +184 -0
  673. package/src/core/sort/types.ts +112 -0
  674. package/src/core/sort/utils.ts +69 -0
  675. package/src/core/test-utils/assert-valid-sql.ts +20 -0
  676. package/src/index.ts +41 -0
  677. package/dist/core/index.d.ts +0 -15
  678. package/dist/core/index.js +0 -14
  679. package/dist/core/main.d.ts +0 -5
  680. package/dist/core/main.js +0 -44
@@ -1,5 +1,4 @@
1
- import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
2
- import type { Role } from "../../role/role.model.ts";
1
+ import type { ObjectDiffContext } from "../../diff-context.ts";
3
2
  import type { ForeignTableChange } from "./changes/foreign-table.types.ts";
4
3
  import type { ForeignTable } from "./foreign-table.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import type { ForeignTable } from "./foreign-table.model.ts";
10
9
  * @param branch - The foreign tables in the branch catalog.
11
10
  * @returns A list of changes to apply to main to make it match branch.
12
11
  */
13
- export declare function diffForeignTables(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, ForeignTable>, branch: Record<string, ForeignTable>): ForeignTableChange[];
12
+ export declare function diffForeignTables(ctx: Pick<ObjectDiffContext, "version" | "currentUser" | "defaultPrivilegeState">, main: Record<string, ForeignTable>, branch: Record<string, ForeignTable>): ForeignTableChange[];
@@ -1,5 +1,5 @@
1
1
  import { diffObjects } from "../../base.diff.js";
2
- import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
2
+ import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../../base.privilege-diff.js";
3
3
  import { AlterForeignTableAddColumn, AlterForeignTableAlterColumnDropDefault, AlterForeignTableAlterColumnDropNotNull, AlterForeignTableAlterColumnSetDefault, AlterForeignTableAlterColumnSetNotNull, AlterForeignTableAlterColumnType, AlterForeignTableChangeOwner, AlterForeignTableDropColumn, AlterForeignTableSetOptions, } from "./changes/foreign-table.alter.js";
4
4
  import { CreateCommentOnForeignTable, DropCommentOnForeignTable, } from "./changes/foreign-table.comment.js";
5
5
  import { CreateForeignTable } from "./changes/foreign-table.create.js";
@@ -32,45 +32,16 @@ export function diffForeignTables(ctx, main, branch) {
32
32
  }
33
33
  // PRIVILEGES: For created objects, compare against default privileges state
34
34
  const effectiveDefaults = ctx.defaultPrivilegeState.getEffectiveDefaults(ctx.currentUser, "foreign_table", createdTable.schema ?? "");
35
+ const creatorFilteredDefaults = createdTable.owner !== ctx.currentUser
36
+ ? effectiveDefaults.filter((p) => p.grantee !== ctx.currentUser)
37
+ : effectiveDefaults;
35
38
  const desiredPrivileges = filterPublicBuiltInDefaults("foreign_table", createdTable.privileges);
36
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdTable.owner, ctx.mainRoles);
37
- // Generate grant changes
38
- for (const [grantee, result] of privilegeResults) {
39
- if (result.grants.length > 0) {
40
- const grantGroups = groupPrivilegesByGrantable(result.grants);
41
- for (const [grantable, list] of grantGroups) {
42
- void grantable;
43
- changes.push(new GrantForeignTablePrivileges({
44
- foreignTable: createdTable,
45
- grantee,
46
- privileges: list,
47
- version: ctx.version,
48
- }));
49
- }
50
- }
51
- // Generate revoke changes
52
- if (result.revokes.length > 0) {
53
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
54
- for (const [grantable, list] of revokeGroups) {
55
- void grantable;
56
- changes.push(new RevokeForeignTablePrivileges({
57
- foreignTable: createdTable,
58
- grantee,
59
- privileges: list,
60
- version: ctx.version,
61
- }));
62
- }
63
- }
64
- // Generate revoke grant option changes
65
- if (result.revokeGrantOption.length > 0) {
66
- changes.push(new RevokeGrantOptionForeignTablePrivileges({
67
- foreignTable: createdTable,
68
- grantee,
69
- privilegeNames: result.revokeGrantOption,
70
- version: ctx.version,
71
- }));
72
- }
73
- }
39
+ const privilegeResults = diffPrivileges(filterPublicBuiltInDefaults("foreign_table", creatorFilteredDefaults), desiredPrivileges, createdTable.owner);
40
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, createdTable, createdTable, "foreignTable", {
41
+ Grant: GrantForeignTablePrivileges,
42
+ Revoke: RevokeForeignTablePrivileges,
43
+ RevokeGrantOption: RevokeGrantOptionForeignTablePrivileges,
44
+ }, ctx.version));
74
45
  }
75
46
  for (const tableId of dropped) {
76
47
  changes.push(new DropForeignTable({ foreignTable: main[tableId] }));
@@ -180,44 +151,12 @@ export function diffForeignTables(ctx, main, branch) {
180
151
  // PRIVILEGES
181
152
  const mainPrivilegesFiltered = filterPublicBuiltInDefaults("foreign_table", mainTable.privileges);
182
153
  const branchPrivilegesFiltered = filterPublicBuiltInDefaults("foreign_table", branchTable.privileges);
183
- const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchTable.owner, ctx.mainRoles);
184
- for (const [grantee, result] of privilegeResults) {
185
- // Generate grant changes
186
- if (result.grants.length > 0) {
187
- const grantGroups = groupPrivilegesByGrantable(result.grants);
188
- for (const [grantable, list] of grantGroups) {
189
- void grantable;
190
- changes.push(new GrantForeignTablePrivileges({
191
- foreignTable: branchTable,
192
- grantee,
193
- privileges: list,
194
- version: ctx.version,
195
- }));
196
- }
197
- }
198
- // Generate revoke changes
199
- if (result.revokes.length > 0) {
200
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
201
- for (const [grantable, list] of revokeGroups) {
202
- void grantable;
203
- changes.push(new RevokeForeignTablePrivileges({
204
- foreignTable: mainTable,
205
- grantee,
206
- privileges: list,
207
- version: ctx.version,
208
- }));
209
- }
210
- }
211
- // Generate revoke grant option changes
212
- if (result.revokeGrantOption.length > 0) {
213
- changes.push(new RevokeGrantOptionForeignTablePrivileges({
214
- foreignTable: mainTable,
215
- grantee,
216
- privilegeNames: result.revokeGrantOption,
217
- version: ctx.version,
218
- }));
219
- }
220
- }
154
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchTable.owner);
155
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchTable, mainTable, "foreignTable", {
156
+ Grant: GrantForeignTablePrivileges,
157
+ Revoke: RevokeForeignTablePrivileges,
158
+ RevokeGrantOption: RevokeGrantOptionForeignTablePrivileges,
159
+ }, ctx.version));
221
160
  // Note: Foreign table renaming would also use ALTER FOREIGN TABLE ... RENAME TO ...
222
161
  // But since our ForeignTable model uses 'name' as the identity field,
223
162
  // a name change would be handled as drop + create by diffObjects()
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel, type TableLikeObject } from "../../base.model.ts";
4
4
  import { type PrivilegeProps } from "../../base.privilege-diff.ts";
@@ -113,5 +113,5 @@ export declare class ForeignTable extends BasePgModel implements TableLikeObject
113
113
  };
114
114
  };
115
115
  }
116
- export declare function extractForeignTables(sql: Sql): Promise<ForeignTable[]>;
116
+ export declare function extractForeignTables(pool: Pool): Promise<ForeignTable[]>;
117
117
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel, columnPropsSchema, } from "../../base.model.js";
3
4
  import { privilegePropsSchema, } from "../../base.privilege-diff.js";
@@ -82,10 +83,8 @@ export class ForeignTable extends BasePgModel {
82
83
  };
83
84
  }
84
85
  }
85
- export async function extractForeignTables(sql) {
86
- return sql.begin(async (sql) => {
87
- await sql `set search_path = ''`;
88
- const tableRows = await sql `
86
+ export async function extractForeignTables(pool) {
87
+ const { rows: tableRows } = await pool.query(sql `
89
88
  with extension_oids as (
90
89
  select objid
91
90
  from pg_depend d
@@ -169,7 +168,7 @@ export async function extractForeignTables(sql) {
169
168
  from (
170
169
  -- one row for object ACL + one row per column ACL
171
170
  select null::name as attname, ft.oid as relacl_oid, (
172
- select c_rel.relacl from pg_class c_rel where c_rel.oid = ft.oid
171
+ select COALESCE(c_rel.relacl, acldefault('r', c_rel.relowner)) from pg_class c_rel where c_rel.oid = ft.oid
173
172
  ) as acl
174
173
  union all
175
174
  select a2.attname, ft.oid as relacl_oid, a2.attacl
@@ -191,25 +190,24 @@ export async function extractForeignTables(sql) {
191
190
  group by
192
191
  ft.oid, ft.schema, ft.name, ft.owner, ft.server, ft.options
193
192
  order by
194
- ft.schema, ft.name;
195
- `;
196
- // Validate and parse each row using the Zod schema
197
- const validatedRows = tableRows.map((row) => {
198
- const parsed = foreignTablePropsSchema.parse(row);
199
- // Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
200
- if (parsed.options && parsed.options.length > 0) {
201
- const parsedOptions = [];
202
- for (const opt of parsed.options) {
203
- const eqIndex = opt.indexOf("=");
204
- if (eqIndex > 0) {
205
- parsedOptions.push(opt.substring(0, eqIndex));
206
- parsedOptions.push(opt.substring(eqIndex + 1));
207
- }
193
+ ft.schema, ft.name
194
+ `);
195
+ // Validate and parse each row using the Zod schema
196
+ const validatedRows = tableRows.map((row) => {
197
+ const parsed = foreignTablePropsSchema.parse(row);
198
+ // Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
199
+ if (parsed.options && parsed.options.length > 0) {
200
+ const parsedOptions = [];
201
+ for (const opt of parsed.options) {
202
+ const eqIndex = opt.indexOf("=");
203
+ if (eqIndex > 0) {
204
+ parsedOptions.push(opt.substring(0, eqIndex));
205
+ parsedOptions.push(opt.substring(eqIndex + 1));
208
206
  }
209
- parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
210
207
  }
211
- return parsed;
212
- });
213
- return validatedRows.map((row) => new ForeignTable(row));
208
+ parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
209
+ }
210
+ return parsed;
214
211
  });
212
+ return validatedRows.map((row) => new ForeignTable(row));
215
213
  }
@@ -1,5 +1,4 @@
1
- import type { DefaultPrivilegeState } from "../../base.default-privileges.ts";
2
- import type { Role } from "../../role/role.model.ts";
1
+ import type { ObjectDiffContext } from "../../diff-context.ts";
3
2
  import type { ServerChange } from "./changes/server.types.ts";
4
3
  import type { Server } from "./server.model.ts";
5
4
  /**
@@ -10,9 +9,4 @@ import type { Server } from "./server.model.ts";
10
9
  * @param branch - The servers in the branch catalog.
11
10
  * @returns A list of changes to apply to main to make it match branch.
12
11
  */
13
- export declare function diffServers(ctx: {
14
- version: number;
15
- currentUser: string;
16
- defaultPrivilegeState: DefaultPrivilegeState;
17
- mainRoles: Record<string, Role>;
18
- }, main: Record<string, Server>, branch: Record<string, Server>): ServerChange[];
12
+ export declare function diffServers(ctx: Pick<ObjectDiffContext, "version" | "currentUser">, main: Record<string, Server>, branch: Record<string, Server>): ServerChange[];
@@ -1,5 +1,5 @@
1
1
  import { diffObjects } from "../../base.diff.js";
2
- import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../../base.privilege-diff.js";
2
+ import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../../base.privilege-diff.js";
3
3
  import { AlterServerChangeOwner, AlterServerSetOptions, AlterServerSetVersion, } from "./changes/server.alter.js";
4
4
  import { CreateCommentOnServer, DropCommentOnServer, } from "./changes/server.comment.js";
5
5
  import { CreateServer } from "./changes/server.create.js";
@@ -33,44 +33,12 @@ export function diffServers(ctx, main, branch) {
33
33
  // PRIVILEGES: Servers don't have default privileges
34
34
  const effectiveDefaults = [];
35
35
  const desiredPrivileges = filterPublicBuiltInDefaults("server", createdServer.privileges);
36
- const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdServer.owner, ctx.mainRoles);
37
- // Generate grant changes
38
- for (const [grantee, result] of privilegeResults) {
39
- if (result.grants.length > 0) {
40
- const grantGroups = groupPrivilegesByGrantable(result.grants);
41
- for (const [grantable, list] of grantGroups) {
42
- void grantable;
43
- changes.push(new GrantServerPrivileges({
44
- server: createdServer,
45
- grantee,
46
- privileges: list,
47
- version: ctx.version,
48
- }));
49
- }
50
- }
51
- // Generate revoke changes
52
- if (result.revokes.length > 0) {
53
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
54
- for (const [grantable, list] of revokeGroups) {
55
- void grantable;
56
- changes.push(new RevokeServerPrivileges({
57
- server: createdServer,
58
- grantee,
59
- privileges: list,
60
- version: ctx.version,
61
- }));
62
- }
63
- }
64
- // Generate revoke grant option changes
65
- if (result.revokeGrantOption.length > 0) {
66
- changes.push(new RevokeGrantOptionServerPrivileges({
67
- server: createdServer,
68
- grantee,
69
- privilegeNames: result.revokeGrantOption,
70
- version: ctx.version,
71
- }));
72
- }
73
- }
36
+ const privilegeResults = diffPrivileges(effectiveDefaults, desiredPrivileges, createdServer.owner);
37
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, createdServer, createdServer, "server", {
38
+ Grant: GrantServerPrivileges,
39
+ Revoke: RevokeServerPrivileges,
40
+ RevokeGrantOption: RevokeGrantOptionServerPrivileges,
41
+ }, ctx.version));
74
42
  }
75
43
  for (const serverId of dropped) {
76
44
  changes.push(new DropServer({ server: main[serverId] }));
@@ -121,44 +89,12 @@ export function diffServers(ctx, main, branch) {
121
89
  // PRIVILEGES
122
90
  const mainPrivilegesFiltered = filterPublicBuiltInDefaults("server", mainServer.privileges);
123
91
  const branchPrivilegesFiltered = filterPublicBuiltInDefaults("server", branchServer.privileges);
124
- const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchServer.owner, ctx.mainRoles);
125
- for (const [grantee, result] of privilegeResults) {
126
- // Generate grant changes
127
- if (result.grants.length > 0) {
128
- const grantGroups = groupPrivilegesByGrantable(result.grants);
129
- for (const [grantable, list] of grantGroups) {
130
- void grantable;
131
- changes.push(new GrantServerPrivileges({
132
- server: branchServer,
133
- grantee,
134
- privileges: list,
135
- version: ctx.version,
136
- }));
137
- }
138
- }
139
- // Generate revoke changes
140
- if (result.revokes.length > 0) {
141
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
142
- for (const [grantable, list] of revokeGroups) {
143
- void grantable;
144
- changes.push(new RevokeServerPrivileges({
145
- server: mainServer,
146
- grantee,
147
- privileges: list,
148
- version: ctx.version,
149
- }));
150
- }
151
- }
152
- // Generate revoke grant option changes
153
- if (result.revokeGrantOption.length > 0) {
154
- changes.push(new RevokeGrantOptionServerPrivileges({
155
- server: mainServer,
156
- grantee,
157
- privilegeNames: result.revokeGrantOption,
158
- version: ctx.version,
159
- }));
160
- }
161
- }
92
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchServer.owner);
93
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchServer, mainServer, "server", {
94
+ Grant: GrantServerPrivileges,
95
+ Revoke: RevokeServerPrivileges,
96
+ RevokeGrantOption: RevokeGrantOptionServerPrivileges,
97
+ }, ctx.version));
162
98
  // Note: Server renaming would also use ALTER SERVER ... RENAME TO ...
163
99
  // But since our Server model uses 'name' as the identity field,
164
100
  // a name change would be handled as drop + create by diffObjects()
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel } from "../../base.model.ts";
4
4
  import { type PrivilegeProps } from "../../base.privilege-diff.ts";
@@ -58,5 +58,5 @@ export declare class Server extends BasePgModel {
58
58
  }[];
59
59
  };
60
60
  }
61
- export declare function extractServers(sql: Sql): Promise<Server[]>;
61
+ export declare function extractServers(pool: Pool): Promise<Server[]>;
62
62
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel } from "../../base.model.js";
3
4
  import { privilegePropsSchema, } from "../../base.privilege-diff.js";
@@ -63,10 +64,8 @@ export class Server extends BasePgModel {
63
64
  };
64
65
  }
65
66
  }
66
- export async function extractServers(sql) {
67
- return sql.begin(async (sql) => {
68
- await sql `set search_path = ''`;
69
- const serverRows = await sql `
67
+ export async function extractServers(pool) {
68
+ const { rows: serverRows } = await pool.query(sql `
70
69
  select
71
70
  quote_ident(srv.srvname) as name,
72
71
  srv.srvowner::regrole::text as owner,
@@ -94,25 +93,24 @@ export async function extractServers(sql) {
94
93
  where
95
94
  not fdw.fdwname like any(array['pg\\_%'])
96
95
  order by
97
- srv.srvname;
98
- `;
99
- // Validate and parse each row using the Zod schema
100
- const validatedRows = serverRows.map((row) => {
101
- const parsed = serverPropsSchema.parse(row);
102
- // Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
103
- if (parsed.options && parsed.options.length > 0) {
104
- const parsedOptions = [];
105
- for (const opt of parsed.options) {
106
- const eqIndex = opt.indexOf("=");
107
- if (eqIndex > 0) {
108
- parsedOptions.push(opt.substring(0, eqIndex));
109
- parsedOptions.push(opt.substring(eqIndex + 1));
110
- }
96
+ srv.srvname
97
+ `);
98
+ // Validate and parse each row using the Zod schema
99
+ const validatedRows = serverRows.map((row) => {
100
+ const parsed = serverPropsSchema.parse(row);
101
+ // Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
102
+ if (parsed.options && parsed.options.length > 0) {
103
+ const parsedOptions = [];
104
+ for (const opt of parsed.options) {
105
+ const eqIndex = opt.indexOf("=");
106
+ if (eqIndex > 0) {
107
+ parsedOptions.push(opt.substring(0, eqIndex));
108
+ parsedOptions.push(opt.substring(eqIndex + 1));
111
109
  }
112
- parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
113
110
  }
114
- return parsed;
115
- });
116
- return validatedRows.map((row) => new Server(row));
111
+ parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
112
+ }
113
+ return parsed;
117
114
  });
115
+ return validatedRows.map((row) => new Server(row));
118
116
  }
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel } from "../../base.model.ts";
4
4
  /**
@@ -32,5 +32,5 @@ export declare class UserMapping extends BasePgModel {
32
32
  options: string[] | null;
33
33
  };
34
34
  }
35
- export declare function extractUserMappings(sql: Sql): Promise<UserMapping[]>;
35
+ export declare function extractUserMappings(pool: Pool): Promise<UserMapping[]>;
36
36
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel } from "../../base.model.js";
3
4
  /**
@@ -43,10 +44,8 @@ export class UserMapping extends BasePgModel {
43
44
  };
44
45
  }
45
46
  }
46
- export async function extractUserMappings(sql) {
47
- return sql.begin(async (sql) => {
48
- await sql `set search_path = ''`;
49
- const mappingRows = await sql `
47
+ export async function extractUserMappings(pool) {
48
+ const { rows: mappingRows } = await pool.query(sql `
50
49
  select
51
50
  case
52
51
  when um.umuser = 0 then 'PUBLIC'
@@ -61,25 +60,24 @@ export async function extractUserMappings(sql) {
61
60
  where
62
61
  not fdw.fdwname like any(array['pg\\_%'])
63
62
  order by
64
- srv.srvname, um.umuser;
65
- `;
66
- // Validate and parse each row using the Zod schema
67
- const validatedRows = mappingRows.map((row) => {
68
- const parsed = userMappingPropsSchema.parse(row);
69
- // Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
70
- if (parsed.options && parsed.options.length > 0) {
71
- const parsedOptions = [];
72
- for (const opt of parsed.options) {
73
- const eqIndex = opt.indexOf("=");
74
- if (eqIndex > 0) {
75
- parsedOptions.push(opt.substring(0, eqIndex));
76
- parsedOptions.push(opt.substring(eqIndex + 1));
77
- }
63
+ srv.srvname, um.umuser
64
+ `);
65
+ // Validate and parse each row using the Zod schema
66
+ const validatedRows = mappingRows.map((row) => {
67
+ const parsed = userMappingPropsSchema.parse(row);
68
+ // Parse options from PostgreSQL format ['key=value'] to ['key', 'value']
69
+ if (parsed.options && parsed.options.length > 0) {
70
+ const parsedOptions = [];
71
+ for (const opt of parsed.options) {
72
+ const eqIndex = opt.indexOf("=");
73
+ if (eqIndex > 0) {
74
+ parsedOptions.push(opt.substring(0, eqIndex));
75
+ parsedOptions.push(opt.substring(eqIndex + 1));
78
76
  }
79
- parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
80
77
  }
81
- return parsed;
82
- });
83
- return validatedRows.map((row) => new UserMapping(row));
78
+ parsed.options = parsedOptions.length > 0 ? parsedOptions : null;
79
+ }
80
+ return parsed;
84
81
  });
82
+ return validatedRows.map((row) => new UserMapping(row));
85
83
  }
@@ -1,4 +1,4 @@
1
- import type { Sql } from "postgres";
1
+ import type { Pool } from "pg";
2
2
  import z from "zod";
3
3
  import { BasePgModel } from "../base.model.ts";
4
4
  declare const indexPropsSchema: z.ZodObject<{
@@ -17,7 +17,7 @@ declare const indexPropsSchema: z.ZodObject<{
17
17
  is_clustered: z.ZodBoolean;
18
18
  is_replica_identity: z.ZodBoolean;
19
19
  key_columns: z.ZodArray<z.ZodNumber>;
20
- column_collations: z.ZodArray<z.ZodString>;
20
+ column_collations: z.ZodArray<z.ZodNullable<z.ZodString>>;
21
21
  operator_classes: z.ZodArray<z.ZodString>;
22
22
  column_options: z.ZodArray<z.ZodNumber>;
23
23
  index_expressions: z.ZodNullable<z.ZodString>;
@@ -98,7 +98,7 @@ export declare class Index extends BasePgModel {
98
98
  immediate: boolean;
99
99
  is_clustered: boolean;
100
100
  is_replica_identity: boolean;
101
- column_collations: string[];
101
+ column_collations: (string | null)[];
102
102
  operator_classes: string[];
103
103
  column_options: number[];
104
104
  index_expressions: string | null;
@@ -146,5 +146,5 @@ export declare class Index extends BasePgModel {
146
146
  };
147
147
  };
148
148
  }
149
- export declare function extractIndexes(sql: Sql): Promise<Index[]>;
149
+ export declare function extractIndexes(pool: Pool): Promise<Index[]>;
150
150
  export {};
@@ -1,3 +1,4 @@
1
+ import { sql } from "@ts-safeql/sql-tag";
1
2
  import z from "zod";
2
3
  import { BasePgModel } from "../base.model.js";
3
4
  const TableRelkindSchema = z.enum([
@@ -21,7 +22,7 @@ const indexPropsSchema = z.object({
21
22
  is_clustered: z.boolean(),
22
23
  is_replica_identity: z.boolean(),
23
24
  key_columns: z.array(z.number()),
24
- column_collations: z.array(z.string()),
25
+ column_collations: z.array(z.string().nullable()),
25
26
  operator_classes: z.array(z.string()),
26
27
  column_options: z.array(z.number()),
27
28
  index_expressions: z.string().nullable(),
@@ -174,10 +175,8 @@ export class Index extends BasePgModel {
174
175
  };
175
176
  }
176
177
  }
177
- export async function extractIndexes(sql) {
178
- return sql.begin(async (sql) => {
179
- await sql `set search_path = ''`;
180
- const indexRows = await sql `
178
+ export async function extractIndexes(pool) {
179
+ const { rows: indexRows } = await pool.query(sql `
181
180
  with extension_oids as (
182
181
  select objid
183
182
  from pg_depend d
@@ -331,10 +330,9 @@ export async function extractIndexes(sql) {
331
330
  and e.objid is null
332
331
  and e_table.objid is null
333
332
 
334
- order by 1, 2;
335
- `;
336
- // Validate and parse each row using the Zod schema
337
- const validatedRows = indexRows.map((row) => indexPropsSchema.parse(row));
338
- return validatedRows.map((row) => new Index(row));
339
- });
333
+ order by 1, 2
334
+ `);
335
+ // Validate and parse each row using the Zod schema
336
+ const validatedRows = indexRows.map((row) => indexPropsSchema.parse(row));
337
+ return validatedRows.map((row) => new Index(row));
340
338
  }
@@ -1,5 +1,5 @@
1
1
  import type { Change } from "../../change.types.ts";
2
- import type { Role } from "../role/role.model.ts";
2
+ import type { ObjectDiffContext } from "../diff-context.ts";
3
3
  import type { Language } from "./language.model.ts";
4
4
  /**
5
5
  * Diff two sets of languages from main and branch catalogs.
@@ -9,7 +9,4 @@ import type { Language } from "./language.model.ts";
9
9
  * @param branch - The languages in the branch catalog.
10
10
  * @returns A list of changes to apply to main to make it match branch.
11
11
  */
12
- export declare function diffLanguages(ctx: {
13
- version: number;
14
- mainRoles?: Record<string, Role>;
15
- }, main: Record<string, Language>, branch: Record<string, Language>): Change[];
12
+ export declare function diffLanguages(ctx: Pick<ObjectDiffContext, "version">, main: Record<string, Language>, branch: Record<string, Language>): Change[];
@@ -1,5 +1,5 @@
1
1
  import { diffObjects } from "../base.diff.js";
2
- import { diffPrivileges, filterPublicBuiltInDefaults, groupPrivilegesByGrantable, } from "../base.privilege-diff.js";
2
+ import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../base.privilege-diff.js";
3
3
  import { hasNonAlterableChanges } from "../utils.js";
4
4
  import { AlterLanguageChangeOwner } from "./changes/language.alter.js";
5
5
  import { CreateCommentOnLanguage, DropCommentOnLanguage, } from "./changes/language.comment.js";
@@ -73,44 +73,12 @@ export function diffLanguages(ctx, main, branch) {
73
73
  const branchPrivilegesFiltered = filterPublicBuiltInDefaults("language", branchLanguage.privileges);
74
74
  // Filter out owner privileges - owner always has ALL privileges implicitly
75
75
  // and shouldn't be compared. Use branch owner as the reference.
76
- const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchLanguage.owner, ctx.mainRoles);
77
- for (const [grantee, result] of privilegeResults) {
78
- // Generate grant changes
79
- if (result.grants.length > 0) {
80
- const grantGroups = groupPrivilegesByGrantable(result.grants);
81
- for (const [grantable, list] of grantGroups) {
82
- void grantable;
83
- changes.push(new GrantLanguagePrivileges({
84
- language: branchLanguage,
85
- grantee,
86
- privileges: list,
87
- version: ctx.version,
88
- }));
89
- }
90
- }
91
- // Generate revoke changes
92
- if (result.revokes.length > 0) {
93
- const revokeGroups = groupPrivilegesByGrantable(result.revokes);
94
- for (const [grantable, list] of revokeGroups) {
95
- void grantable;
96
- changes.push(new RevokeLanguagePrivileges({
97
- language: mainLanguage,
98
- grantee,
99
- privileges: list,
100
- version: ctx.version,
101
- }));
102
- }
103
- }
104
- // Generate revoke grant option changes
105
- if (result.revokeGrantOption.length > 0) {
106
- changes.push(new RevokeGrantOptionLanguagePrivileges({
107
- language: mainLanguage,
108
- grantee,
109
- privilegeNames: result.revokeGrantOption,
110
- version: ctx.version,
111
- }));
112
- }
113
- }
76
+ const privilegeResults = diffPrivileges(mainPrivilegesFiltered, branchPrivilegesFiltered, branchLanguage.owner);
77
+ changes.push(...emitObjectPrivilegeChanges(privilegeResults, branchLanguage, mainLanguage, "language", {
78
+ Grant: GrantLanguagePrivileges,
79
+ Revoke: RevokeLanguagePrivileges,
80
+ RevokeGrantOption: RevokeGrantOptionLanguagePrivileges,
81
+ }, ctx.version));
114
82
  }
115
83
  }
116
84
  return changes;