@supabase/pg-delta 1.0.0-alpha.11 → 1.0.0-alpha.13

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 (397) hide show
  1. package/dist/core/expand-replace-dependencies.js +23 -0
  2. package/dist/core/export/index.d.ts +2 -2
  3. package/dist/core/export/index.js +4 -1
  4. package/dist/core/integrations/integration.types.d.ts +26 -1
  5. package/dist/core/integrations/integration.types.js +31 -1
  6. package/dist/core/integrations/serialize/dsl.d.ts +1 -8
  7. package/dist/core/integrations/serialize/serialize.types.d.ts +31 -0
  8. package/dist/core/integrations/supabase.js +19 -0
  9. package/dist/core/objects/aggregate/changes/aggregate.alter.d.ts +2 -1
  10. package/dist/core/objects/aggregate/changes/aggregate.alter.js +1 -1
  11. package/dist/core/objects/aggregate/changes/aggregate.comment.d.ts +3 -2
  12. package/dist/core/objects/aggregate/changes/aggregate.comment.js +2 -2
  13. package/dist/core/objects/aggregate/changes/aggregate.create.d.ts +2 -1
  14. package/dist/core/objects/aggregate/changes/aggregate.create.js +1 -1
  15. package/dist/core/objects/aggregate/changes/aggregate.drop.d.ts +2 -1
  16. package/dist/core/objects/aggregate/changes/aggregate.drop.js +1 -1
  17. package/dist/core/objects/aggregate/changes/aggregate.privilege.d.ts +4 -3
  18. package/dist/core/objects/aggregate/changes/aggregate.privilege.js +3 -3
  19. package/dist/core/objects/base.change.d.ts +2 -1
  20. package/dist/core/objects/collation/changes/collation.alter.d.ts +3 -2
  21. package/dist/core/objects/collation/changes/collation.alter.js +2 -2
  22. package/dist/core/objects/collation/changes/collation.comment.d.ts +3 -2
  23. package/dist/core/objects/collation/changes/collation.comment.js +2 -2
  24. package/dist/core/objects/collation/changes/collation.create.d.ts +2 -1
  25. package/dist/core/objects/collation/changes/collation.create.js +1 -1
  26. package/dist/core/objects/collation/changes/collation.drop.d.ts +2 -1
  27. package/dist/core/objects/collation/changes/collation.drop.js +1 -1
  28. package/dist/core/objects/domain/changes/domain.alter.d.ts +9 -8
  29. package/dist/core/objects/domain/changes/domain.alter.js +8 -8
  30. package/dist/core/objects/domain/changes/domain.comment.d.ts +3 -2
  31. package/dist/core/objects/domain/changes/domain.comment.js +2 -2
  32. package/dist/core/objects/domain/changes/domain.create.d.ts +2 -1
  33. package/dist/core/objects/domain/changes/domain.create.js +1 -1
  34. package/dist/core/objects/domain/changes/domain.drop.d.ts +2 -1
  35. package/dist/core/objects/domain/changes/domain.drop.js +1 -1
  36. package/dist/core/objects/domain/changes/domain.privilege.d.ts +4 -3
  37. package/dist/core/objects/domain/changes/domain.privilege.js +3 -3
  38. package/dist/core/objects/event-trigger/changes/event-trigger.alter.d.ts +3 -2
  39. package/dist/core/objects/event-trigger/changes/event-trigger.alter.js +2 -2
  40. package/dist/core/objects/event-trigger/changes/event-trigger.comment.d.ts +3 -2
  41. package/dist/core/objects/event-trigger/changes/event-trigger.comment.js +2 -2
  42. package/dist/core/objects/event-trigger/changes/event-trigger.create.d.ts +2 -1
  43. package/dist/core/objects/event-trigger/changes/event-trigger.create.js +1 -1
  44. package/dist/core/objects/event-trigger/changes/event-trigger.drop.d.ts +2 -1
  45. package/dist/core/objects/event-trigger/changes/event-trigger.drop.js +1 -1
  46. package/dist/core/objects/extension/changes/extension.alter.d.ts +3 -2
  47. package/dist/core/objects/extension/changes/extension.alter.js +2 -2
  48. package/dist/core/objects/extension/changes/extension.comment.d.ts +3 -2
  49. package/dist/core/objects/extension/changes/extension.comment.js +2 -2
  50. package/dist/core/objects/extension/changes/extension.create.d.ts +2 -1
  51. package/dist/core/objects/extension/changes/extension.create.js +4 -2
  52. package/dist/core/objects/extension/changes/extension.drop.d.ts +2 -1
  53. package/dist/core/objects/extension/changes/extension.drop.js +1 -1
  54. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.d.ts +3 -2
  55. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.js +2 -2
  56. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.d.ts +3 -2
  57. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.js +2 -2
  58. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.d.ts +2 -1
  59. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.js +1 -1
  60. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.d.ts +2 -1
  61. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.js +1 -1
  62. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.d.ts +4 -3
  63. package/dist/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.js +3 -3
  64. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.d.ts +10 -9
  65. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.js +9 -9
  66. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.d.ts +3 -2
  67. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.js +2 -2
  68. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.d.ts +2 -1
  69. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.js +1 -1
  70. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.d.ts +2 -1
  71. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.js +1 -1
  72. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.d.ts +4 -3
  73. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.js +3 -3
  74. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.d.ts +4 -3
  75. package/dist/core/objects/foreign-data-wrapper/server/changes/server.alter.js +3 -3
  76. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.d.ts +3 -2
  77. package/dist/core/objects/foreign-data-wrapper/server/changes/server.comment.js +2 -2
  78. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.d.ts +2 -1
  79. package/dist/core/objects/foreign-data-wrapper/server/changes/server.create.js +1 -1
  80. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.d.ts +2 -1
  81. package/dist/core/objects/foreign-data-wrapper/server/changes/server.drop.js +1 -1
  82. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.d.ts +4 -3
  83. package/dist/core/objects/foreign-data-wrapper/server/changes/server.privilege.js +3 -3
  84. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.d.ts +2 -1
  85. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.js +1 -1
  86. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.d.ts +2 -1
  87. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.js +1 -1
  88. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.d.ts +2 -1
  89. package/dist/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.js +1 -1
  90. package/dist/core/objects/index/changes/index.alter.d.ts +4 -3
  91. package/dist/core/objects/index/changes/index.alter.js +3 -3
  92. package/dist/core/objects/index/changes/index.comment.d.ts +3 -2
  93. package/dist/core/objects/index/changes/index.comment.js +2 -2
  94. package/dist/core/objects/index/changes/index.create.d.ts +2 -1
  95. package/dist/core/objects/index/changes/index.create.js +1 -1
  96. package/dist/core/objects/index/changes/index.drop.d.ts +2 -1
  97. package/dist/core/objects/index/changes/index.drop.js +1 -1
  98. package/dist/core/objects/language/changes/language.alter.d.ts +2 -1
  99. package/dist/core/objects/language/changes/language.alter.js +1 -1
  100. package/dist/core/objects/language/changes/language.comment.d.ts +3 -2
  101. package/dist/core/objects/language/changes/language.comment.js +2 -2
  102. package/dist/core/objects/language/changes/language.create.d.ts +2 -1
  103. package/dist/core/objects/language/changes/language.create.js +1 -1
  104. package/dist/core/objects/language/changes/language.drop.d.ts +2 -1
  105. package/dist/core/objects/language/changes/language.drop.js +1 -1
  106. package/dist/core/objects/language/changes/language.privilege.d.ts +4 -3
  107. package/dist/core/objects/language/changes/language.privilege.js +3 -3
  108. package/dist/core/objects/materialized-view/changes/materialized-view.alter.d.ts +3 -2
  109. package/dist/core/objects/materialized-view/changes/materialized-view.alter.js +2 -2
  110. package/dist/core/objects/materialized-view/changes/materialized-view.comment.d.ts +5 -4
  111. package/dist/core/objects/materialized-view/changes/materialized-view.comment.js +4 -4
  112. package/dist/core/objects/materialized-view/changes/materialized-view.create.d.ts +2 -1
  113. package/dist/core/objects/materialized-view/changes/materialized-view.create.js +1 -1
  114. package/dist/core/objects/materialized-view/changes/materialized-view.drop.d.ts +2 -1
  115. package/dist/core/objects/materialized-view/changes/materialized-view.drop.js +1 -1
  116. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.d.ts +4 -3
  117. package/dist/core/objects/materialized-view/changes/materialized-view.privilege.js +3 -3
  118. package/dist/core/objects/procedure/changes/procedure.alter.d.ts +8 -7
  119. package/dist/core/objects/procedure/changes/procedure.alter.js +7 -7
  120. package/dist/core/objects/procedure/changes/procedure.comment.d.ts +3 -2
  121. package/dist/core/objects/procedure/changes/procedure.comment.js +2 -2
  122. package/dist/core/objects/procedure/changes/procedure.create.d.ts +2 -1
  123. package/dist/core/objects/procedure/changes/procedure.create.js +1 -1
  124. package/dist/core/objects/procedure/changes/procedure.drop.d.ts +2 -1
  125. package/dist/core/objects/procedure/changes/procedure.drop.js +1 -1
  126. package/dist/core/objects/procedure/changes/procedure.privilege.d.ts +4 -3
  127. package/dist/core/objects/procedure/changes/procedure.privilege.js +3 -3
  128. package/dist/core/objects/publication/changes/publication.alter.d.ts +9 -7
  129. package/dist/core/objects/publication/changes/publication.alter.js +12 -7
  130. package/dist/core/objects/publication/changes/publication.comment.d.ts +3 -2
  131. package/dist/core/objects/publication/changes/publication.comment.js +2 -2
  132. package/dist/core/objects/publication/changes/publication.create.d.ts +2 -1
  133. package/dist/core/objects/publication/changes/publication.create.js +1 -1
  134. package/dist/core/objects/publication/changes/publication.drop.d.ts +2 -1
  135. package/dist/core/objects/publication/changes/publication.drop.js +1 -1
  136. package/dist/core/objects/rls-policy/changes/rls-policy.alter.d.ts +4 -3
  137. package/dist/core/objects/rls-policy/changes/rls-policy.alter.js +3 -3
  138. package/dist/core/objects/rls-policy/changes/rls-policy.comment.d.ts +3 -2
  139. package/dist/core/objects/rls-policy/changes/rls-policy.comment.js +2 -2
  140. package/dist/core/objects/rls-policy/changes/rls-policy.create.d.ts +2 -1
  141. package/dist/core/objects/rls-policy/changes/rls-policy.create.js +1 -1
  142. package/dist/core/objects/rls-policy/changes/rls-policy.drop.d.ts +2 -1
  143. package/dist/core/objects/rls-policy/changes/rls-policy.drop.js +1 -1
  144. package/dist/core/objects/role/changes/role.alter.d.ts +3 -2
  145. package/dist/core/objects/role/changes/role.alter.js +2 -2
  146. package/dist/core/objects/role/changes/role.comment.d.ts +3 -2
  147. package/dist/core/objects/role/changes/role.comment.js +2 -2
  148. package/dist/core/objects/role/changes/role.create.d.ts +2 -1
  149. package/dist/core/objects/role/changes/role.create.js +1 -1
  150. package/dist/core/objects/role/changes/role.drop.d.ts +2 -1
  151. package/dist/core/objects/role/changes/role.drop.js +1 -1
  152. package/dist/core/objects/role/changes/role.privilege.d.ts +6 -5
  153. package/dist/core/objects/role/changes/role.privilege.js +5 -5
  154. package/dist/core/objects/rule/changes/rule.alter.d.ts +3 -2
  155. package/dist/core/objects/rule/changes/rule.alter.js +2 -2
  156. package/dist/core/objects/rule/changes/rule.comment.d.ts +3 -2
  157. package/dist/core/objects/rule/changes/rule.comment.js +2 -2
  158. package/dist/core/objects/rule/changes/rule.create.d.ts +2 -1
  159. package/dist/core/objects/rule/changes/rule.create.js +1 -1
  160. package/dist/core/objects/rule/changes/rule.drop.d.ts +2 -1
  161. package/dist/core/objects/rule/changes/rule.drop.js +1 -1
  162. package/dist/core/objects/schema/changes/schema.alter.d.ts +2 -1
  163. package/dist/core/objects/schema/changes/schema.alter.js +1 -1
  164. package/dist/core/objects/schema/changes/schema.comment.d.ts +3 -2
  165. package/dist/core/objects/schema/changes/schema.comment.js +2 -2
  166. package/dist/core/objects/schema/changes/schema.create.d.ts +3 -5
  167. package/dist/core/objects/schema/changes/schema.drop.d.ts +2 -1
  168. package/dist/core/objects/schema/changes/schema.drop.js +1 -1
  169. package/dist/core/objects/schema/changes/schema.privilege.d.ts +4 -3
  170. package/dist/core/objects/schema/changes/schema.privilege.js +3 -3
  171. package/dist/core/objects/sequence/changes/sequence.alter.d.ts +3 -2
  172. package/dist/core/objects/sequence/changes/sequence.alter.js +2 -2
  173. package/dist/core/objects/sequence/changes/sequence.comment.d.ts +3 -2
  174. package/dist/core/objects/sequence/changes/sequence.comment.js +2 -2
  175. package/dist/core/objects/sequence/changes/sequence.create.d.ts +2 -1
  176. package/dist/core/objects/sequence/changes/sequence.create.js +1 -1
  177. package/dist/core/objects/sequence/changes/sequence.drop.d.ts +2 -1
  178. package/dist/core/objects/sequence/changes/sequence.drop.js +11 -3
  179. package/dist/core/objects/sequence/changes/sequence.privilege.d.ts +4 -3
  180. package/dist/core/objects/sequence/changes/sequence.privilege.js +3 -3
  181. package/dist/core/objects/sequence/sequence.diff.d.ts +4 -1
  182. package/dist/core/objects/sequence/sequence.diff.js +12 -0
  183. package/dist/core/objects/subscription/changes/subscription.alter.d.ts +7 -6
  184. package/dist/core/objects/subscription/changes/subscription.alter.js +6 -6
  185. package/dist/core/objects/subscription/changes/subscription.comment.d.ts +3 -2
  186. package/dist/core/objects/subscription/changes/subscription.comment.js +2 -2
  187. package/dist/core/objects/subscription/changes/subscription.create.d.ts +2 -1
  188. package/dist/core/objects/subscription/changes/subscription.create.js +1 -1
  189. package/dist/core/objects/subscription/changes/subscription.drop.d.ts +2 -1
  190. package/dist/core/objects/subscription/changes/subscription.drop.js +1 -1
  191. package/dist/core/objects/table/changes/table.alter.d.ts +65 -22
  192. package/dist/core/objects/table/changes/table.alter.js +107 -22
  193. package/dist/core/objects/table/changes/table.comment.d.ts +7 -6
  194. package/dist/core/objects/table/changes/table.comment.js +6 -6
  195. package/dist/core/objects/table/changes/table.create.d.ts +2 -1
  196. package/dist/core/objects/table/changes/table.create.js +1 -1
  197. package/dist/core/objects/table/changes/table.drop.d.ts +4 -3
  198. package/dist/core/objects/table/changes/table.drop.js +7 -1
  199. package/dist/core/objects/table/changes/table.privilege.d.ts +4 -3
  200. package/dist/core/objects/table/changes/table.privilege.js +3 -3
  201. package/dist/core/objects/table/table.diff.js +46 -1
  202. package/dist/core/objects/trigger/changes/trigger.alter.d.ts +2 -1
  203. package/dist/core/objects/trigger/changes/trigger.alter.js +1 -1
  204. package/dist/core/objects/trigger/changes/trigger.comment.d.ts +3 -2
  205. package/dist/core/objects/trigger/changes/trigger.comment.js +2 -2
  206. package/dist/core/objects/trigger/changes/trigger.create.d.ts +2 -1
  207. package/dist/core/objects/trigger/changes/trigger.create.js +1 -1
  208. package/dist/core/objects/trigger/changes/trigger.drop.d.ts +2 -1
  209. package/dist/core/objects/trigger/changes/trigger.drop.js +1 -1
  210. package/dist/core/objects/type/composite-type/changes/composite-type.alter.d.ts +5 -4
  211. package/dist/core/objects/type/composite-type/changes/composite-type.alter.js +4 -4
  212. package/dist/core/objects/type/composite-type/changes/composite-type.comment.d.ts +5 -4
  213. package/dist/core/objects/type/composite-type/changes/composite-type.comment.js +4 -4
  214. package/dist/core/objects/type/composite-type/changes/composite-type.create.d.ts +2 -1
  215. package/dist/core/objects/type/composite-type/changes/composite-type.create.js +1 -1
  216. package/dist/core/objects/type/composite-type/changes/composite-type.drop.d.ts +2 -1
  217. package/dist/core/objects/type/composite-type/changes/composite-type.drop.js +1 -1
  218. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.d.ts +4 -3
  219. package/dist/core/objects/type/composite-type/changes/composite-type.privilege.js +3 -3
  220. package/dist/core/objects/type/enum/changes/enum.alter.d.ts +3 -2
  221. package/dist/core/objects/type/enum/changes/enum.alter.js +2 -2
  222. package/dist/core/objects/type/enum/changes/enum.comment.d.ts +3 -2
  223. package/dist/core/objects/type/enum/changes/enum.comment.js +2 -2
  224. package/dist/core/objects/type/enum/changes/enum.create.d.ts +2 -1
  225. package/dist/core/objects/type/enum/changes/enum.create.js +1 -1
  226. package/dist/core/objects/type/enum/changes/enum.drop.d.ts +2 -1
  227. package/dist/core/objects/type/enum/changes/enum.drop.js +1 -1
  228. package/dist/core/objects/type/enum/changes/enum.privilege.d.ts +4 -3
  229. package/dist/core/objects/type/enum/changes/enum.privilege.js +3 -3
  230. package/dist/core/objects/type/range/changes/range.alter.d.ts +2 -1
  231. package/dist/core/objects/type/range/changes/range.alter.js +1 -1
  232. package/dist/core/objects/type/range/changes/range.comment.d.ts +3 -2
  233. package/dist/core/objects/type/range/changes/range.comment.js +2 -2
  234. package/dist/core/objects/type/range/changes/range.create.d.ts +2 -1
  235. package/dist/core/objects/type/range/changes/range.create.js +1 -1
  236. package/dist/core/objects/type/range/changes/range.drop.d.ts +2 -1
  237. package/dist/core/objects/type/range/changes/range.drop.js +1 -1
  238. package/dist/core/objects/type/range/changes/range.privilege.d.ts +4 -3
  239. package/dist/core/objects/type/range/changes/range.privilege.js +3 -3
  240. package/dist/core/objects/view/changes/view.alter.d.ts +4 -3
  241. package/dist/core/objects/view/changes/view.alter.js +3 -3
  242. package/dist/core/objects/view/changes/view.comment.d.ts +3 -2
  243. package/dist/core/objects/view/changes/view.comment.js +2 -2
  244. package/dist/core/objects/view/changes/view.create.d.ts +2 -1
  245. package/dist/core/objects/view/changes/view.create.js +1 -1
  246. package/dist/core/objects/view/changes/view.drop.d.ts +2 -1
  247. package/dist/core/objects/view/changes/view.drop.js +1 -1
  248. package/dist/core/objects/view/changes/view.privilege.d.ts +4 -3
  249. package/dist/core/objects/view/changes/view.privilege.js +3 -3
  250. package/dist/core/plan/create.js +5 -17
  251. package/dist/core/plan/types.d.ts +3 -6
  252. package/dist/core/sort/custom-constraints.js +64 -0
  253. package/package.json +1 -1
  254. package/src/core/expand-replace-dependencies.test.ts +126 -1
  255. package/src/core/expand-replace-dependencies.ts +50 -0
  256. package/src/core/export/index.ts +13 -4
  257. package/src/core/integrations/integration.types.ts +59 -1
  258. package/src/core/integrations/serialize/dsl.test.ts +20 -1
  259. package/src/core/integrations/serialize/dsl.ts +1 -10
  260. package/src/core/integrations/serialize/serialize.types.ts +37 -0
  261. package/src/core/integrations/supabase.ts +19 -0
  262. package/src/core/objects/aggregate/changes/aggregate.alter.ts +2 -1
  263. package/src/core/objects/aggregate/changes/aggregate.comment.ts +3 -2
  264. package/src/core/objects/aggregate/changes/aggregate.create.ts +2 -1
  265. package/src/core/objects/aggregate/changes/aggregate.drop.ts +2 -1
  266. package/src/core/objects/aggregate/changes/aggregate.privilege.ts +4 -3
  267. package/src/core/objects/base.change.ts +3 -1
  268. package/src/core/objects/collation/changes/collation.alter.ts +3 -2
  269. package/src/core/objects/collation/changes/collation.comment.ts +3 -2
  270. package/src/core/objects/collation/changes/collation.create.ts +2 -1
  271. package/src/core/objects/collation/changes/collation.drop.ts +2 -1
  272. package/src/core/objects/domain/changes/domain.alter.ts +9 -8
  273. package/src/core/objects/domain/changes/domain.comment.ts +3 -2
  274. package/src/core/objects/domain/changes/domain.create.ts +2 -1
  275. package/src/core/objects/domain/changes/domain.drop.ts +2 -1
  276. package/src/core/objects/domain/changes/domain.privilege.ts +4 -3
  277. package/src/core/objects/event-trigger/changes/event-trigger.alter.ts +3 -2
  278. package/src/core/objects/event-trigger/changes/event-trigger.comment.ts +3 -2
  279. package/src/core/objects/event-trigger/changes/event-trigger.create.ts +2 -1
  280. package/src/core/objects/event-trigger/changes/event-trigger.drop.ts +2 -1
  281. package/src/core/objects/extension/changes/extension.alter.ts +3 -2
  282. package/src/core/objects/extension/changes/extension.comment.ts +3 -2
  283. package/src/core/objects/extension/changes/extension.create.test.ts +22 -0
  284. package/src/core/objects/extension/changes/extension.create.ts +5 -2
  285. package/src/core/objects/extension/changes/extension.drop.ts +2 -1
  286. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.alter.ts +3 -2
  287. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.comment.ts +3 -2
  288. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.create.ts +2 -1
  289. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.drop.ts +2 -1
  290. package/src/core/objects/foreign-data-wrapper/foreign-data-wrapper/changes/foreign-data-wrapper.privilege.ts +4 -3
  291. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.alter.ts +10 -9
  292. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.comment.ts +3 -2
  293. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.create.ts +2 -1
  294. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.drop.ts +2 -1
  295. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.privilege.ts +4 -3
  296. package/src/core/objects/foreign-data-wrapper/server/changes/server.alter.ts +4 -3
  297. package/src/core/objects/foreign-data-wrapper/server/changes/server.comment.ts +3 -2
  298. package/src/core/objects/foreign-data-wrapper/server/changes/server.create.ts +2 -1
  299. package/src/core/objects/foreign-data-wrapper/server/changes/server.drop.ts +2 -1
  300. package/src/core/objects/foreign-data-wrapper/server/changes/server.privilege.ts +4 -3
  301. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.alter.ts +2 -1
  302. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.create.ts +2 -1
  303. package/src/core/objects/foreign-data-wrapper/user-mapping/changes/user-mapping.drop.ts +2 -1
  304. package/src/core/objects/index/changes/index.alter.ts +4 -3
  305. package/src/core/objects/index/changes/index.comment.ts +3 -2
  306. package/src/core/objects/index/changes/index.create.ts +2 -1
  307. package/src/core/objects/index/changes/index.drop.ts +2 -1
  308. package/src/core/objects/language/changes/language.alter.ts +2 -1
  309. package/src/core/objects/language/changes/language.comment.ts +3 -2
  310. package/src/core/objects/language/changes/language.create.ts +2 -1
  311. package/src/core/objects/language/changes/language.drop.ts +2 -1
  312. package/src/core/objects/language/changes/language.privilege.ts +4 -3
  313. package/src/core/objects/materialized-view/changes/materialized-view.alter.ts +3 -2
  314. package/src/core/objects/materialized-view/changes/materialized-view.comment.ts +5 -4
  315. package/src/core/objects/materialized-view/changes/materialized-view.create.ts +2 -1
  316. package/src/core/objects/materialized-view/changes/materialized-view.drop.ts +2 -1
  317. package/src/core/objects/materialized-view/changes/materialized-view.privilege.ts +4 -3
  318. package/src/core/objects/procedure/changes/procedure.alter.ts +8 -7
  319. package/src/core/objects/procedure/changes/procedure.comment.ts +3 -2
  320. package/src/core/objects/procedure/changes/procedure.create.ts +2 -1
  321. package/src/core/objects/procedure/changes/procedure.drop.ts +2 -1
  322. package/src/core/objects/procedure/changes/procedure.privilege.ts +4 -3
  323. package/src/core/objects/publication/changes/publication.alter.test.ts +4 -0
  324. package/src/core/objects/publication/changes/publication.alter.ts +14 -7
  325. package/src/core/objects/publication/changes/publication.comment.ts +3 -2
  326. package/src/core/objects/publication/changes/publication.create.ts +2 -1
  327. package/src/core/objects/publication/changes/publication.drop.ts +2 -1
  328. package/src/core/objects/rls-policy/changes/rls-policy.alter.ts +4 -3
  329. package/src/core/objects/rls-policy/changes/rls-policy.comment.ts +3 -2
  330. package/src/core/objects/rls-policy/changes/rls-policy.create.ts +2 -1
  331. package/src/core/objects/rls-policy/changes/rls-policy.drop.ts +2 -1
  332. package/src/core/objects/role/changes/role.alter.ts +3 -2
  333. package/src/core/objects/role/changes/role.comment.ts +3 -2
  334. package/src/core/objects/role/changes/role.create.ts +2 -1
  335. package/src/core/objects/role/changes/role.drop.ts +2 -1
  336. package/src/core/objects/role/changes/role.privilege.ts +6 -5
  337. package/src/core/objects/rule/changes/rule.alter.ts +3 -2
  338. package/src/core/objects/rule/changes/rule.comment.ts +3 -2
  339. package/src/core/objects/rule/changes/rule.create.ts +2 -1
  340. package/src/core/objects/rule/changes/rule.drop.ts +2 -1
  341. package/src/core/objects/schema/changes/schema.alter.ts +2 -1
  342. package/src/core/objects/schema/changes/schema.comment.ts +3 -2
  343. package/src/core/objects/schema/changes/schema.create.ts +3 -3
  344. package/src/core/objects/schema/changes/schema.drop.ts +2 -1
  345. package/src/core/objects/schema/changes/schema.privilege.ts +4 -3
  346. package/src/core/objects/sequence/changes/sequence.alter.ts +3 -2
  347. package/src/core/objects/sequence/changes/sequence.comment.ts +3 -2
  348. package/src/core/objects/sequence/changes/sequence.create.ts +2 -1
  349. package/src/core/objects/sequence/changes/sequence.drop.ts +16 -3
  350. package/src/core/objects/sequence/changes/sequence.privilege.ts +4 -3
  351. package/src/core/objects/sequence/sequence.diff.test.ts +73 -1
  352. package/src/core/objects/sequence/sequence.diff.ts +24 -2
  353. package/src/core/objects/subscription/changes/subscription.alter.ts +7 -6
  354. package/src/core/objects/subscription/changes/subscription.comment.ts +3 -2
  355. package/src/core/objects/subscription/changes/subscription.create.ts +2 -1
  356. package/src/core/objects/subscription/changes/subscription.drop.ts +2 -1
  357. package/src/core/objects/table/changes/table.alter.test.ts +38 -0
  358. package/src/core/objects/table/changes/table.alter.ts +123 -22
  359. package/src/core/objects/table/changes/table.comment.ts +7 -6
  360. package/src/core/objects/table/changes/table.create.ts +2 -1
  361. package/src/core/objects/table/changes/table.drop.ts +20 -1
  362. package/src/core/objects/table/changes/table.privilege.ts +4 -3
  363. package/src/core/objects/table/table.diff.test.ts +121 -0
  364. package/src/core/objects/table/table.diff.ts +64 -1
  365. package/src/core/objects/trigger/changes/trigger.alter.ts +2 -1
  366. package/src/core/objects/trigger/changes/trigger.comment.ts +3 -2
  367. package/src/core/objects/trigger/changes/trigger.create.ts +2 -1
  368. package/src/core/objects/trigger/changes/trigger.drop.ts +2 -1
  369. package/src/core/objects/type/composite-type/changes/composite-type.alter.ts +5 -4
  370. package/src/core/objects/type/composite-type/changes/composite-type.comment.ts +5 -4
  371. package/src/core/objects/type/composite-type/changes/composite-type.create.ts +2 -1
  372. package/src/core/objects/type/composite-type/changes/composite-type.drop.ts +2 -1
  373. package/src/core/objects/type/composite-type/changes/composite-type.privilege.ts +4 -3
  374. package/src/core/objects/type/enum/changes/enum.alter.ts +3 -2
  375. package/src/core/objects/type/enum/changes/enum.comment.ts +3 -2
  376. package/src/core/objects/type/enum/changes/enum.create.ts +2 -1
  377. package/src/core/objects/type/enum/changes/enum.drop.ts +2 -1
  378. package/src/core/objects/type/enum/changes/enum.privilege.ts +4 -3
  379. package/src/core/objects/type/range/changes/range.alter.ts +2 -1
  380. package/src/core/objects/type/range/changes/range.comment.ts +3 -2
  381. package/src/core/objects/type/range/changes/range.create.ts +2 -1
  382. package/src/core/objects/type/range/changes/range.drop.ts +2 -1
  383. package/src/core/objects/type/range/changes/range.privilege.ts +4 -3
  384. package/src/core/objects/view/changes/view.alter.ts +4 -3
  385. package/src/core/objects/view/changes/view.comment.ts +3 -2
  386. package/src/core/objects/view/changes/view.create.ts +2 -1
  387. package/src/core/objects/view/changes/view.drop.ts +2 -1
  388. package/src/core/objects/view/changes/view.privilege.ts +4 -3
  389. package/src/core/plan/create.ts +11 -27
  390. package/src/core/plan/sql-format/format-off.test.ts +1 -1
  391. package/src/core/plan/sql-format/format-pretty-lower-leading.test.ts +1 -1
  392. package/src/core/plan/sql-format/format-pretty-narrow.test.ts +1 -1
  393. package/src/core/plan/sql-format/format-pretty-preserve.test.ts +1 -1
  394. package/src/core/plan/sql-format/format-pretty-upper.test.ts +1 -1
  395. package/src/core/plan/types.ts +3 -6
  396. package/src/core/sort/custom-constraints.ts +74 -0
  397. package/src/typedoc.ts +5 -0
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import {
2
3
  formatObjectPrivilegeList,
3
4
  getObjectKindPrefix,
@@ -54,7 +55,7 @@ export class GrantSequencePrivileges extends AlterSequenceChange {
54
55
  return [this.sequence.stableId, stableId.role(this.grantee)];
55
56
  }
56
57
 
57
- serialize(): string {
58
+ serialize(_options?: SerializeOptions): string {
58
59
  const hasGrantable = this.privileges.some((p) => p.grantable);
59
60
  const hasBase = this.privileges.some((p) => !p.grantable);
60
61
  if (hasGrantable && hasBase) {
@@ -122,7 +123,7 @@ export class RevokeSequencePrivileges extends AlterSequenceChange {
122
123
  ];
123
124
  }
124
125
 
125
- serialize(): string {
126
+ serialize(_options?: SerializeOptions): string {
126
127
  const kindPrefix = getObjectKindPrefix("SEQUENCE");
127
128
  const list = this.privileges.map((p) => p.privilege);
128
129
  const privSql = formatObjectPrivilegeList("SEQUENCE", list, this.version);
@@ -166,7 +167,7 @@ export class RevokeGrantOptionSequencePrivileges extends AlterSequenceChange {
166
167
  ];
167
168
  }
168
169
 
169
- serialize(): string {
170
+ serialize(_options?: SerializeOptions): string {
170
171
  const kindPrefix = getObjectKindPrefix("SEQUENCE");
171
172
  const privSql = formatObjectPrivilegeList(
172
173
  "SEQUENCE",
@@ -1,6 +1,7 @@
1
1
  import { describe, expect, test } from "bun:test";
2
2
  import { DefaultPrivilegeState } from "../base.default-privileges.ts";
3
- import type { Table } from "../table/table.model.ts";
3
+ import { AlterTableAlterColumnSetDefault } from "../table/changes/table.alter.ts";
4
+ import { Table } from "../table/table.model.ts";
4
5
  import {
5
6
  AlterSequenceSetOptions,
6
7
  AlterSequenceSetOwnedBy,
@@ -107,6 +108,77 @@ describe.concurrent("sequence.diff", () => {
107
108
  expect(changes[1]).toBeInstanceOf(CreateSequence);
108
109
  });
109
110
 
111
+ test("replacing an owned sequence re-emits the owning column default", () => {
112
+ const main = new Sequence({
113
+ ...base,
114
+ data_type: "integer",
115
+ owned_by_schema: "public",
116
+ owned_by_table: "users",
117
+ owned_by_column: "id",
118
+ });
119
+ const branch = new Sequence({
120
+ ...base,
121
+ owned_by_schema: "public",
122
+ owned_by_table: "users",
123
+ owned_by_column: "id",
124
+ });
125
+ const branchTable = new Table({
126
+ schema: "public",
127
+ name: "users",
128
+ persistence: "p",
129
+ row_security: false,
130
+ force_row_security: false,
131
+ has_indexes: false,
132
+ has_rules: false,
133
+ has_triggers: false,
134
+ has_subclasses: false,
135
+ is_populated: true,
136
+ replica_identity: "d",
137
+ is_partition: false,
138
+ options: null,
139
+ partition_bound: null,
140
+ partition_by: null,
141
+ owner: "test",
142
+ comment: null,
143
+ parent_schema: null,
144
+ parent_name: null,
145
+ columns: [
146
+ {
147
+ name: "id",
148
+ position: 1,
149
+ data_type: "bigint",
150
+ data_type_str: "bigint",
151
+ is_custom_type: false,
152
+ custom_type_type: null,
153
+ custom_type_category: null,
154
+ custom_type_schema: null,
155
+ custom_type_name: null,
156
+ not_null: true,
157
+ is_identity: false,
158
+ is_identity_always: false,
159
+ is_generated: false,
160
+ collation: null,
161
+ default: "nextval('public.seq1'::regclass)",
162
+ comment: null,
163
+ },
164
+ ],
165
+ privileges: [],
166
+ });
167
+
168
+ const changes = diffSequences(
169
+ testContext,
170
+ { [main.stableId]: main },
171
+ { [branch.stableId]: branch },
172
+ { [branchTable.stableId]: branchTable },
173
+ );
174
+
175
+ expect(changes).toHaveLength(4);
176
+ expect(changes[0]).toBeInstanceOf(DropSequence);
177
+ expect(changes[1]).toBeInstanceOf(CreateSequence);
178
+ expect(changes[2]).toBeInstanceOf(AlterSequenceSetOwnedBy);
179
+ expect(changes[3]).toBeInstanceOf(AlterTableAlterColumnSetDefault);
180
+ });
181
+
110
182
  test("skip DROP SEQUENCE when owned by table being dropped", () => {
111
183
  const ownedSequence = new Sequence({
112
184
  ...base,
@@ -4,6 +4,7 @@ import {
4
4
  emitObjectPrivilegeChanges,
5
5
  } from "../base.privilege-diff.ts";
6
6
  import type { ObjectDiffContext } from "../diff-context.ts";
7
+ import { AlterTableAlterColumnSetDefault } from "../table/changes/table.alter.ts";
7
8
  import type { Table } from "../table/table.model.ts";
8
9
  import { hasNonAlterableChanges } from "../utils.ts";
9
10
  import {
@@ -24,6 +25,10 @@ import {
24
25
  import type { SequenceChange } from "./changes/sequence.types.ts";
25
26
  import type { Sequence } from "./sequence.model.ts";
26
27
 
28
+ type SequenceOrColumnSetDefaultChange =
29
+ | AlterTableAlterColumnSetDefault
30
+ | SequenceChange;
31
+
27
32
  /**
28
33
  * Diff two sets of sequences from main and branch catalogs.
29
34
  *
@@ -41,10 +46,10 @@ export function diffSequences(
41
46
  main: Record<string, Sequence>,
42
47
  branch: Record<string, Sequence>,
43
48
  branchTables: Record<string, Table> = {},
44
- ): SequenceChange[] {
49
+ ): SequenceOrColumnSetDefaultChange[] {
45
50
  const { created, dropped, altered } = diffObjects(main, branch);
46
51
 
47
- const changes: SequenceChange[] = [];
52
+ const changes: SequenceOrColumnSetDefaultChange[] = [];
48
53
 
49
54
  for (const sequenceId of created) {
50
55
  const createdSeq = branch[sequenceId];
@@ -157,6 +162,12 @@ export function diffSequences(
157
162
  branchSequence.owned_by_table !== null &&
158
163
  branchSequence.owned_by_column !== null
159
164
  ) {
165
+ const ownedByTableId = `table:${branchSequence.owned_by_schema}.${branchSequence.owned_by_table}`;
166
+ const ownedByTable = branchTables[ownedByTableId];
167
+ const ownedByColumn = ownedByTable?.columns?.find(
168
+ (column) => column.name === branchSequence.owned_by_column,
169
+ );
170
+
160
171
  changes.push(
161
172
  new AlterSequenceSetOwnedBy({
162
173
  sequence: branchSequence,
@@ -167,6 +178,17 @@ export function diffSequences(
167
178
  } as { schema: string; table: string; column: string },
168
179
  }),
169
180
  );
181
+
182
+ // Replacing an owned sequence with DROP ... CASCADE removes the column's
183
+ // existing nextval(...) default, so restore it after ownership is reattached.
184
+ if (ownedByTable && ownedByColumn && ownedByColumn.default !== null) {
185
+ changes.push(
186
+ new AlterTableAlterColumnSetDefault({
187
+ table: ownedByTable,
188
+ column: ownedByColumn,
189
+ }),
190
+ );
191
+ }
170
192
  } else if (
171
193
  mainSequence.owned_by_schema !== null ||
172
194
  mainSequence.owned_by_table !== null ||
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import { quoteLiteral } from "../../base.change.ts";
2
3
  import { stableId } from "../../utils.ts";
3
4
  import type { Subscription } from "../subscription.model.ts";
@@ -16,7 +17,7 @@ export class AlterSubscriptionSetConnection extends AlterSubscriptionChange {
16
17
  this.subscription = props.subscription;
17
18
  }
18
19
 
19
- serialize(): string {
20
+ serialize(_options?: SerializeOptions): string {
20
21
  return `ALTER SUBSCRIPTION ${this.subscription.name} CONNECTION ${quoteLiteral(this.subscription.conninfo)}`;
21
22
  }
22
23
  }
@@ -30,7 +31,7 @@ export class AlterSubscriptionSetPublication extends AlterSubscriptionChange {
30
31
  this.subscription = props.subscription;
31
32
  }
32
33
 
33
- serialize(): string {
34
+ serialize(_options?: SerializeOptions): string {
34
35
  const base = `ALTER SUBSCRIPTION ${this.subscription.name} SET PUBLICATION ${this.subscription.publications.join(", ")}`;
35
36
  if (!this.subscription.enabled) {
36
37
  return `${base} WITH (refresh = false)`;
@@ -48,7 +49,7 @@ export class AlterSubscriptionEnable extends AlterSubscriptionChange {
48
49
  this.subscription = props.subscription;
49
50
  }
50
51
 
51
- serialize(): string {
52
+ serialize(_options?: SerializeOptions): string {
52
53
  return `ALTER SUBSCRIPTION ${this.subscription.name} ENABLE`;
53
54
  }
54
55
  }
@@ -62,7 +63,7 @@ export class AlterSubscriptionDisable extends AlterSubscriptionChange {
62
63
  this.subscription = props.subscription;
63
64
  }
64
65
 
65
- serialize(): string {
66
+ serialize(_options?: SerializeOptions): string {
66
67
  return `ALTER SUBSCRIPTION ${this.subscription.name} DISABLE`;
67
68
  }
68
69
  }
@@ -81,7 +82,7 @@ export class AlterSubscriptionSetOptions extends AlterSubscriptionChange {
81
82
  this.options = props.options;
82
83
  }
83
84
 
84
- serialize(): string {
85
+ serialize(_options?: SerializeOptions): string {
85
86
  const assignments = this.options.map((option) =>
86
87
  formatSubscriptionOption(this.subscription, option),
87
88
  );
@@ -104,7 +105,7 @@ export class AlterSubscriptionSetOwner extends AlterSubscriptionChange {
104
105
  return [stableId.role(this.owner)];
105
106
  }
106
107
 
107
- serialize(): string {
108
+ serialize(_options?: SerializeOptions): string {
108
109
  return `ALTER SUBSCRIPTION ${this.subscription.name} OWNER TO ${this.owner}`;
109
110
  }
110
111
  }
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import { quoteLiteral } from "../../base.change.ts";
2
3
  import { stableId } from "../../utils.ts";
3
4
  import type { Subscription } from "../subscription.model.ts";
@@ -27,7 +28,7 @@ export class CreateCommentOnSubscription extends CreateSubscriptionChange {
27
28
  return [this.subscription.stableId];
28
29
  }
29
30
 
30
- serialize(): string {
31
+ serialize(_options?: SerializeOptions): string {
31
32
  return [
32
33
  "COMMENT ON SUBSCRIPTION",
33
34
  this.subscription.name,
@@ -58,7 +59,7 @@ export class DropCommentOnSubscription extends DropSubscriptionChange {
58
59
  ];
59
60
  }
60
61
 
61
- serialize(): string {
62
+ serialize(_options?: SerializeOptions): string {
62
63
  return `COMMENT ON SUBSCRIPTION ${this.subscription.name} IS NULL`;
63
64
  }
64
65
  }
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  // src/objects/subscription/changes/subscription.create.ts
2
3
  import { quoteLiteral } from "../../base.change.ts";
3
4
  import { stableId } from "../../utils.ts";
@@ -22,7 +23,7 @@ export class CreateSubscription extends CreateSubscriptionChange {
22
23
  return [stableId.role(this.subscription.owner)];
23
24
  }
24
25
 
25
- serialize(): string {
26
+ serialize(_options?: SerializeOptions): string {
26
27
  const parts: string[] = [
27
28
  "CREATE SUBSCRIPTION",
28
29
  this.subscription.name,
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { Subscription } from "../subscription.model.ts";
2
3
  import { DropSubscriptionChange } from "./subscription.base.ts";
3
4
 
@@ -14,7 +15,7 @@ export class DropSubscription extends DropSubscriptionChange {
14
15
  return [this.subscription.stableId];
15
16
  }
16
17
 
17
- serialize(): string {
18
+ serialize(_options?: SerializeOptions): string {
18
19
  return `DROP SUBSCRIPTION ${this.subscription.name}`;
19
20
  }
20
21
  }
@@ -5,9 +5,12 @@ import { Table, type TableProps } from "../table.model.ts";
5
5
  import {
6
6
  AlterTableAddColumn,
7
7
  AlterTableAddConstraint,
8
+ AlterTableAlterColumnAddIdentity,
8
9
  AlterTableAlterColumnDropDefault,
10
+ AlterTableAlterColumnDropIdentity,
9
11
  AlterTableAlterColumnDropNotNull,
10
12
  AlterTableAlterColumnSetDefault,
13
+ AlterTableAlterColumnSetGenerated,
11
14
  AlterTableAlterColumnSetNotNull,
12
15
  AlterTableAlterColumnType,
13
16
  AlterTableAttachPartition,
@@ -498,6 +501,41 @@ describe.concurrent("table", () => {
498
501
  "ALTER TABLE public.test_table ALTER COLUMN a DROP DEFAULT",
499
502
  );
500
503
 
504
+ const changeAddIdentity = new AlterTableAlterColumnAddIdentity({
505
+ table: withCols,
506
+ column: {
507
+ ...colInt,
508
+ is_identity: true,
509
+ is_identity_always: true,
510
+ },
511
+ });
512
+ await assertValidSql(changeAddIdentity.serialize());
513
+ expect(changeAddIdentity.serialize()).toBe(
514
+ "ALTER TABLE public.test_table ALTER COLUMN a ADD GENERATED ALWAYS AS IDENTITY",
515
+ );
516
+
517
+ const changeSetGenerated = new AlterTableAlterColumnSetGenerated({
518
+ table: withCols,
519
+ column: {
520
+ ...colInt,
521
+ is_identity: true,
522
+ is_identity_always: false,
523
+ },
524
+ });
525
+ await assertValidSql(changeSetGenerated.serialize());
526
+ expect(changeSetGenerated.serialize()).toBe(
527
+ "ALTER TABLE public.test_table ALTER COLUMN a SET GENERATED BY DEFAULT",
528
+ );
529
+
530
+ const changeDropIdentity = new AlterTableAlterColumnDropIdentity({
531
+ table: withCols,
532
+ column: { ...colInt },
533
+ });
534
+ await assertValidSql(changeDropIdentity.serialize());
535
+ expect(changeDropIdentity.serialize()).toBe(
536
+ "ALTER TABLE public.test_table ALTER COLUMN a DROP IDENTITY",
537
+ );
538
+
501
539
  const changeSetNotNull = new AlterTableAlterColumnSetNotNull({
502
540
  table: withCols,
503
541
  column: { ...colInt, not_null: true },
@@ -1,3 +1,4 @@
1
+ import type { SerializeOptions } from "../../../integrations/serialize/serialize.types.ts";
1
2
  import type { ColumnProps } from "../../base.model.ts";
2
3
  import { stableId } from "../../utils.ts";
3
4
  import type { Table, TableConstraintProps } from "../table.model.ts";
@@ -62,8 +63,11 @@ import { AlterTableChange } from "./table.base.ts";
62
63
  export type AlterTable =
63
64
  | AlterTableAddColumn
64
65
  | AlterTableAddConstraint
66
+ | AlterTableAlterColumnAddIdentity
65
67
  | AlterTableAlterColumnDropDefault
68
+ | AlterTableAlterColumnDropIdentity
66
69
  | AlterTableAlterColumnDropNotNull
70
+ | AlterTableAlterColumnSetGenerated
67
71
  | AlterTableAlterColumnSetDefault
68
72
  | AlterTableAlterColumnSetNotNull
69
73
  | AlterTableAlterColumnType
@@ -101,7 +105,7 @@ export class AlterTableChangeOwner extends AlterTableChange {
101
105
  return [this.table.stableId];
102
106
  }
103
107
 
104
- serialize(): string {
108
+ serialize(_options?: SerializeOptions): string {
105
109
  return [
106
110
  "ALTER TABLE",
107
111
  `${this.table.schema}.${this.table.name}`,
@@ -127,7 +131,7 @@ export class AlterTableSetLogged extends AlterTableChange {
127
131
  return [this.table.stableId];
128
132
  }
129
133
 
130
- serialize(): string {
134
+ serialize(_options?: SerializeOptions): string {
131
135
  return [
132
136
  "ALTER TABLE",
133
137
  `${this.table.schema}.${this.table.name}`,
@@ -152,7 +156,7 @@ export class AlterTableSetUnlogged extends AlterTableChange {
152
156
  return [this.table.stableId];
153
157
  }
154
158
 
155
- serialize(): string {
159
+ serialize(_options?: SerializeOptions): string {
156
160
  return [
157
161
  "ALTER TABLE",
158
162
  `${this.table.schema}.${this.table.name}`,
@@ -177,7 +181,7 @@ export class AlterTableEnableRowLevelSecurity extends AlterTableChange {
177
181
  return [this.table.stableId];
178
182
  }
179
183
 
180
- serialize(): string {
184
+ serialize(_options?: SerializeOptions): string {
181
185
  return [
182
186
  "ALTER TABLE",
183
187
  `${this.table.schema}.${this.table.name}`,
@@ -202,7 +206,7 @@ export class AlterTableDisableRowLevelSecurity extends AlterTableChange {
202
206
  return [this.table.stableId];
203
207
  }
204
208
 
205
- serialize(): string {
209
+ serialize(_options?: SerializeOptions): string {
206
210
  return [
207
211
  "ALTER TABLE",
208
212
  `${this.table.schema}.${this.table.name}`,
@@ -227,7 +231,7 @@ export class AlterTableForceRowLevelSecurity extends AlterTableChange {
227
231
  return [this.table.stableId];
228
232
  }
229
233
 
230
- serialize(): string {
234
+ serialize(_options?: SerializeOptions): string {
231
235
  return [
232
236
  "ALTER TABLE",
233
237
  `${this.table.schema}.${this.table.name}`,
@@ -252,7 +256,7 @@ export class AlterTableNoForceRowLevelSecurity extends AlterTableChange {
252
256
  return [this.table.stableId];
253
257
  }
254
258
 
255
- serialize(): string {
259
+ serialize(_options?: SerializeOptions): string {
256
260
  return [
257
261
  "ALTER TABLE",
258
262
  `${this.table.schema}.${this.table.name}`,
@@ -279,7 +283,7 @@ export class AlterTableSetStorageParams extends AlterTableChange {
279
283
  return [this.table.stableId];
280
284
  }
281
285
 
282
- serialize(): string {
286
+ serialize(_options?: SerializeOptions): string {
283
287
  const storageParams = this.options.join(", ");
284
288
  return [
285
289
  "ALTER TABLE",
@@ -307,7 +311,7 @@ export class AlterTableResetStorageParams extends AlterTableChange {
307
311
  return [this.table.stableId];
308
312
  }
309
313
 
310
- serialize(): string {
314
+ serialize(_options?: SerializeOptions): string {
311
315
  const paramsSql = this.params.join(", ");
312
316
  return [
313
317
  "ALTER TABLE",
@@ -365,7 +369,7 @@ export class AlterTableAddConstraint extends AlterTableChange {
365
369
  return reqs;
366
370
  }
367
371
 
368
- serialize(): string {
372
+ serialize(_options?: SerializeOptions): string {
369
373
  return [
370
374
  "ALTER TABLE",
371
375
  `${this.table.schema}.${this.table.name}`,
@@ -411,7 +415,7 @@ export class AlterTableDropConstraint extends AlterTableChange {
411
415
  ];
412
416
  }
413
417
 
414
- serialize(): string {
418
+ serialize(_options?: SerializeOptions): string {
415
419
  return [
416
420
  "ALTER TABLE",
417
421
  `${this.table.schema}.${this.table.name}`,
@@ -446,7 +450,7 @@ export class AlterTableValidateConstraint extends AlterTableChange {
446
450
  ];
447
451
  }
448
452
 
449
- serialize(): string {
453
+ serialize(_options?: SerializeOptions): string {
450
454
  return [
451
455
  "ALTER TABLE",
452
456
  `${this.table.schema}.${this.table.name}`,
@@ -474,7 +478,7 @@ export class AlterTableSetReplicaIdentity extends AlterTableChange {
474
478
  return [this.table.stableId];
475
479
  }
476
480
 
477
- serialize(): string {
481
+ serialize(_options?: SerializeOptions): string {
478
482
  const clause =
479
483
  this.mode === "d"
480
484
  ? "DEFAULT"
@@ -516,7 +520,7 @@ export class AlterTableAddColumn extends AlterTableChange {
516
520
  return [this.table.stableId];
517
521
  }
518
522
 
519
- serialize(): string {
523
+ serialize(_options?: SerializeOptions): string {
520
524
  const parts: string[] = [
521
525
  "ALTER TABLE",
522
526
  `${this.table.schema}.${this.table.name}`,
@@ -572,7 +576,7 @@ export class AlterTableDropColumn extends AlterTableChange {
572
576
  ];
573
577
  }
574
578
 
575
- serialize(): string {
579
+ serialize(_options?: SerializeOptions): string {
576
580
  return [
577
581
  "ALTER TABLE",
578
582
  `${this.table.schema}.${this.table.name}`,
@@ -602,7 +606,7 @@ export class AlterTableAlterColumnType extends AlterTableChange {
602
606
  ];
603
607
  }
604
608
 
605
- serialize(): string {
609
+ serialize(_options?: SerializeOptions): string {
606
610
  const parts: string[] = [
607
611
  "ALTER TABLE",
608
612
  `${this.table.schema}.${this.table.name}`,
@@ -638,7 +642,7 @@ export class AlterTableAlterColumnSetDefault extends AlterTableChange {
638
642
  ];
639
643
  }
640
644
 
641
- serialize(): string {
645
+ serialize(_options?: SerializeOptions): string {
642
646
  const set = this.column.is_generated ? "SET EXPRESSION AS" : "SET DEFAULT";
643
647
 
644
648
  return [
@@ -672,7 +676,7 @@ export class AlterTableAlterColumnDropDefault extends AlterTableChange {
672
676
  ];
673
677
  }
674
678
 
675
- serialize(): string {
679
+ serialize(_options?: SerializeOptions): string {
676
680
  return [
677
681
  "ALTER TABLE",
678
682
  `${this.table.schema}.${this.table.name}`,
@@ -683,6 +687,103 @@ export class AlterTableAlterColumnDropDefault extends AlterTableChange {
683
687
  }
684
688
  }
685
689
 
690
+ /**
691
+ * ALTER TABLE ... ALTER COLUMN ... ADD GENERATED ... AS IDENTITY
692
+ */
693
+ export class AlterTableAlterColumnAddIdentity extends AlterTableChange {
694
+ public readonly table: Table;
695
+ public readonly column: ColumnProps;
696
+ public readonly scope = "object" as const;
697
+
698
+ constructor(props: { table: Table; column: ColumnProps }) {
699
+ super();
700
+ this.table = props.table;
701
+ this.column = props.column;
702
+ }
703
+
704
+ get requires() {
705
+ return [
706
+ stableId.column(this.table.schema, this.table.name, this.column.name),
707
+ ];
708
+ }
709
+
710
+ serialize(): string {
711
+ return [
712
+ "ALTER TABLE",
713
+ `${this.table.schema}.${this.table.name}`,
714
+ "ALTER COLUMN",
715
+ this.column.name,
716
+ "ADD",
717
+ this.column.is_identity_always
718
+ ? "GENERATED ALWAYS AS IDENTITY"
719
+ : "GENERATED BY DEFAULT AS IDENTITY",
720
+ ].join(" ");
721
+ }
722
+ }
723
+
724
+ /**
725
+ * ALTER TABLE ... ALTER COLUMN ... DROP IDENTITY
726
+ */
727
+ export class AlterTableAlterColumnDropIdentity extends AlterTableChange {
728
+ public readonly table: Table;
729
+ public readonly column: ColumnProps;
730
+ public readonly scope = "object" as const;
731
+
732
+ constructor(props: { table: Table; column: ColumnProps }) {
733
+ super();
734
+ this.table = props.table;
735
+ this.column = props.column;
736
+ }
737
+
738
+ get requires() {
739
+ return [
740
+ stableId.column(this.table.schema, this.table.name, this.column.name),
741
+ ];
742
+ }
743
+
744
+ serialize(): string {
745
+ return [
746
+ "ALTER TABLE",
747
+ `${this.table.schema}.${this.table.name}`,
748
+ "ALTER COLUMN",
749
+ this.column.name,
750
+ "DROP IDENTITY",
751
+ ].join(" ");
752
+ }
753
+ }
754
+
755
+ /**
756
+ * ALTER TABLE ... ALTER COLUMN ... SET GENERATED { ALWAYS | BY DEFAULT }
757
+ */
758
+ export class AlterTableAlterColumnSetGenerated extends AlterTableChange {
759
+ public readonly table: Table;
760
+ public readonly column: ColumnProps;
761
+ public readonly scope = "object" as const;
762
+
763
+ constructor(props: { table: Table; column: ColumnProps }) {
764
+ super();
765
+ this.table = props.table;
766
+ this.column = props.column;
767
+ }
768
+
769
+ get requires() {
770
+ return [
771
+ stableId.column(this.table.schema, this.table.name, this.column.name),
772
+ ];
773
+ }
774
+
775
+ serialize(): string {
776
+ return [
777
+ "ALTER TABLE",
778
+ `${this.table.schema}.${this.table.name}`,
779
+ "ALTER COLUMN",
780
+ this.column.name,
781
+ "SET GENERATED",
782
+ this.column.is_identity_always ? "ALWAYS" : "BY DEFAULT",
783
+ ].join(" ");
784
+ }
785
+ }
786
+
686
787
  /**
687
788
  * ALTER TABLE ... ALTER COLUMN ... SET NOT NULL
688
789
  */
@@ -703,7 +804,7 @@ export class AlterTableAlterColumnSetNotNull extends AlterTableChange {
703
804
  ];
704
805
  }
705
806
 
706
- serialize(): string {
807
+ serialize(_options?: SerializeOptions): string {
707
808
  return [
708
809
  "ALTER TABLE",
709
810
  `${this.table.schema}.${this.table.name}`,
@@ -734,7 +835,7 @@ export class AlterTableAlterColumnDropNotNull extends AlterTableChange {
734
835
  ];
735
836
  }
736
837
 
737
- serialize(): string {
838
+ serialize(_options?: SerializeOptions): string {
738
839
  return [
739
840
  "ALTER TABLE",
740
841
  `${this.table.schema}.${this.table.name}`,
@@ -764,7 +865,7 @@ export class AlterTableAttachPartition extends AlterTableChange {
764
865
  return [this.partition.stableId, this.table.stableId];
765
866
  }
766
867
 
767
- serialize(): string {
868
+ serialize(_options?: SerializeOptions): string {
768
869
  const bound = this.partition.partition_bound ?? "DEFAULT";
769
870
  return [
770
871
  "ALTER TABLE",
@@ -795,7 +896,7 @@ export class AlterTableDetachPartition extends AlterTableChange {
795
896
  return [this.table.stableId, this.partition.stableId];
796
897
  }
797
898
 
798
- serialize(): string {
899
+ serialize(_options?: SerializeOptions): string {
799
900
  return [
800
901
  "ALTER TABLE",
801
902
  `${this.table.schema}.${this.table.name}`,