@supabase/pg-delta 1.0.0-alpha.21 → 1.0.0-alpha.23

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 (271) hide show
  1. package/dist/core/catalog.diff.js +4 -3
  2. package/dist/core/catalog.model.d.ts +8 -1
  3. package/dist/core/catalog.model.js +10 -8
  4. package/dist/core/expand-replace-dependencies.js +23 -0
  5. package/dist/core/integrations/filter/flatten.js +13 -0
  6. package/dist/core/objects/aggregate/aggregate.diff.js +16 -0
  7. package/dist/core/objects/aggregate/aggregate.model.d.ts +10 -0
  8. package/dist/core/objects/aggregate/aggregate.model.js +19 -1
  9. package/dist/core/objects/aggregate/changes/aggregate.base.d.ts +1 -1
  10. package/dist/core/objects/aggregate/changes/aggregate.security-label.d.ts +28 -0
  11. package/dist/core/objects/aggregate/changes/aggregate.security-label.js +64 -0
  12. package/dist/core/objects/aggregate/changes/aggregate.types.d.ts +2 -1
  13. package/dist/core/objects/base.model.d.ts +8 -0
  14. package/dist/core/objects/base.model.js +2 -0
  15. package/dist/core/objects/domain/changes/domain.base.d.ts +1 -1
  16. package/dist/core/objects/domain/changes/domain.security-label.d.ts +28 -0
  17. package/dist/core/objects/domain/changes/domain.security-label.js +61 -0
  18. package/dist/core/objects/domain/changes/domain.types.d.ts +2 -1
  19. package/dist/core/objects/domain/domain.diff.js +16 -0
  20. package/dist/core/objects/domain/domain.model.d.ts +10 -0
  21. package/dist/core/objects/domain/domain.model.js +19 -1
  22. package/dist/core/objects/event-trigger/changes/event-trigger.base.d.ts +1 -1
  23. package/dist/core/objects/event-trigger/changes/event-trigger.security-label.d.ts +28 -0
  24. package/dist/core/objects/event-trigger/changes/event-trigger.security-label.js +61 -0
  25. package/dist/core/objects/event-trigger/changes/event-trigger.types.d.ts +2 -1
  26. package/dist/core/objects/event-trigger/event-trigger.diff.js +16 -0
  27. package/dist/core/objects/event-trigger/event-trigger.model.d.ts +10 -0
  28. package/dist/core/objects/event-trigger/event-trigger.model.js +19 -1
  29. package/dist/core/objects/extract-with-retry.d.ts +36 -0
  30. package/dist/core/objects/extract-with-retry.js +51 -0
  31. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.d.ts +1 -1
  32. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.d.ts +28 -0
  33. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.js +61 -0
  34. package/dist/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.d.ts +2 -1
  35. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.js +16 -0
  36. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.d.ts +22 -0
  37. package/dist/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.js +20 -1
  38. package/dist/core/objects/index/index.diff.js +0 -1
  39. package/dist/core/objects/index/index.model.d.ts +2 -3
  40. package/dist/core/objects/index/index.model.js +17 -6
  41. package/dist/core/objects/materialized-view/changes/materialized-view.base.d.ts +1 -1
  42. package/dist/core/objects/materialized-view/changes/materialized-view.security-label.d.ts +28 -0
  43. package/dist/core/objects/materialized-view/changes/materialized-view.security-label.js +61 -0
  44. package/dist/core/objects/materialized-view/changes/materialized-view.types.d.ts +2 -1
  45. package/dist/core/objects/materialized-view/materialized-view.diff.js +18 -0
  46. package/dist/core/objects/materialized-view/materialized-view.model.d.ts +24 -1
  47. package/dist/core/objects/materialized-view/materialized-view.model.js +40 -5
  48. package/dist/core/objects/procedure/changes/procedure.base.d.ts +1 -1
  49. package/dist/core/objects/procedure/changes/procedure.security-label.d.ts +28 -0
  50. package/dist/core/objects/procedure/changes/procedure.security-label.js +69 -0
  51. package/dist/core/objects/procedure/changes/procedure.types.d.ts +2 -1
  52. package/dist/core/objects/procedure/procedure.diff.js +16 -0
  53. package/dist/core/objects/procedure/procedure.model.d.ts +12 -1
  54. package/dist/core/objects/procedure/procedure.model.js +39 -5
  55. package/dist/core/objects/publication/changes/publication.base.d.ts +1 -1
  56. package/dist/core/objects/publication/changes/publication.security-label.d.ts +28 -0
  57. package/dist/core/objects/publication/changes/publication.security-label.js +61 -0
  58. package/dist/core/objects/publication/changes/publication.types.d.ts +2 -1
  59. package/dist/core/objects/publication/publication.diff.js +16 -0
  60. package/dist/core/objects/publication/publication.model.d.ts +14 -0
  61. package/dist/core/objects/publication/publication.model.js +20 -1
  62. package/dist/core/objects/rls-policy/rls-policy.diff.js +13 -1
  63. package/dist/core/objects/role/changes/role.base.d.ts +1 -1
  64. package/dist/core/objects/role/changes/role.security-label.d.ts +28 -0
  65. package/dist/core/objects/role/changes/role.security-label.js +61 -0
  66. package/dist/core/objects/role/changes/role.types.d.ts +2 -1
  67. package/dist/core/objects/role/role.diff.js +16 -0
  68. package/dist/core/objects/role/role.model.d.ts +10 -0
  69. package/dist/core/objects/role/role.model.js +29 -0
  70. package/dist/core/objects/rule/rule.model.d.ts +2 -1
  71. package/dist/core/objects/rule/rule.model.js +20 -3
  72. package/dist/core/objects/schema/changes/schema.base.d.ts +1 -1
  73. package/dist/core/objects/schema/changes/schema.security-label.d.ts +28 -0
  74. package/dist/core/objects/schema/changes/schema.security-label.js +61 -0
  75. package/dist/core/objects/schema/changes/schema.types.d.ts +2 -1
  76. package/dist/core/objects/schema/schema.diff.js +24 -1
  77. package/dist/core/objects/schema/schema.model.d.ts +10 -0
  78. package/dist/core/objects/schema/schema.model.js +18 -1
  79. package/dist/core/objects/security-label.types.d.ts +20 -0
  80. package/dist/core/objects/security-label.types.js +46 -0
  81. package/dist/core/objects/sequence/changes/sequence.base.d.ts +1 -1
  82. package/dist/core/objects/sequence/changes/sequence.security-label.d.ts +28 -0
  83. package/dist/core/objects/sequence/changes/sequence.security-label.js +61 -0
  84. package/dist/core/objects/sequence/changes/sequence.types.d.ts +2 -1
  85. package/dist/core/objects/sequence/sequence.diff.d.ts +2 -1
  86. package/dist/core/objects/sequence/sequence.diff.js +44 -4
  87. package/dist/core/objects/sequence/sequence.model.d.ts +10 -0
  88. package/dist/core/objects/sequence/sequence.model.js +19 -1
  89. package/dist/core/objects/subscription/changes/subscription.base.d.ts +1 -1
  90. package/dist/core/objects/subscription/changes/subscription.security-label.d.ts +28 -0
  91. package/dist/core/objects/subscription/changes/subscription.security-label.js +61 -0
  92. package/dist/core/objects/subscription/changes/subscription.types.d.ts +2 -1
  93. package/dist/core/objects/subscription/subscription.diff.js +16 -0
  94. package/dist/core/objects/subscription/subscription.model.d.ts +10 -0
  95. package/dist/core/objects/subscription/subscription.model.js +19 -1
  96. package/dist/core/objects/table/changes/table.alter.d.ts +12 -1
  97. package/dist/core/objects/table/changes/table.alter.js +20 -2
  98. package/dist/core/objects/table/changes/table.base.d.ts +1 -1
  99. package/dist/core/objects/table/changes/table.security-label.d.ts +63 -0
  100. package/dist/core/objects/table/changes/table.security-label.js +134 -0
  101. package/dist/core/objects/table/changes/table.types.d.ts +2 -1
  102. package/dist/core/objects/table/table.diff.js +68 -15
  103. package/dist/core/objects/table/table.model.d.ts +36 -1
  104. package/dist/core/objects/table/table.model.js +74 -7
  105. package/dist/core/objects/trigger/trigger.model.d.ts +2 -1
  106. package/dist/core/objects/trigger/trigger.model.js +20 -4
  107. package/dist/core/objects/type/composite-type/changes/composite-type.base.d.ts +1 -1
  108. package/dist/core/objects/type/composite-type/changes/composite-type.security-label.d.ts +28 -0
  109. package/dist/core/objects/type/composite-type/changes/composite-type.security-label.js +61 -0
  110. package/dist/core/objects/type/composite-type/changes/composite-type.types.d.ts +2 -1
  111. package/dist/core/objects/type/composite-type/composite-type.diff.js +16 -0
  112. package/dist/core/objects/type/composite-type/composite-type.model.d.ts +22 -0
  113. package/dist/core/objects/type/composite-type/composite-type.model.js +22 -2
  114. package/dist/core/objects/type/enum/changes/enum.base.d.ts +1 -1
  115. package/dist/core/objects/type/enum/changes/enum.security-label.d.ts +28 -0
  116. package/dist/core/objects/type/enum/changes/enum.security-label.js +61 -0
  117. package/dist/core/objects/type/enum/changes/enum.types.d.ts +2 -1
  118. package/dist/core/objects/type/enum/enum.diff.js +16 -0
  119. package/dist/core/objects/type/enum/enum.model.d.ts +10 -0
  120. package/dist/core/objects/type/enum/enum.model.js +20 -1
  121. package/dist/core/objects/type/range/changes/range.base.d.ts +1 -1
  122. package/dist/core/objects/type/range/changes/range.security-label.d.ts +28 -0
  123. package/dist/core/objects/type/range/changes/range.security-label.js +61 -0
  124. package/dist/core/objects/type/range/changes/range.types.d.ts +2 -1
  125. package/dist/core/objects/type/range/range.diff.js +16 -0
  126. package/dist/core/objects/type/range/range.model.d.ts +10 -0
  127. package/dist/core/objects/type/range/range.model.js +19 -1
  128. package/dist/core/objects/utils.d.ts +2 -0
  129. package/dist/core/objects/utils.js +6 -0
  130. package/dist/core/objects/view/changes/view.base.d.ts +1 -1
  131. package/dist/core/objects/view/changes/view.security-label.d.ts +28 -0
  132. package/dist/core/objects/view/changes/view.security-label.js +61 -0
  133. package/dist/core/objects/view/changes/view.types.d.ts +2 -1
  134. package/dist/core/objects/view/view.diff.js +13 -0
  135. package/dist/core/objects/view/view.model.d.ts +28 -1
  136. package/dist/core/objects/view/view.model.js +40 -5
  137. package/dist/core/plan/create.js +3 -1
  138. package/dist/core/plan/sql-format/fixtures.js +1 -0
  139. package/dist/core/plan/types.d.ts +8 -0
  140. package/dist/core/{post-diff-cycle-breaking.d.ts → post-diff-normalization.d.ts} +8 -1
  141. package/dist/core/post-diff-normalization.js +202 -0
  142. package/dist/core/sort/cycle-breakers.js +1 -1
  143. package/dist/core/sort/utils.d.ts +10 -0
  144. package/dist/core/sort/utils.js +28 -0
  145. package/package.json +1 -1
  146. package/src/core/catalog.diff.ts +4 -2
  147. package/src/core/catalog.model.ts +21 -8
  148. package/src/core/expand-replace-dependencies.test.ts +131 -0
  149. package/src/core/expand-replace-dependencies.ts +24 -0
  150. package/src/core/integrations/filter/dsl.test.ts +27 -0
  151. package/src/core/integrations/filter/flatten.ts +16 -0
  152. package/src/core/objects/aggregate/aggregate.diff.ts +33 -0
  153. package/src/core/objects/aggregate/aggregate.model.ts +22 -1
  154. package/src/core/objects/aggregate/changes/aggregate.base.ts +5 -1
  155. package/src/core/objects/aggregate/changes/aggregate.security-label.ts +99 -0
  156. package/src/core/objects/aggregate/changes/aggregate.types.ts +3 -1
  157. package/src/core/objects/base.model.ts +2 -0
  158. package/src/core/objects/domain/changes/domain.base.ts +5 -1
  159. package/src/core/objects/domain/changes/domain.security-label.test.ts +56 -0
  160. package/src/core/objects/domain/changes/domain.security-label.ts +77 -0
  161. package/src/core/objects/domain/changes/domain.types.ts +3 -1
  162. package/src/core/objects/domain/domain.diff.ts +33 -0
  163. package/src/core/objects/domain/domain.model.ts +22 -1
  164. package/src/core/objects/event-trigger/changes/event-trigger.base.ts +1 -1
  165. package/src/core/objects/event-trigger/changes/event-trigger.security-label.ts +95 -0
  166. package/src/core/objects/event-trigger/changes/event-trigger.types.ts +3 -1
  167. package/src/core/objects/event-trigger/event-trigger.diff.ts +33 -0
  168. package/src/core/objects/event-trigger/event-trigger.model.ts +22 -1
  169. package/src/core/objects/extract-with-retry.test.ts +143 -0
  170. package/src/core/objects/extract-with-retry.ts +87 -0
  171. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.base.ts +5 -1
  172. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.security-label.ts +95 -0
  173. package/src/core/objects/foreign-data-wrapper/foreign-table/changes/foreign-table.types.ts +3 -1
  174. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.diff.ts +33 -0
  175. package/src/core/objects/foreign-data-wrapper/foreign-table/foreign-table.model.ts +24 -1
  176. package/src/core/objects/index/index.diff.ts +0 -1
  177. package/src/core/objects/index/index.model.test.ts +37 -1
  178. package/src/core/objects/index/index.model.ts +25 -6
  179. package/src/core/objects/materialized-view/changes/materialized-view.base.ts +5 -1
  180. package/src/core/objects/materialized-view/changes/materialized-view.security-label.test.ts +63 -0
  181. package/src/core/objects/materialized-view/changes/materialized-view.security-label.ts +95 -0
  182. package/src/core/objects/materialized-view/changes/materialized-view.types.ts +3 -1
  183. package/src/core/objects/materialized-view/materialized-view.diff.ts +37 -0
  184. package/src/core/objects/materialized-view/materialized-view.model.test.ts +93 -0
  185. package/src/core/objects/materialized-view/materialized-view.model.ts +52 -8
  186. package/src/core/objects/procedure/changes/procedure.base.ts +5 -1
  187. package/src/core/objects/procedure/changes/procedure.security-label.ts +105 -0
  188. package/src/core/objects/procedure/changes/procedure.types.ts +3 -1
  189. package/src/core/objects/procedure/procedure.diff.ts +33 -0
  190. package/src/core/objects/procedure/procedure.model.test.ts +117 -0
  191. package/src/core/objects/procedure/procedure.model.ts +51 -7
  192. package/src/core/objects/publication/changes/publication.base.ts +1 -1
  193. package/src/core/objects/publication/changes/publication.security-label.ts +95 -0
  194. package/src/core/objects/publication/changes/publication.types.ts +3 -1
  195. package/src/core/objects/publication/publication.diff.ts +33 -0
  196. package/src/core/objects/publication/publication.model.ts +24 -1
  197. package/src/core/objects/rls-policy/rls-policy.diff.ts +19 -1
  198. package/src/core/objects/role/changes/role.base.ts +2 -1
  199. package/src/core/objects/role/changes/role.security-label.ts +77 -0
  200. package/src/core/objects/role/changes/role.types.ts +3 -1
  201. package/src/core/objects/role/role.diff.ts +33 -0
  202. package/src/core/objects/role/role.model.ts +32 -0
  203. package/src/core/objects/rule/rule.model.test.ts +99 -0
  204. package/src/core/objects/rule/rule.model.ts +28 -4
  205. package/src/core/objects/schema/changes/schema.alter.test.ts +1 -0
  206. package/src/core/objects/schema/changes/schema.base.ts +5 -1
  207. package/src/core/objects/schema/changes/schema.create.test.ts +1 -0
  208. package/src/core/objects/schema/changes/schema.drop.test.ts +1 -0
  209. package/src/core/objects/schema/changes/schema.security-label.test.ts +76 -0
  210. package/src/core/objects/schema/changes/schema.security-label.ts +77 -0
  211. package/src/core/objects/schema/changes/schema.types.ts +3 -1
  212. package/src/core/objects/schema/schema.diff.test.ts +1 -0
  213. package/src/core/objects/schema/schema.diff.ts +43 -1
  214. package/src/core/objects/schema/schema.model.ts +21 -1
  215. package/src/core/objects/security-label.types.test.ts +106 -0
  216. package/src/core/objects/security-label.types.ts +61 -0
  217. package/src/core/objects/sequence/changes/sequence.base.ts +5 -1
  218. package/src/core/objects/sequence/changes/sequence.security-label.test.ts +58 -0
  219. package/src/core/objects/sequence/changes/sequence.security-label.ts +92 -0
  220. package/src/core/objects/sequence/changes/sequence.types.ts +3 -1
  221. package/src/core/objects/sequence/sequence.diff.test.ts +87 -0
  222. package/src/core/objects/sequence/sequence.diff.ts +64 -6
  223. package/src/core/objects/sequence/sequence.model.ts +22 -1
  224. package/src/core/objects/subscription/changes/subscription.base.ts +1 -1
  225. package/src/core/objects/subscription/changes/subscription.security-label.ts +95 -0
  226. package/src/core/objects/subscription/changes/subscription.types.ts +3 -1
  227. package/src/core/objects/subscription/subscription.diff.ts +33 -0
  228. package/src/core/objects/subscription/subscription.model.ts +22 -1
  229. package/src/core/objects/table/changes/table.alter.test.ts +13 -21
  230. package/src/core/objects/table/changes/table.alter.ts +30 -3
  231. package/src/core/objects/table/changes/table.base.ts +5 -1
  232. package/src/core/objects/table/changes/table.security-label.test.ts +140 -0
  233. package/src/core/objects/table/changes/table.security-label.ts +183 -0
  234. package/src/core/objects/table/changes/table.types.ts +3 -1
  235. package/src/core/objects/table/table.diff.ts +111 -19
  236. package/src/core/objects/table/table.model.test.ts +209 -0
  237. package/src/core/objects/table/table.model.ts +94 -9
  238. package/src/core/objects/trigger/trigger.model.test.ts +113 -0
  239. package/src/core/objects/trigger/trigger.model.ts +28 -5
  240. package/src/core/objects/type/composite-type/changes/composite-type.base.ts +5 -1
  241. package/src/core/objects/type/composite-type/changes/composite-type.security-label.ts +95 -0
  242. package/src/core/objects/type/composite-type/changes/composite-type.types.ts +3 -1
  243. package/src/core/objects/type/composite-type/composite-type.diff.ts +33 -0
  244. package/src/core/objects/type/composite-type/composite-type.model.ts +26 -2
  245. package/src/core/objects/type/enum/changes/enum.base.ts +5 -1
  246. package/src/core/objects/type/enum/changes/enum.security-label.ts +77 -0
  247. package/src/core/objects/type/enum/changes/enum.types.ts +3 -1
  248. package/src/core/objects/type/enum/enum.diff.ts +33 -0
  249. package/src/core/objects/type/enum/enum.model.ts +25 -1
  250. package/src/core/objects/type/range/changes/range.base.ts +5 -1
  251. package/src/core/objects/type/range/changes/range.security-label.ts +77 -0
  252. package/src/core/objects/type/range/changes/range.types.ts +3 -1
  253. package/src/core/objects/type/range/range.diff.ts +33 -0
  254. package/src/core/objects/type/range/range.model.ts +22 -1
  255. package/src/core/objects/utils.ts +6 -0
  256. package/src/core/objects/view/changes/view.base.ts +5 -1
  257. package/src/core/objects/view/changes/view.security-label.test.ts +64 -0
  258. package/src/core/objects/view/changes/view.security-label.ts +77 -0
  259. package/src/core/objects/view/changes/view.types.ts +3 -1
  260. package/src/core/objects/view/view.diff.ts +31 -0
  261. package/src/core/objects/view/view.model.test.ts +90 -0
  262. package/src/core/objects/view/view.model.ts +53 -7
  263. package/src/core/plan/create.ts +3 -1
  264. package/src/core/plan/sql-format/fixtures.ts +1 -0
  265. package/src/core/plan/types.ts +8 -0
  266. package/src/core/{post-diff-cycle-breaking.test.ts → post-diff-normalization.test.ts} +168 -4
  267. package/src/core/post-diff-normalization.ts +260 -0
  268. package/src/core/sort/cycle-breakers.ts +1 -1
  269. package/src/core/sort/utils.ts +38 -0
  270. package/dist/core/post-diff-cycle-breaking.js +0 -100
  271. package/src/core/post-diff-cycle-breaking.ts +0 -138
@@ -0,0 +1,28 @@
1
+ import type { SecurityLabelProps } from "../../../security-label.types.ts";
2
+ import type { CompositeType } from "../composite-type.model.ts";
3
+ import { CreateCompositeTypeChange, DropCompositeTypeChange } from "./composite-type.base.ts";
4
+ export type SecurityLabelCompositeType = CreateSecurityLabelOnCompositeType | DropSecurityLabelOnCompositeType;
5
+ export declare class CreateSecurityLabelOnCompositeType extends CreateCompositeTypeChange {
6
+ readonly compositeType: CompositeType;
7
+ readonly securityLabel: SecurityLabelProps;
8
+ readonly scope: "security_label";
9
+ constructor(props: {
10
+ compositeType: CompositeType;
11
+ securityLabel: SecurityLabelProps;
12
+ });
13
+ get creates(): `securityLabel:${string}::provider:${string}`[];
14
+ get requires(): `type:${string}`[];
15
+ serialize(): string;
16
+ }
17
+ export declare class DropSecurityLabelOnCompositeType extends DropCompositeTypeChange {
18
+ readonly compositeType: CompositeType;
19
+ readonly securityLabel: SecurityLabelProps;
20
+ readonly scope: "security_label";
21
+ constructor(props: {
22
+ compositeType: CompositeType;
23
+ securityLabel: SecurityLabelProps;
24
+ });
25
+ get drops(): `securityLabel:${string}::provider:${string}`[];
26
+ get requires(): (`securityLabel:${string}::provider:${string}` | `type:${string}`)[];
27
+ serialize(): string;
28
+ }
@@ -0,0 +1,61 @@
1
+ import { quoteLiteral } from "../../../base.change.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { CreateCompositeTypeChange, DropCompositeTypeChange, } from "./composite-type.base.js";
4
+ export class CreateSecurityLabelOnCompositeType extends CreateCompositeTypeChange {
5
+ compositeType;
6
+ securityLabel;
7
+ scope = "security_label";
8
+ constructor(props) {
9
+ super();
10
+ this.compositeType = props.compositeType;
11
+ this.securityLabel = props.securityLabel;
12
+ }
13
+ get creates() {
14
+ return [
15
+ stableId.securityLabel(this.compositeType.stableId, this.securityLabel.provider),
16
+ ];
17
+ }
18
+ get requires() {
19
+ return [this.compositeType.stableId];
20
+ }
21
+ serialize() {
22
+ return [
23
+ "SECURITY LABEL FOR",
24
+ this.securityLabel.provider,
25
+ "ON TYPE",
26
+ `${this.compositeType.schema}.${this.compositeType.name}`,
27
+ "IS",
28
+ quoteLiteral(this.securityLabel.label),
29
+ ].join(" ");
30
+ }
31
+ }
32
+ export class DropSecurityLabelOnCompositeType extends DropCompositeTypeChange {
33
+ compositeType;
34
+ securityLabel;
35
+ scope = "security_label";
36
+ constructor(props) {
37
+ super();
38
+ this.compositeType = props.compositeType;
39
+ this.securityLabel = props.securityLabel;
40
+ }
41
+ get drops() {
42
+ return [
43
+ stableId.securityLabel(this.compositeType.stableId, this.securityLabel.provider),
44
+ ];
45
+ }
46
+ get requires() {
47
+ return [
48
+ stableId.securityLabel(this.compositeType.stableId, this.securityLabel.provider),
49
+ this.compositeType.stableId,
50
+ ];
51
+ }
52
+ serialize() {
53
+ return [
54
+ "SECURITY LABEL FOR",
55
+ this.securityLabel.provider,
56
+ "ON TYPE",
57
+ `${this.compositeType.schema}.${this.compositeType.name}`,
58
+ "IS NULL",
59
+ ].join(" ");
60
+ }
61
+ }
@@ -3,5 +3,6 @@ import type { CommentCompositeType } from "./composite-type.comment.ts";
3
3
  import type { CreateCompositeType } from "./composite-type.create.ts";
4
4
  import type { DropCompositeType } from "./composite-type.drop.ts";
5
5
  import type { CompositeTypePrivilege } from "./composite-type.privilege.ts";
6
+ import type { SecurityLabelCompositeType } from "./composite-type.security-label.ts";
6
7
  /** Union of all composite-type-related change variants (`objectType: "composite_type"`). @category Change Types */
7
- export type CompositeTypeChange = AlterCompositeType | CommentCompositeType | CreateCompositeType | DropCompositeType | CompositeTypePrivilege;
8
+ export type CompositeTypeChange = AlterCompositeType | CommentCompositeType | CreateCompositeType | DropCompositeType | CompositeTypePrivilege | SecurityLabelCompositeType;
@@ -1,11 +1,13 @@
1
1
  import { diffObjects } from "../../base.diff.js";
2
2
  import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../../base.privilege-diff.js";
3
+ import { diffSecurityLabels } from "../../security-label.types.js";
3
4
  import { deepEqual, hasNonAlterableChanges } from "../../utils.js";
4
5
  import { AlterCompositeTypeAddAttribute, AlterCompositeTypeAlterAttributeType, AlterCompositeTypeChangeOwner, AlterCompositeTypeDropAttribute, } from "./changes/composite-type.alter.js";
5
6
  import { CreateCommentOnCompositeType, CreateCommentOnCompositeTypeAttribute, DropCommentOnCompositeType, DropCommentOnCompositeTypeAttribute, } from "./changes/composite-type.comment.js";
6
7
  import { CreateCompositeType } from "./changes/composite-type.create.js";
7
8
  import { DropCompositeType } from "./changes/composite-type.drop.js";
8
9
  import { GrantCompositeTypePrivileges, RevokeCompositeTypePrivileges, RevokeGrantOptionCompositeTypePrivileges, } from "./changes/composite-type.privilege.js";
10
+ import { CreateSecurityLabelOnCompositeType, DropSecurityLabelOnCompositeType, } from "./changes/composite-type.security-label.js";
9
11
  /**
10
12
  * Diff two sets of composite types from main and branch catalogs.
11
13
  *
@@ -32,6 +34,12 @@ export function diffCompositeTypes(ctx, main, branch) {
32
34
  if (ct.comment !== null) {
33
35
  changes.push(new CreateCommentOnCompositeType({ compositeType: ct }));
34
36
  }
37
+ for (const label of ct.security_labels) {
38
+ changes.push(new CreateSecurityLabelOnCompositeType({
39
+ compositeType: ct,
40
+ securityLabel: label,
41
+ }));
42
+ }
35
43
  // Attribute comments on creation
36
44
  for (const attr of ct.columns) {
37
45
  if (attr.comment !== null) {
@@ -111,6 +119,14 @@ export function diffCompositeTypes(ctx, main, branch) {
111
119
  }));
112
120
  }
113
121
  }
122
+ // SECURITY LABELS
123
+ changes.push(...diffSecurityLabels(mainCompositeType.security_labels, branchCompositeType.security_labels, (securityLabel) => new CreateSecurityLabelOnCompositeType({
124
+ compositeType: branchCompositeType,
125
+ securityLabel,
126
+ }), (securityLabel) => new DropSecurityLabelOnCompositeType({
127
+ compositeType: mainCompositeType,
128
+ securityLabel,
129
+ })));
114
130
  // ATTRIBUTE diffs
115
131
  const mainAttrs = new Map(mainCompositeType.columns.map((c) => [c.name, c]));
116
132
  const branchAttrs = new Map(branchCompositeType.columns.map((c) => [c.name, c]));
@@ -2,6 +2,7 @@ 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";
5
+ import { type SecurityLabelProps } from "../../security-label.types.ts";
5
6
  declare const compositeTypePropsSchema: z.ZodObject<{
6
7
  schema: z.ZodString;
7
8
  name: z.ZodString;
@@ -40,6 +41,10 @@ declare const compositeTypePropsSchema: z.ZodObject<{
40
41
  collation: z.ZodNullable<z.ZodString>;
41
42
  default: z.ZodNullable<z.ZodString>;
42
43
  comment: z.ZodNullable<z.ZodString>;
44
+ security_labels: z.ZodOptional<z.ZodArray<z.ZodObject<{
45
+ provider: z.ZodString;
46
+ label: z.ZodString;
47
+ }, z.z.core.$strip>>>;
43
48
  }, z.z.core.$strip>>;
44
49
  privileges: z.ZodArray<z.ZodObject<{
45
50
  grantee: z.ZodString;
@@ -47,6 +52,10 @@ declare const compositeTypePropsSchema: z.ZodObject<{
47
52
  grantable: z.ZodBoolean;
48
53
  columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
49
54
  }, z.z.core.$strip>>;
55
+ security_labels: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
56
+ provider: z.ZodString;
57
+ label: z.ZodString;
58
+ }, z.z.core.$strip>>>>;
50
59
  }, z.z.core.$strip>;
51
60
  type CompositeTypePrivilegeProps = PrivilegeProps;
52
61
  export type CompositeTypeProps = z.infer<typeof compositeTypePropsSchema>;
@@ -68,6 +77,7 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
68
77
  readonly comment: CompositeTypeProps["comment"];
69
78
  readonly columns: CompositeTypeProps["columns"];
70
79
  readonly privileges: CompositeTypePrivilegeProps[];
80
+ readonly security_labels: SecurityLabelProps[];
71
81
  constructor(props: CompositeTypeProps);
72
82
  get stableId(): `type:${string}`;
73
83
  get identityFields(): {
@@ -105,6 +115,10 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
105
115
  collation: string | null;
106
116
  default: string | null;
107
117
  comment: string | null;
118
+ security_labels?: {
119
+ provider: string;
120
+ label: string;
121
+ }[] | undefined;
108
122
  }[];
109
123
  privileges: {
110
124
  grantee: string;
@@ -112,6 +126,10 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
112
126
  grantable: boolean;
113
127
  columns?: string[] | null | undefined;
114
128
  }[];
129
+ security_labels: {
130
+ provider: string;
131
+ label: string;
132
+ }[];
115
133
  };
116
134
  stableSnapshot(): {
117
135
  identity: {
@@ -122,6 +140,10 @@ export declare class CompositeType extends BasePgModel implements TableLikeObjec
122
140
  columns: {
123
141
  [x: string]: unknown;
124
142
  }[];
143
+ security_labels: {
144
+ provider: string;
145
+ label: string;
146
+ }[];
125
147
  row_security: boolean;
126
148
  force_row_security: boolean;
127
149
  has_indexes: boolean;
@@ -2,6 +2,7 @@ import { sql } from "@ts-safeql/sql-tag";
2
2
  import z from "zod";
3
3
  import { BasePgModel, columnPropsSchema, } from "../../base.model.js";
4
4
  import { privilegePropsSchema, } from "../../base.privilege-diff.js";
5
+ import { normalizeSecurityLabels, securityLabelPropsSchema, } from "../../security-label.types.js";
5
6
  import { ReplicaIdentitySchema } from "../../table/table.model.js";
6
7
  const compositeTypePropsSchema = z.object({
7
8
  schema: z.string(),
@@ -21,6 +22,7 @@ const compositeTypePropsSchema = z.object({
21
22
  comment: z.string().nullable(),
22
23
  columns: z.array(columnPropsSchema),
23
24
  privileges: z.array(privilegePropsSchema),
25
+ security_labels: z.array(securityLabelPropsSchema).default([]).optional(),
24
26
  });
25
27
  export class CompositeType extends BasePgModel {
26
28
  schema;
@@ -40,6 +42,7 @@ export class CompositeType extends BasePgModel {
40
42
  comment;
41
43
  columns;
42
44
  privileges;
45
+ security_labels;
43
46
  constructor(props) {
44
47
  super();
45
48
  // Identity fields
@@ -61,6 +64,7 @@ export class CompositeType extends BasePgModel {
61
64
  this.comment = props.comment;
62
65
  this.columns = props.columns;
63
66
  this.privileges = props.privileges;
67
+ this.security_labels = props.security_labels ?? [];
64
68
  }
65
69
  get stableId() {
66
70
  return `type:${this.schema}.${this.name}`;
@@ -88,6 +92,7 @@ export class CompositeType extends BasePgModel {
88
92
  comment: this.comment,
89
93
  columns: this.columns,
90
94
  privileges: this.privileges,
95
+ security_labels: this.security_labels,
91
96
  };
92
97
  }
93
98
  stableSnapshot() {
@@ -106,6 +111,7 @@ export class CompositeType extends BasePgModel {
106
111
  data: {
107
112
  ...this.dataFields,
108
113
  columns: normalizeColumns(),
114
+ security_labels: normalizeSecurityLabels(this.security_labels),
109
115
  },
110
116
  };
111
117
  }
@@ -137,7 +143,8 @@ export async function extractCompositeTypes(pool) {
137
143
  obj_description(c.reltype, 'pg_type') AS comment,
138
144
  c.relacl AS relacl, -- used by privileges LATERAL
139
145
  c.relowner AS relowner,
140
- c.oid AS oid
146
+ c.oid AS oid,
147
+ c.reltype AS reltype
141
148
  FROM pg_catalog.pg_class c
142
149
  LEFT JOIN extension_oids e ON c.reltype = e.objid
143
150
  WHERE NOT c.relnamespace::regnamespace::text LIKE ANY (ARRAY['pg\\_%', 'information\\_schema'])
@@ -161,7 +168,20 @@ export async function extractCompositeTypes(pool) {
161
168
  ct.owner,
162
169
  ct.comment,
163
170
  COALESCE(priv.privileges, '[]') AS privileges,
164
- COALESCE(cols.columns, '[]') AS columns
171
+ COALESCE(cols.columns, '[]') AS columns,
172
+ COALESCE(
173
+ (
174
+ SELECT json_agg(
175
+ json_build_object('provider', sl.provider, 'label', sl.label)
176
+ ORDER BY sl.provider
177
+ )
178
+ FROM pg_catalog.pg_seclabel sl
179
+ WHERE sl.objoid = ct.reltype
180
+ AND sl.classoid = 'pg_type'::regclass
181
+ AND sl.objsubid = 0
182
+ ),
183
+ '[]'::json
184
+ ) AS security_labels
165
185
  FROM composite_types ct
166
186
 
167
187
  -- privileges as a per-row LATERAL subquery
@@ -2,7 +2,7 @@ import { BaseChange } from "../../../base.change.ts";
2
2
  import type { Enum } from "../enum.model.ts";
3
3
  declare abstract class BaseEnumChange extends BaseChange {
4
4
  abstract readonly enum: Enum;
5
- abstract readonly scope: "object" | "comment" | "privilege";
5
+ abstract readonly scope: "object" | "comment" | "privilege" | "security_label";
6
6
  readonly objectType: "enum";
7
7
  }
8
8
  export declare abstract class CreateEnumChange extends BaseEnumChange {
@@ -0,0 +1,28 @@
1
+ import type { SecurityLabelProps } from "../../../security-label.types.ts";
2
+ import type { Enum } from "../enum.model.ts";
3
+ import { CreateEnumChange, DropEnumChange } from "./enum.base.ts";
4
+ export type SecurityLabelEnum = CreateSecurityLabelOnEnum | DropSecurityLabelOnEnum;
5
+ export declare class CreateSecurityLabelOnEnum extends CreateEnumChange {
6
+ readonly enum: Enum;
7
+ readonly securityLabel: SecurityLabelProps;
8
+ readonly scope: "security_label";
9
+ constructor(props: {
10
+ enum: Enum;
11
+ securityLabel: SecurityLabelProps;
12
+ });
13
+ get creates(): `securityLabel:${string}::provider:${string}`[];
14
+ get requires(): `type:${string}`[];
15
+ serialize(): string;
16
+ }
17
+ export declare class DropSecurityLabelOnEnum extends DropEnumChange {
18
+ readonly enum: Enum;
19
+ readonly securityLabel: SecurityLabelProps;
20
+ readonly scope: "security_label";
21
+ constructor(props: {
22
+ enum: Enum;
23
+ securityLabel: SecurityLabelProps;
24
+ });
25
+ get drops(): `securityLabel:${string}::provider:${string}`[];
26
+ get requires(): (`securityLabel:${string}::provider:${string}` | `type:${string}`)[];
27
+ serialize(): string;
28
+ }
@@ -0,0 +1,61 @@
1
+ import { quoteLiteral } from "../../../base.change.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { CreateEnumChange, DropEnumChange } from "./enum.base.js";
4
+ export class CreateSecurityLabelOnEnum extends CreateEnumChange {
5
+ enum;
6
+ securityLabel;
7
+ scope = "security_label";
8
+ constructor(props) {
9
+ super();
10
+ this.enum = props.enum;
11
+ this.securityLabel = props.securityLabel;
12
+ }
13
+ get creates() {
14
+ return [
15
+ stableId.securityLabel(this.enum.stableId, this.securityLabel.provider),
16
+ ];
17
+ }
18
+ get requires() {
19
+ return [this.enum.stableId];
20
+ }
21
+ serialize() {
22
+ return [
23
+ "SECURITY LABEL FOR",
24
+ this.securityLabel.provider,
25
+ "ON TYPE",
26
+ `${this.enum.schema}.${this.enum.name}`,
27
+ "IS",
28
+ quoteLiteral(this.securityLabel.label),
29
+ ].join(" ");
30
+ }
31
+ }
32
+ export class DropSecurityLabelOnEnum extends DropEnumChange {
33
+ enum;
34
+ securityLabel;
35
+ scope = "security_label";
36
+ constructor(props) {
37
+ super();
38
+ this.enum = props.enum;
39
+ this.securityLabel = props.securityLabel;
40
+ }
41
+ get drops() {
42
+ return [
43
+ stableId.securityLabel(this.enum.stableId, this.securityLabel.provider),
44
+ ];
45
+ }
46
+ get requires() {
47
+ return [
48
+ stableId.securityLabel(this.enum.stableId, this.securityLabel.provider),
49
+ this.enum.stableId,
50
+ ];
51
+ }
52
+ serialize() {
53
+ return [
54
+ "SECURITY LABEL FOR",
55
+ this.securityLabel.provider,
56
+ "ON TYPE",
57
+ `${this.enum.schema}.${this.enum.name}`,
58
+ "IS NULL",
59
+ ].join(" ");
60
+ }
61
+ }
@@ -3,5 +3,6 @@ import type { CommentEnum } from "./enum.comment.ts";
3
3
  import type { CreateEnum } from "./enum.create.ts";
4
4
  import type { DropEnum } from "./enum.drop.ts";
5
5
  import type { EnumPrivilege } from "./enum.privilege.ts";
6
+ import type { SecurityLabelEnum } from "./enum.security-label.ts";
6
7
  /** Union of all enum-related change variants (`objectType: "enum"`). @category Change Types */
7
- export type EnumChange = AlterEnum | CommentEnum | CreateEnum | DropEnum | EnumPrivilege;
8
+ export type EnumChange = AlterEnum | CommentEnum | CreateEnum | DropEnum | EnumPrivilege | SecurityLabelEnum;
@@ -1,10 +1,12 @@
1
1
  import { diffObjects } from "../../base.diff.js";
2
2
  import { diffPrivileges, emitObjectPrivilegeChanges, filterPublicBuiltInDefaults, } from "../../base.privilege-diff.js";
3
+ import { diffSecurityLabels } from "../../security-label.types.js";
3
4
  import { AlterEnumAddValue, AlterEnumChangeOwner, } from "./changes/enum.alter.js";
4
5
  import { CreateCommentOnEnum, DropCommentOnEnum, } from "./changes/enum.comment.js";
5
6
  import { CreateEnum } from "./changes/enum.create.js";
6
7
  import { DropEnum } from "./changes/enum.drop.js";
7
8
  import { GrantEnumPrivileges, RevokeEnumPrivileges, RevokeGrantOptionEnumPrivileges, } from "./changes/enum.privilege.js";
9
+ import { CreateSecurityLabelOnEnum, DropSecurityLabelOnEnum, } from "./changes/enum.security-label.js";
8
10
  /**
9
11
  * Diff two sets of enums from main and branch catalogs.
10
12
  *
@@ -30,6 +32,12 @@ export function diffEnums(ctx, main, branch) {
30
32
  if (createdEnum.comment !== null) {
31
33
  changes.push(new CreateCommentOnEnum({ enum: createdEnum }));
32
34
  }
35
+ for (const label of createdEnum.security_labels) {
36
+ changes.push(new CreateSecurityLabelOnEnum({
37
+ enum: createdEnum,
38
+ securityLabel: label,
39
+ }));
40
+ }
33
41
  // PRIVILEGES: For created objects, compare against default privileges state
34
42
  // The migration script will run ALTER DEFAULT PRIVILEGES before CREATE (via constraint spec),
35
43
  // so objects are created with the default privileges state in effect.
@@ -106,6 +114,14 @@ export function diffEnums(ctx, main, branch) {
106
114
  changes.push(new CreateCommentOnEnum({ enum: branchEnum }));
107
115
  }
108
116
  }
117
+ // SECURITY LABELS
118
+ changes.push(...diffSecurityLabels(mainEnum.security_labels, branchEnum.security_labels, (securityLabel) => new CreateSecurityLabelOnEnum({
119
+ enum: branchEnum,
120
+ securityLabel,
121
+ }), (securityLabel) => new DropSecurityLabelOnEnum({
122
+ enum: mainEnum,
123
+ securityLabel,
124
+ })));
109
125
  // PRIVILEGES
110
126
  // Filter out PUBLIC's built-in default USAGE privilege from main catalog
111
127
  // (PostgreSQL grants it automatically, so we shouldn't compare it)
@@ -2,6 +2,7 @@ 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";
5
+ import { type SecurityLabelProps } from "../../security-label.types.ts";
5
6
  /**
6
7
  * All properties exposed by CREATE TYPE AS ENUM statement are included in diff output.
7
8
  * https://www.postgresql.org/docs/current/sql-createtype.html
@@ -31,6 +32,10 @@ declare const enumPropsSchema: z.ZodObject<{
31
32
  grantable: z.ZodBoolean;
32
33
  columns: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString>>>;
33
34
  }, z.z.core.$strip>>;
35
+ security_labels: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{
36
+ provider: z.ZodString;
37
+ label: z.ZodString;
38
+ }, z.z.core.$strip>>>>;
34
39
  }, z.z.core.$strip>;
35
40
  type EnumPrivilegeProps = PrivilegeProps;
36
41
  export type EnumProps = z.infer<typeof enumPropsSchema>;
@@ -41,6 +46,7 @@ export declare class Enum extends BasePgModel {
41
46
  readonly labels: EnumProps["labels"];
42
47
  readonly comment: EnumProps["comment"];
43
48
  readonly privileges: EnumPrivilegeProps[];
49
+ readonly security_labels: SecurityLabelProps[];
44
50
  constructor(props: EnumProps);
45
51
  get stableId(): `type:${string}`;
46
52
  get identityFields(): {
@@ -60,6 +66,10 @@ export declare class Enum extends BasePgModel {
60
66
  privilege: string;
61
67
  grantable: boolean;
62
68
  }[];
69
+ security_labels: {
70
+ provider: string;
71
+ label: string;
72
+ }[];
63
73
  };
64
74
  }
65
75
  export declare function extractEnums(pool: Pool): Promise<Enum[]>;
@@ -2,6 +2,7 @@ import { sql } from "@ts-safeql/sql-tag";
2
2
  import z from "zod";
3
3
  import { BasePgModel } from "../../base.model.js";
4
4
  import { privilegePropsSchema, } from "../../base.privilege-diff.js";
5
+ import { securityLabelPropsSchema, } from "../../security-label.types.js";
5
6
  const enumLabelSchema = z.object({
6
7
  sort_order: z.number(),
7
8
  label: z.string(),
@@ -27,6 +28,7 @@ const enumPropsSchema = z.object({
27
28
  labels: z.array(enumLabelSchema),
28
29
  comment: z.string().nullable(),
29
30
  privileges: z.array(privilegePropsSchema),
31
+ security_labels: z.array(securityLabelPropsSchema).default([]).optional(),
30
32
  });
31
33
  export class Enum extends BasePgModel {
32
34
  schema;
@@ -35,6 +37,7 @@ export class Enum extends BasePgModel {
35
37
  labels;
36
38
  comment;
37
39
  privileges;
40
+ security_labels;
38
41
  constructor(props) {
39
42
  super();
40
43
  // Identity fields
@@ -45,6 +48,7 @@ export class Enum extends BasePgModel {
45
48
  this.labels = props.labels;
46
49
  this.comment = props.comment;
47
50
  this.privileges = props.privileges;
51
+ this.security_labels = props.security_labels ?? [];
48
52
  }
49
53
  get stableId() {
50
54
  return `type:${this.schema}.${this.name}`;
@@ -88,6 +92,7 @@ export class Enum extends BasePgModel {
88
92
  labels,
89
93
  comment: this.comment,
90
94
  privileges,
95
+ security_labels: this.security_labels,
91
96
  };
92
97
  }
93
98
  }
@@ -121,7 +126,20 @@ select
121
126
  )
122
127
  from lateral aclexplode(COALESCE(t.typacl, acldefault('T', t.typowner))) as x(grantor, grantee, privilege_type, is_grantable)
123
128
  ), '[]'
124
- ) as privileges
129
+ ) as privileges,
130
+ coalesce(
131
+ (
132
+ select json_agg(
133
+ json_build_object('provider', sl.provider, 'label', sl.label)
134
+ order by sl.provider
135
+ )
136
+ from pg_catalog.pg_seclabel sl
137
+ where sl.objoid = t.oid
138
+ and sl.classoid = 'pg_type'::regclass
139
+ and sl.objsubid = 0
140
+ ),
141
+ '[]'::json
142
+ ) as security_labels
125
143
  from
126
144
  pg_catalog.pg_enum e
127
145
  inner join pg_catalog.pg_type t on t.oid = e.enumtypid
@@ -142,6 +160,7 @@ order by
142
160
  labels: [],
143
161
  comment: e.comment,
144
162
  privileges: e.privileges,
163
+ security_labels: e.security_labels,
145
164
  };
146
165
  }
147
166
  grouped[key].labels.push({ sort_order: e.sort_order, label: e.label });
@@ -2,7 +2,7 @@ import { BaseChange } from "../../../base.change.ts";
2
2
  import type { Range } from "../range.model.ts";
3
3
  declare abstract class BaseRangeChange extends BaseChange {
4
4
  abstract readonly range: Range;
5
- abstract readonly scope: "object" | "comment" | "privilege";
5
+ abstract readonly scope: "object" | "comment" | "privilege" | "security_label";
6
6
  readonly objectType: "range";
7
7
  }
8
8
  export declare abstract class CreateRangeChange extends BaseRangeChange {
@@ -0,0 +1,28 @@
1
+ import type { SecurityLabelProps } from "../../../security-label.types.ts";
2
+ import type { Range } from "../range.model.ts";
3
+ import { CreateRangeChange, DropRangeChange } from "./range.base.ts";
4
+ export type SecurityLabelRange = CreateSecurityLabelOnRange | DropSecurityLabelOnRange;
5
+ export declare class CreateSecurityLabelOnRange extends CreateRangeChange {
6
+ readonly range: Range;
7
+ readonly securityLabel: SecurityLabelProps;
8
+ readonly scope: "security_label";
9
+ constructor(props: {
10
+ range: Range;
11
+ securityLabel: SecurityLabelProps;
12
+ });
13
+ get creates(): `securityLabel:${string}::provider:${string}`[];
14
+ get requires(): `type:${string}`[];
15
+ serialize(): string;
16
+ }
17
+ export declare class DropSecurityLabelOnRange extends DropRangeChange {
18
+ readonly range: Range;
19
+ readonly securityLabel: SecurityLabelProps;
20
+ readonly scope: "security_label";
21
+ constructor(props: {
22
+ range: Range;
23
+ securityLabel: SecurityLabelProps;
24
+ });
25
+ get drops(): `securityLabel:${string}::provider:${string}`[];
26
+ get requires(): (`securityLabel:${string}::provider:${string}` | `type:${string}`)[];
27
+ serialize(): string;
28
+ }
@@ -0,0 +1,61 @@
1
+ import { quoteLiteral } from "../../../base.change.js";
2
+ import { stableId } from "../../../utils.js";
3
+ import { CreateRangeChange, DropRangeChange } from "./range.base.js";
4
+ export class CreateSecurityLabelOnRange extends CreateRangeChange {
5
+ range;
6
+ securityLabel;
7
+ scope = "security_label";
8
+ constructor(props) {
9
+ super();
10
+ this.range = props.range;
11
+ this.securityLabel = props.securityLabel;
12
+ }
13
+ get creates() {
14
+ return [
15
+ stableId.securityLabel(this.range.stableId, this.securityLabel.provider),
16
+ ];
17
+ }
18
+ get requires() {
19
+ return [this.range.stableId];
20
+ }
21
+ serialize() {
22
+ return [
23
+ "SECURITY LABEL FOR",
24
+ this.securityLabel.provider,
25
+ "ON TYPE",
26
+ `${this.range.schema}.${this.range.name}`,
27
+ "IS",
28
+ quoteLiteral(this.securityLabel.label),
29
+ ].join(" ");
30
+ }
31
+ }
32
+ export class DropSecurityLabelOnRange extends DropRangeChange {
33
+ range;
34
+ securityLabel;
35
+ scope = "security_label";
36
+ constructor(props) {
37
+ super();
38
+ this.range = props.range;
39
+ this.securityLabel = props.securityLabel;
40
+ }
41
+ get drops() {
42
+ return [
43
+ stableId.securityLabel(this.range.stableId, this.securityLabel.provider),
44
+ ];
45
+ }
46
+ get requires() {
47
+ return [
48
+ stableId.securityLabel(this.range.stableId, this.securityLabel.provider),
49
+ this.range.stableId,
50
+ ];
51
+ }
52
+ serialize() {
53
+ return [
54
+ "SECURITY LABEL FOR",
55
+ this.securityLabel.provider,
56
+ "ON TYPE",
57
+ `${this.range.schema}.${this.range.name}`,
58
+ "IS NULL",
59
+ ].join(" ");
60
+ }
61
+ }
@@ -3,5 +3,6 @@ import type { CommentRange } from "./range.comment.ts";
3
3
  import type { CreateRange } from "./range.create.ts";
4
4
  import type { DropRange } from "./range.drop.ts";
5
5
  import type { RangePrivilege } from "./range.privilege.ts";
6
+ import type { SecurityLabelRange } from "./range.security-label.ts";
6
7
  /** Union of all range-related change variants (`objectType: "range"`). @category Change Types */
7
- export type RangeChange = AlterRange | CommentRange | CreateRange | DropRange | RangePrivilege;
8
+ export type RangeChange = AlterRange | CommentRange | CreateRange | DropRange | RangePrivilege | SecurityLabelRange;