okmodel 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +727 -37
- package/dist/adapters/capabilities.d.ts +34 -0
- package/dist/adapters/pg/bunsql-extra.d.ts +17 -0
- package/dist/adapters/pg/bunsql.d.ts +60 -0
- package/dist/adapters/pg/call.d.ts +2 -12
- package/dist/adapters/pg/nodepostgres-extra.d.ts +18 -0
- package/dist/adapters/pg/nodepostgres.d.ts +57 -0
- package/dist/adapters/pg/postgres-extra.d.ts +50 -1
- package/dist/adapters/pg/postgresjs.d.ts +0 -4
- package/dist/adapters/pg/session.d.ts +94 -0
- package/dist/adapters/pg/watch.d.ts +18 -0
- package/dist/contracts/catalog/enum.d.ts +31 -4
- package/dist/contracts/catalog/extension.d.ts +61 -0
- package/dist/contracts/catalog/object.d.ts +1 -0
- package/dist/contracts/catalog/privilege.d.ts +64 -0
- package/dist/contracts/catalog/routine.d.ts +56 -0
- package/dist/contracts/catalog/types.d.ts +179 -18
- package/dist/contracts/catalog/view.d.ts +73 -0
- package/dist/contracts/connection.d.ts +13 -0
- package/dist/contracts/driver.d.ts +18 -5
- package/dist/contracts/error.d.ts +17 -1
- package/dist/contracts/generator.d.ts +63 -0
- package/dist/contracts/index.d.ts +2 -2
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/internal.js +11 -9
- package/dist/contracts/location.d.ts +24 -0
- package/dist/contracts/rows.d.ts +15 -0
- package/dist/dialects/pg/archive-bind.d.ts +22 -0
- package/dist/dialects/pg/column.d.ts +129 -10
- package/dist/dialects/pg/compile.d.ts +1 -0
- package/dist/dialects/pg/custom.d.ts +6 -0
- package/dist/dialects/pg/ddl.d.ts +65 -1
- package/dist/dialects/pg/enum.d.ts +10 -8
- package/dist/dialects/pg/ext/citext.d.ts +14 -0
- package/dist/dialects/pg/ext/citext.js +11 -0
- package/dist/dialects/pg/ext/index.d.ts +52 -0
- package/dist/dialects/pg/ext/index.js +6 -0
- package/dist/dialects/pg/ext/pg-trgm.d.ts +53 -0
- package/dist/dialects/pg/ext/pg-trgm.js +42 -0
- package/dist/dialects/pg/filter-parse.d.ts +19 -0
- package/dist/dialects/pg/filters.d.ts +19 -0
- package/dist/dialects/pg/fn/index.d.ts +107 -0
- package/dist/dialects/pg/fn/index.js +175 -0
- package/dist/dialects/pg/fn/touch.d.ts +14 -0
- package/dist/dialects/pg/index.d.ts +11 -2
- package/dist/dialects/pg/index.js +243 -1062
- package/dist/dialects/pg/introspect.d.ts +10 -1
- package/dist/dialects/pg/keys.d.ts +19 -3
- package/dist/dialects/pg/model.d.ts +223 -2
- package/dist/dialects/pg/operator-fit.d.ts +86 -0
- package/dist/dialects/pg/operators.d.ts +46 -1
- package/dist/dialects/pg/ops/arr-append.d.ts +9 -0
- package/dist/dialects/pg/ops/arr-ns.d.ts +7 -0
- package/dist/dialects/pg/ops/arr-remove.d.ts +9 -0
- package/dist/dialects/pg/ops/containedBy.d.ts +9 -0
- package/dist/dialects/pg/ops/contains.d.ts +8 -4
- package/dist/dialects/pg/ops/hasAnyKey.d.ts +8 -0
- package/dist/dialects/pg/ops/hasKey.d.ts +8 -0
- package/dist/dialects/pg/ops/json-ns.d.ts +6 -0
- package/dist/dialects/pg/ops/json-set.d.ts +12 -0
- package/dist/dialects/pg/ops/matches.d.ts +16 -0
- package/dist/dialects/pg/ops/overlaps.d.ts +9 -0
- package/dist/dialects/pg/ops/path.d.ts +13 -0
- package/dist/dialects/pg/preset.d.ts +76 -0
- package/dist/dialects/pg/relations.d.ts +59 -2
- package/dist/dialects/pg/role/check.d.ts +45 -0
- package/dist/dialects/pg/role/index.d.ts +50 -0
- package/dist/dialects/pg/role/sql.d.ts +44 -0
- package/dist/dialects/pg/schema.d.ts +109 -5
- package/dist/dialects/pg/table.d.ts +137 -11
- package/dist/dialects/pg/temporal.d.ts +9 -7
- package/dist/dialects/pg/tenancy.d.ts +103 -0
- package/dist/dialects/pg/through.d.ts +21 -0
- package/dist/dialects/pg/trait.d.ts +141 -0
- package/dist/dialects/pg/view/client.d.ts +30 -0
- package/dist/dialects/pg/view/depend.d.ts +35 -0
- package/dist/dialects/pg/view/index.d.ts +114 -0
- package/dist/dialects/pg/view/index.js +289 -0
- package/dist/dialects/pg/view/scratch.d.ts +21 -0
- package/dist/dialects/pg/where.d.ts +37 -0
- package/dist/runtime/aggregate.d.ts +25 -0
- package/dist/runtime/archive-handle.d.ts +18 -0
- package/dist/runtime/archive-rules.d.ts +12 -0
- package/dist/runtime/archive.d.ts +73 -0
- package/dist/runtime/batch.d.ts +20 -0
- package/dist/runtime/client.d.ts +114 -5
- package/dist/runtime/conflict.d.ts +2 -1
- package/dist/runtime/exposure.d.ts +27 -0
- package/dist/runtime/hookm.d.ts +39 -0
- package/dist/runtime/ids/index.d.ts +11 -0
- package/dist/runtime/ids/index.js +193 -0
- package/dist/runtime/ids/okid-extended.d.ts +19 -0
- package/dist/runtime/ids/okid-generator.d.ts +21 -0
- package/dist/runtime/ids/okid-shared.d.ts +89 -0
- package/dist/runtime/ids/okid.d.ts +24 -0
- package/dist/runtime/ids/uuid.d.ts +21 -0
- package/dist/runtime/lock.d.ts +22 -0
- package/dist/runtime/operator-sql.d.ts +8 -0
- package/dist/runtime/page.d.ts +25 -0
- package/dist/runtime/pg/bun.d.ts +30 -0
- package/dist/runtime/pg/bun.js +52 -0
- package/dist/runtime/pg/pg.d.ts +29 -0
- package/dist/runtime/pg/pg.js +52 -0
- package/dist/runtime/pg/pglite.js +16 -17
- package/dist/runtime/pg/postgresjs.js +14 -24
- package/dist/runtime/plan.d.ts +146 -7
- package/dist/runtime/preset-stack.d.ts +17 -0
- package/dist/runtime/presets.d.ts +48 -0
- package/dist/runtime/read-stream.d.ts +26 -0
- package/dist/runtime/safety/index.d.ts +159 -0
- package/dist/runtime/safety/index.js +294 -0
- package/dist/runtime/safety-hook.d.ts +42 -0
- package/dist/runtime/server-check.d.ts +34 -0
- package/dist/runtime/tenancy/index.d.ts +37 -0
- package/dist/runtime/tenancy/index.js +368 -0
- package/dist/runtime/trait-read.d.ts +30 -0
- package/dist/runtime/traits/index.d.ts +133 -0
- package/dist/runtime/traits/index.js +646 -0
- package/dist/runtime/transaction.d.ts +19 -0
- package/dist/runtime/tx.d.ts +22 -7
- package/dist/runtime/types.d.ts +376 -27
- package/dist/runtime/validate/bind.d.ts +11 -0
- package/dist/runtime/validate/closed.d.ts +16 -0
- package/dist/runtime/validate/engine.d.ts +41 -0
- package/dist/runtime/validate/hook.d.ts +17 -0
- package/dist/runtime/validate/index.d.ts +21 -0
- package/dist/runtime/validate/index.js +175 -0
- package/dist/runtime/validate/load.d.ts +13 -0
- package/dist/runtime/validate/places.d.ts +41 -0
- package/dist/runtime/validate/rules.d.ts +108 -0
- package/dist/runtime/validate/surface.d.ts +102 -0
- package/dist/runtime/write.d.ts +30 -5
- package/dist/shared/01yr20s5.js +149 -0
- package/dist/shared/0jc3ffzf.js +154 -0
- package/dist/shared/0v1g424p.js +26 -0
- package/dist/shared/1g0drakv.js +225 -0
- package/dist/shared/{kprcwaha.js → 1tfdfvhh.js} +5 -3
- package/dist/shared/{05w44d8g.js → 2ssqrv66.js} +767 -715
- package/dist/shared/3ekj9x92.js +210 -0
- package/dist/shared/49ypnfwt.js +1122 -0
- package/dist/shared/4e4c6vq2.js +62 -0
- package/dist/shared/4m9fn52z.js +70 -0
- package/dist/shared/{ycwz42az.js → 52szzakm.js} +6 -26
- package/dist/shared/5nmdenb6.js +1229 -0
- package/dist/shared/672t5vym.js +12 -0
- package/dist/shared/6bazvqwm.js +86 -0
- package/dist/shared/6w5j844a.js +201 -0
- package/dist/shared/{fgqgsb5z.js → 75xkjv0t.js} +2 -2
- package/dist/shared/7fvtrkwr.js +84 -0
- package/dist/shared/7m88x3e9.js +45 -0
- package/dist/shared/{mtkwv8wx.js → 7p2wbz7f.js} +1 -1
- package/dist/shared/83eaefwr.js +10 -0
- package/dist/shared/94ez8kzh.js +19 -0
- package/dist/shared/96ps4g1z.js +32 -0
- package/dist/shared/{xqbhg6cn.js → 999ade2q.js} +95 -10
- package/dist/shared/9m80mkac.js +158 -0
- package/dist/shared/9x25fxhc.js +150 -0
- package/dist/shared/a5sxz52y.js +13 -0
- package/dist/shared/axhk06q1.js +156 -0
- package/dist/shared/{dynq16vb.js → b066g80h.js} +8 -6
- package/dist/shared/bqha5cg6.js +229 -0
- package/dist/shared/bryqk9k9.js +31 -0
- package/dist/shared/c8aghh05.js +442 -0
- package/dist/shared/c9z5g0fm.js +309 -0
- package/dist/shared/{m3ypagh5.js → dbjej1tw.js} +124 -15
- package/dist/shared/dyj86cmj.js +69 -0
- package/dist/shared/e6wg00wd.js +164 -0
- package/dist/shared/{hadrfb9h.js → edwqqryd.js} +17 -14
- package/dist/shared/{qk3hxfja.js → fptpmvxp.js} +5 -5
- package/dist/shared/fs0ex00p.js +76 -0
- package/dist/shared/{jjb7yht9.js → g4f5kcx9.js} +3 -3
- package/dist/shared/gjthds9j.js +48 -0
- package/dist/shared/hcmdtwgh.js +102 -0
- package/dist/shared/{g5fhqmwe.js → jkc6ws1p.js} +6 -56
- package/dist/shared/{yd1kzwn2.js → jns2wx4t.js} +55 -12
- package/dist/shared/k34e0xf2.js +450 -0
- package/dist/shared/k3ted12y.js +33 -0
- package/dist/shared/k7dwkhvq.js +31 -0
- package/dist/shared/{8b04d28c.js → kgnc8grt.js} +2 -2
- package/dist/shared/{hd293j9g.js → kyxb62mc.js} +14 -2
- package/dist/shared/m78s7898.js +376 -0
- package/dist/shared/m9tv7xn7.js +404 -0
- package/dist/shared/meck53jv.js +99 -0
- package/dist/shared/mt5wswjz.js +90 -0
- package/dist/shared/n0dgs0pb.js +75 -0
- package/dist/shared/n442h54c.js +14 -0
- package/dist/shared/n4jqhpqz.js +27 -0
- package/dist/shared/n7mcc1gk.js +132 -0
- package/dist/shared/ne02ng5c.js +68 -0
- package/dist/shared/{mkjmqjv4.js → nfzc5z0w.js} +2 -104
- package/dist/shared/nsva2a6b.js +42 -0
- package/dist/shared/p24x2334.js +195 -0
- package/dist/shared/qbxzvwwc.js +88 -0
- package/dist/shared/{w8samvk1.js → qybh48nd.js} +1 -1
- package/dist/shared/r6nwkxnt.js +86 -0
- package/dist/shared/{xy79j5hq.js → rrstp3kb.js} +25 -36
- package/dist/shared/rwmrejjz.js +26 -0
- package/dist/shared/{zhc5vmgf.js → s6gqfn5j.js} +2 -2
- package/dist/shared/{523ft3e8.js → scwxrpx2.js} +7 -5
- package/dist/shared/{j5cn2963.js → t4tbsy9h.js} +13 -64
- package/dist/shared/{y9m15dfv.js → t616ynfn.js} +544 -32
- package/dist/shared/{ngk8gj61.js → tbszx8mz.js} +15 -1
- package/dist/shared/th14ygv2.js +69 -0
- package/dist/shared/tmbdywx0.js +178 -0
- package/dist/shared/ty3v3hfk.js +64 -0
- package/dist/shared/wekze34d.js +246 -0
- package/dist/shared/x6wysh83.js +1132 -0
- package/dist/shared/{rgs0st28.js → xrfnq5k8.js} +237 -434
- package/dist/shared/{x5x59srr.js → xva8v7qk.js} +416 -83
- package/dist/shared/{dkn3y60a.js → xw1d69vd.js} +76 -112
- package/dist/shared/y005b761.js +112 -0
- package/dist/shared/ydaz1sv3.js +55 -0
- package/dist/shared/{p0cbr3g2.js → zwmqxb0g.js} +1 -1
- package/dist/tooling/cli.js +40 -12
- package/dist/tooling/migrate/apply.d.ts +16 -0
- package/dist/tooling/migrate/commands.d.ts +12 -1
- package/dist/tooling/migrate/config.d.ts +8 -0
- package/dist/tooling/migrate/doctor.d.ts +25 -0
- package/dist/tooling/migrate/drift.d.ts +19 -0
- package/dist/tooling/migrate/engine.d.ts +36 -0
- package/dist/tooling/migrate/ext.d.ts +17 -0
- package/dist/tooling/migrate/extensions.d.ts +51 -0
- package/dist/tooling/migrate/managed.d.ts +17 -0
- package/dist/tooling/migrate/plan.d.ts +14 -1
- package/dist/tooling/migrate/project.d.ts +25 -1
- package/dist/tooling/migrate/type-name.d.ts +19 -0
- package/package.json +61 -4
- package/dist/shared/gk7cs7sp.js +0 -566
|
@@ -1,13 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
functionObject,
|
|
3
|
+
triggerObject
|
|
4
|
+
} from "./9x25fxhc.js";
|
|
5
|
+
import {
|
|
6
|
+
viewObject,
|
|
7
|
+
materializedViewObject,
|
|
8
|
+
materializedViewIndex
|
|
9
|
+
} from "./y005b761.js";
|
|
10
|
+
import {
|
|
11
|
+
extensionObject
|
|
12
|
+
} from "./th14ygv2.js";
|
|
1
13
|
import {
|
|
2
14
|
dependencyOrder,
|
|
3
|
-
catalog
|
|
4
|
-
|
|
5
|
-
|
|
15
|
+
catalog
|
|
16
|
+
} from "./jkc6ws1p.js";
|
|
17
|
+
import {
|
|
18
|
+
enumType,
|
|
19
|
+
domainType,
|
|
20
|
+
isDomain
|
|
21
|
+
} from "./qbxzvwwc.js";
|
|
6
22
|
import {
|
|
7
|
-
OWNERS2,
|
|
8
|
-
BUILT_KINDS2,
|
|
9
|
-
referentialAction,
|
|
10
|
-
CATALOG_VERSION2,
|
|
11
23
|
canonicalJson,
|
|
12
24
|
staticNamespace2,
|
|
13
25
|
templateNamespace2,
|
|
@@ -22,14 +34,23 @@ import {
|
|
|
22
34
|
index3,
|
|
23
35
|
constraint2,
|
|
24
36
|
sequence2,
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
normaliseEdges,
|
|
38
|
+
compareText,
|
|
39
|
+
assertProvenance
|
|
40
|
+
} from "./t4tbsy9h.js";
|
|
27
41
|
import {
|
|
28
|
-
|
|
29
|
-
|
|
42
|
+
OWNERS2,
|
|
43
|
+
BUILT_KINDS2,
|
|
44
|
+
referentialAction,
|
|
45
|
+
CATALOG_VERSION2
|
|
46
|
+
} from "./4e4c6vq2.js";
|
|
47
|
+
import {
|
|
48
|
+
sha2562,
|
|
49
|
+
assertIdentifier2
|
|
50
|
+
} from "./nfzc5z0w.js";
|
|
30
51
|
import {
|
|
31
52
|
catalogError2
|
|
32
|
-
} from "./
|
|
53
|
+
} from "./52szzakm.js";
|
|
33
54
|
|
|
34
55
|
// src/contracts/catalog/rewrite.ts
|
|
35
56
|
function replaceIdentifier(text, from, to) {
|
|
@@ -87,6 +108,60 @@ function isIdentPart(char) {
|
|
|
87
108
|
return isIdentStart(char) || char >= "0" && char <= "9";
|
|
88
109
|
}
|
|
89
110
|
|
|
111
|
+
// src/contracts/catalog/privilege.ts
|
|
112
|
+
function roleObject(input) {
|
|
113
|
+
assertIdentifier2(input.name, "role");
|
|
114
|
+
assertProvenance(input.provenance);
|
|
115
|
+
return {
|
|
116
|
+
kind: "role",
|
|
117
|
+
identity: { kind: "role", name: input.name },
|
|
118
|
+
owner: input.owner ?? "managed",
|
|
119
|
+
definition: {
|
|
120
|
+
login: input.login === true,
|
|
121
|
+
inherit: input.inherit !== false
|
|
122
|
+
},
|
|
123
|
+
dependencies: normaliseEdges(input.dependencies ?? []),
|
|
124
|
+
provenance: input.provenance
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
function grantObject(input) {
|
|
128
|
+
assertIdentifier2(input.role, "role");
|
|
129
|
+
assertProvenance(input.provenance);
|
|
130
|
+
return {
|
|
131
|
+
kind: "grant",
|
|
132
|
+
identity: {
|
|
133
|
+
kind: "grant",
|
|
134
|
+
role: input.role,
|
|
135
|
+
object: input.object,
|
|
136
|
+
privilege: input.privilege
|
|
137
|
+
},
|
|
138
|
+
owner: input.owner ?? "managed",
|
|
139
|
+
definition: {},
|
|
140
|
+
dependencies: normaliseEdges(input.dependencies ?? []),
|
|
141
|
+
provenance: input.provenance
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function defaultPrivilegeObject(input) {
|
|
145
|
+
assertIdentifier2(input.forRole, "role");
|
|
146
|
+
assertIdentifier2(input.grantee, "role");
|
|
147
|
+
assertProvenance(input.provenance);
|
|
148
|
+
return {
|
|
149
|
+
kind: "defaultPrivilege",
|
|
150
|
+
identity: {
|
|
151
|
+
kind: "defaultPrivilege",
|
|
152
|
+
forRole: input.forRole,
|
|
153
|
+
namespace: input.namespace,
|
|
154
|
+
objectKind: input.objectKind,
|
|
155
|
+
grantee: input.grantee,
|
|
156
|
+
privilege: input.privilege
|
|
157
|
+
},
|
|
158
|
+
owner: input.owner ?? "managed",
|
|
159
|
+
definition: {},
|
|
160
|
+
dependencies: normaliseEdges(input.dependencies ?? []),
|
|
161
|
+
provenance: input.provenance
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
90
165
|
// src/contracts/catalog/document.ts
|
|
91
166
|
function creationOrder2(source) {
|
|
92
167
|
return dependencyOrder(source.objects);
|
|
@@ -217,10 +292,60 @@ function rewriteRenamed(object, change, fromKey, toIdentity) {
|
|
|
217
292
|
return rewriteSequence(object, dependencies);
|
|
218
293
|
case "type":
|
|
219
294
|
return rewriteType(object, dependencies);
|
|
295
|
+
case "extension":
|
|
296
|
+
return retargeted(object, dependencies);
|
|
297
|
+
case "function": {
|
|
298
|
+
const local = object.dependencies.some((edge) => edge.target.kind === "column" && sameRef2(edge.target.parent, change.parent));
|
|
299
|
+
return functionObject({
|
|
300
|
+
namespace: object.identity.namespace,
|
|
301
|
+
name: object.identity.name,
|
|
302
|
+
arguments: object.definition.arguments,
|
|
303
|
+
returns: object.definition.returns,
|
|
304
|
+
language: object.definition.language,
|
|
305
|
+
volatility: object.definition.volatility,
|
|
306
|
+
security: object.definition.security,
|
|
307
|
+
body: rewriteExpr(object.definition.body, change, local),
|
|
308
|
+
owner: object.owner,
|
|
309
|
+
provenance: object.provenance,
|
|
310
|
+
dependencies,
|
|
311
|
+
...object.definition.searchPath !== undefined ? { searchPath: object.definition.searchPath } : {},
|
|
312
|
+
...object.definition.atomic === true ? { atomic: true } : {}
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
case "view":
|
|
316
|
+
case "materializedView": {
|
|
317
|
+
const local = object.dependencies.some((edge) => edge.target.kind === "column" && sameRef2(edge.target.parent, change.parent));
|
|
318
|
+
return rewriteView(object, dependencies, rewriteExpr(object.definition.query, change, local));
|
|
319
|
+
}
|
|
320
|
+
case "role":
|
|
321
|
+
case "grant":
|
|
322
|
+
case "defaultPrivilege":
|
|
323
|
+
return retargeted(object, dependencies);
|
|
324
|
+
case "trigger": {
|
|
325
|
+
const local = sameRef2(object.identity.parent, change.parent);
|
|
326
|
+
return triggerObject({
|
|
327
|
+
parent: object.identity.parent,
|
|
328
|
+
name: object.identity.name,
|
|
329
|
+
timing: object.definition.timing,
|
|
330
|
+
events: object.definition.events,
|
|
331
|
+
level: object.definition.level,
|
|
332
|
+
calls: object.definition.calls,
|
|
333
|
+
owner: object.owner,
|
|
334
|
+
provenance: object.provenance,
|
|
335
|
+
dependencies,
|
|
336
|
+
...object.definition.updateOf !== undefined ? {
|
|
337
|
+
updateOf: local ? renameList(object.definition.updateOf, change.from, change.to) : object.definition.updateOf
|
|
338
|
+
} : {},
|
|
339
|
+
...object.definition.when !== undefined ? { when: rewriteExpr(object.definition.when, change, local) } : {}
|
|
340
|
+
});
|
|
341
|
+
}
|
|
220
342
|
default:
|
|
221
343
|
return assertNever(object);
|
|
222
344
|
}
|
|
223
345
|
}
|
|
346
|
+
function retargeted(object, dependencies) {
|
|
347
|
+
return { ...object, dependencies: dependencies.map((target) => ({ target })) };
|
|
348
|
+
}
|
|
224
349
|
function rewriteTable(object, change, dependencies) {
|
|
225
350
|
const partition = object.definition.partition;
|
|
226
351
|
const renamed = partition !== undefined && object.identity.name === change.parent.name && sameNamespace2(object.identity.namespace, change.parent.namespace);
|
|
@@ -251,6 +376,7 @@ function rewriteColumn(object, change, dependencies) {
|
|
|
251
376
|
provenance: object.provenance,
|
|
252
377
|
dependencies,
|
|
253
378
|
...definition.defaultExpression !== undefined ? { defaultExpression: rewriteExpr(definition.defaultExpression, change, local) } : {},
|
|
379
|
+
...definition.collation !== undefined ? { collation: definition.collation } : {},
|
|
254
380
|
...definition.identity !== undefined ? { identity: definition.identity } : {},
|
|
255
381
|
...definition.generated !== undefined ? {
|
|
256
382
|
generated: {
|
|
@@ -263,17 +389,39 @@ function rewriteColumn(object, change, dependencies) {
|
|
|
263
389
|
function rewriteIndex(object, change, dependencies) {
|
|
264
390
|
const local = sameRef2(object.identity.parent, change.parent);
|
|
265
391
|
const definition = object.definition;
|
|
392
|
+
return indexAgain(object, object.identity.parent, dependencies, {
|
|
393
|
+
columns: local ? renameList(definition.columns, change.from, change.to) : [...definition.columns],
|
|
394
|
+
...definition.predicate !== undefined ? { predicate: rewriteExpr(definition.predicate, change, local) } : {},
|
|
395
|
+
...definition.expression !== undefined ? { expression: rewriteExpr(definition.expression, change, local) } : {}
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
function indexAgain(object, parent, dependencies, patch) {
|
|
399
|
+
const onView = dependencies.some((edge) => edge.kind === "view" || edge.kind === "materializedView");
|
|
400
|
+
if (onView) {
|
|
401
|
+
return materializedViewIndex({
|
|
402
|
+
parent,
|
|
403
|
+
name: object.identity.name,
|
|
404
|
+
nameKey: object.definition.nameKey,
|
|
405
|
+
columns: patch.columns,
|
|
406
|
+
unique: object.definition.unique,
|
|
407
|
+
owner: object.owner,
|
|
408
|
+
provenance: object.provenance,
|
|
409
|
+
dependencies,
|
|
410
|
+
...patch.predicate !== undefined ? { predicate: patch.predicate } : {},
|
|
411
|
+
...patch.expression !== undefined ? { expression: patch.expression } : {}
|
|
412
|
+
});
|
|
413
|
+
}
|
|
266
414
|
return index3({
|
|
267
|
-
parent
|
|
415
|
+
parent,
|
|
268
416
|
name: object.identity.name,
|
|
269
|
-
nameKey: definition.nameKey,
|
|
270
|
-
columns:
|
|
271
|
-
unique: definition.unique,
|
|
417
|
+
nameKey: object.definition.nameKey,
|
|
418
|
+
columns: patch.columns,
|
|
419
|
+
unique: object.definition.unique,
|
|
272
420
|
owner: object.owner,
|
|
273
421
|
provenance: object.provenance,
|
|
274
422
|
dependencies,
|
|
275
|
-
...
|
|
276
|
-
...
|
|
423
|
+
...patch.predicate !== undefined ? { predicate: patch.predicate } : {},
|
|
424
|
+
...patch.expression !== undefined ? { expression: patch.expression } : {}
|
|
277
425
|
});
|
|
278
426
|
}
|
|
279
427
|
function rewriteConstraint(object, change, dependencies) {
|
|
@@ -302,6 +450,24 @@ function rewriteConstraint(object, change, dependencies) {
|
|
|
302
450
|
...referenced !== undefined ? { references: referenced } : {}
|
|
303
451
|
});
|
|
304
452
|
}
|
|
453
|
+
function rewriteView(object, dependencies, query) {
|
|
454
|
+
const input = {
|
|
455
|
+
namespace: object.identity.namespace,
|
|
456
|
+
name: object.identity.name,
|
|
457
|
+
columns: object.definition.columns,
|
|
458
|
+
query,
|
|
459
|
+
owner: object.owner,
|
|
460
|
+
provenance: object.provenance,
|
|
461
|
+
dependencies
|
|
462
|
+
};
|
|
463
|
+
if (object.kind === "materializedView") {
|
|
464
|
+
return materializedViewObject({
|
|
465
|
+
...input,
|
|
466
|
+
...object.definition.refresh !== undefined ? { refresh: object.definition.refresh } : {}
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
return viewObject(input);
|
|
470
|
+
}
|
|
305
471
|
function rewriteExpr(text, change, active) {
|
|
306
472
|
if (!active)
|
|
307
473
|
return text;
|
|
@@ -335,20 +501,14 @@ function rewriteTableName(object, change, fromKey, toIdentity) {
|
|
|
335
501
|
...object.definition.defaultExpression !== undefined ? {
|
|
336
502
|
defaultExpression: rewriteExpr(object.definition.defaultExpression, { from: change.from, to: change.to }, local)
|
|
337
503
|
} : {},
|
|
504
|
+
...object.definition.collation !== undefined ? { collation: object.definition.collation } : {},
|
|
338
505
|
...object.definition.identity !== undefined ? { identity: object.definition.identity } : {},
|
|
339
506
|
...object.definition.generated !== undefined ? { generated: object.definition.generated } : {}
|
|
340
507
|
});
|
|
341
508
|
}
|
|
342
509
|
if (object.kind === "index") {
|
|
343
|
-
return
|
|
344
|
-
parent,
|
|
345
|
-
name: object.identity.name,
|
|
346
|
-
nameKey: object.definition.nameKey,
|
|
510
|
+
return indexAgain(object, parent, dependencies, {
|
|
347
511
|
columns: [...object.definition.columns],
|
|
348
|
-
unique: object.definition.unique,
|
|
349
|
-
owner: object.owner,
|
|
350
|
-
provenance: object.provenance,
|
|
351
|
-
dependencies,
|
|
352
512
|
...object.definition.predicate !== undefined ? {
|
|
353
513
|
predicate: rewriteExpr(object.definition.predicate, { from: change.from, to: change.to }, local)
|
|
354
514
|
} : {},
|
|
@@ -386,6 +546,59 @@ function rewriteTableName(object, change, fromKey, toIdentity) {
|
|
|
386
546
|
return rewriteSequence(object, dependencies);
|
|
387
547
|
if (object.kind === "type")
|
|
388
548
|
return rewriteType(object, dependencies);
|
|
549
|
+
if (object.kind === "extension") {
|
|
550
|
+
return { ...object, dependencies: dependencies.map((target) => ({ target })) };
|
|
551
|
+
}
|
|
552
|
+
if (object.kind === "function") {
|
|
553
|
+
const local = object.dependencies.some((edge) => edge.target.kind === "table" && edge.target.name === change.from && sameNamespace2(edge.target.namespace, change.namespace));
|
|
554
|
+
return functionObject({
|
|
555
|
+
namespace: object.identity.namespace,
|
|
556
|
+
name: object.identity.name,
|
|
557
|
+
arguments: object.definition.arguments,
|
|
558
|
+
returns: object.definition.returns,
|
|
559
|
+
language: object.definition.language,
|
|
560
|
+
volatility: object.definition.volatility,
|
|
561
|
+
security: object.definition.security,
|
|
562
|
+
body: rewriteExpr(object.definition.body, { from: change.from, to: change.to }, local),
|
|
563
|
+
owner: object.owner,
|
|
564
|
+
provenance: object.provenance,
|
|
565
|
+
dependencies,
|
|
566
|
+
...object.definition.searchPath !== undefined ? { searchPath: object.definition.searchPath } : {},
|
|
567
|
+
...object.definition.atomic === true ? { atomic: true } : {}
|
|
568
|
+
});
|
|
569
|
+
}
|
|
570
|
+
if (object.kind === "view" || object.kind === "materializedView") {
|
|
571
|
+
const local = object.dependencies.some((edge) => {
|
|
572
|
+
if (edge.target.kind === "table") {
|
|
573
|
+
return edge.target.name === change.from && sameNamespace2(edge.target.namespace, change.namespace);
|
|
574
|
+
}
|
|
575
|
+
if (edge.target.kind === "column") {
|
|
576
|
+
return edge.target.parent.name === change.from && sameNamespace2(edge.target.parent.namespace, change.namespace);
|
|
577
|
+
}
|
|
578
|
+
return false;
|
|
579
|
+
});
|
|
580
|
+
return rewriteView(object, dependencies, rewriteExpr(object.definition.query, { from: change.from, to: change.to }, local));
|
|
581
|
+
}
|
|
582
|
+
if (object.kind === "role" || object.kind === "grant" || object.kind === "defaultPrivilege") {
|
|
583
|
+
return retargeted(object, dependencies);
|
|
584
|
+
}
|
|
585
|
+
if (object.kind === "trigger") {
|
|
586
|
+
const parent = movedParent(object.identity.parent, change);
|
|
587
|
+
const local = parent.name !== object.identity.parent.name;
|
|
588
|
+
return triggerObject({
|
|
589
|
+
parent,
|
|
590
|
+
name: object.identity.name,
|
|
591
|
+
timing: object.definition.timing,
|
|
592
|
+
events: object.definition.events,
|
|
593
|
+
level: object.definition.level,
|
|
594
|
+
calls: object.definition.calls,
|
|
595
|
+
owner: object.owner,
|
|
596
|
+
provenance: object.provenance,
|
|
597
|
+
dependencies,
|
|
598
|
+
...object.definition.updateOf !== undefined ? { updateOf: object.definition.updateOf } : {},
|
|
599
|
+
...object.definition.when !== undefined ? { when: rewriteExpr(object.definition.when, { from: change.from, to: change.to }, local) } : {}
|
|
600
|
+
});
|
|
601
|
+
}
|
|
389
602
|
return assertNever(object);
|
|
390
603
|
}
|
|
391
604
|
function movedParent(parent, change) {
|
|
@@ -395,6 +608,17 @@ function movedParent(parent, change) {
|
|
|
395
608
|
return parent;
|
|
396
609
|
}
|
|
397
610
|
function rewriteType(object, dependencies) {
|
|
611
|
+
if (isDomain(object.definition)) {
|
|
612
|
+
return domainType({
|
|
613
|
+
namespace: object.identity.namespace,
|
|
614
|
+
name: object.identity.name,
|
|
615
|
+
base: object.definition.base,
|
|
616
|
+
check: object.definition.check,
|
|
617
|
+
owner: object.owner,
|
|
618
|
+
provenance: object.provenance,
|
|
619
|
+
dependencies
|
|
620
|
+
});
|
|
621
|
+
}
|
|
398
622
|
return enumType({
|
|
399
623
|
namespace: object.identity.namespace,
|
|
400
624
|
name: object.identity.name,
|
|
@@ -457,6 +681,7 @@ function definitionToJson(object) {
|
|
|
457
681
|
dataType: definition.dataType,
|
|
458
682
|
nullable: definition.nullable,
|
|
459
683
|
...definition.defaultExpression !== undefined ? { defaultExpression: definition.defaultExpression } : {},
|
|
684
|
+
...definition.collation !== undefined ? { collation: definition.collation } : {},
|
|
460
685
|
...definition.identity !== undefined ? { identity: { always: definition.identity.always } } : {},
|
|
461
686
|
...definition.generated !== undefined ? {
|
|
462
687
|
generated: {
|
|
@@ -508,7 +733,68 @@ function definitionToJson(object) {
|
|
|
508
733
|
start: object.definition.start
|
|
509
734
|
};
|
|
510
735
|
case "type":
|
|
511
|
-
return { labels: object.definition.labels };
|
|
736
|
+
return isDomain(object.definition) ? { base: object.definition.base, check: object.definition.check } : { labels: object.definition.labels };
|
|
737
|
+
case "extension": {
|
|
738
|
+
const definition = object.definition;
|
|
739
|
+
return {
|
|
740
|
+
relocatable: definition.relocatable,
|
|
741
|
+
schema: definition.schema,
|
|
742
|
+
...definition.version !== undefined ? { version: definition.version } : {}
|
|
743
|
+
};
|
|
744
|
+
}
|
|
745
|
+
case "function": {
|
|
746
|
+
const definition = object.definition;
|
|
747
|
+
return {
|
|
748
|
+
arguments: definition.arguments.map((argument) => ({
|
|
749
|
+
name: argument.name,
|
|
750
|
+
type: argument.type
|
|
751
|
+
})),
|
|
752
|
+
body: definition.body,
|
|
753
|
+
language: definition.language,
|
|
754
|
+
returns: definition.returns,
|
|
755
|
+
security: definition.security,
|
|
756
|
+
volatility: definition.volatility,
|
|
757
|
+
...definition.atomic === true ? { atomic: true } : {},
|
|
758
|
+
...definition.searchPath !== undefined ? { searchPath: definition.searchPath } : {}
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
case "trigger": {
|
|
762
|
+
const definition = object.definition;
|
|
763
|
+
return {
|
|
764
|
+
calls: {
|
|
765
|
+
argTypes: [...definition.calls.argTypes],
|
|
766
|
+
name: definition.calls.name,
|
|
767
|
+
namespace: namespaceToJson(definition.calls.namespace)
|
|
768
|
+
},
|
|
769
|
+
events: [...definition.events],
|
|
770
|
+
level: definition.level,
|
|
771
|
+
timing: definition.timing,
|
|
772
|
+
...definition.updateOf !== undefined ? { updateOf: [...definition.updateOf] } : {},
|
|
773
|
+
...definition.when !== undefined ? { when: definition.when } : {}
|
|
774
|
+
};
|
|
775
|
+
}
|
|
776
|
+
case "view":
|
|
777
|
+
return {
|
|
778
|
+
columns: object.definition.columns.map((column) => ({
|
|
779
|
+
dataType: column.dataType,
|
|
780
|
+
name: column.name
|
|
781
|
+
})),
|
|
782
|
+
query: object.definition.query
|
|
783
|
+
};
|
|
784
|
+
case "materializedView":
|
|
785
|
+
return {
|
|
786
|
+
columns: object.definition.columns.map((column) => ({
|
|
787
|
+
dataType: column.dataType,
|
|
788
|
+
name: column.name
|
|
789
|
+
})),
|
|
790
|
+
query: object.definition.query,
|
|
791
|
+
...object.definition.refresh !== undefined ? { refresh: object.definition.refresh } : {}
|
|
792
|
+
};
|
|
793
|
+
case "role":
|
|
794
|
+
return { inherit: object.definition.inherit, login: object.definition.login };
|
|
795
|
+
case "grant":
|
|
796
|
+
case "defaultPrivilege":
|
|
797
|
+
return {};
|
|
512
798
|
default:
|
|
513
799
|
return assertNever(object);
|
|
514
800
|
}
|
|
@@ -541,6 +827,21 @@ function parseObject(value) {
|
|
|
541
827
|
return parseSequence(identity, definition, owner, provenance, dependencies);
|
|
542
828
|
case "type":
|
|
543
829
|
return parseType(identity, definition, owner, provenance, dependencies);
|
|
830
|
+
case "extension":
|
|
831
|
+
return parseExtension(identity, definition, owner, provenance, dependencies);
|
|
832
|
+
case "function":
|
|
833
|
+
return parseFunction(identity, definition, owner, provenance, dependencies);
|
|
834
|
+
case "trigger":
|
|
835
|
+
return parseTrigger(identity, definition, owner, provenance, dependencies);
|
|
836
|
+
case "view":
|
|
837
|
+
case "materializedView":
|
|
838
|
+
return parseView(kind, identity, definition, owner, provenance, dependencies);
|
|
839
|
+
case "role":
|
|
840
|
+
return parseRole(identity, definition, owner, provenance, dependencies);
|
|
841
|
+
case "grant":
|
|
842
|
+
return parseGrant(identity, definition, owner, provenance, dependencies);
|
|
843
|
+
case "defaultPrivilege":
|
|
844
|
+
return parseDefaultPrivilege(identity, definition, owner, provenance, dependencies);
|
|
544
845
|
default:
|
|
545
846
|
return assertNeverKind(kind);
|
|
546
847
|
}
|
|
@@ -564,7 +865,7 @@ function parseColumn(identity, definition, owner, provenance, dependencies) {
|
|
|
564
865
|
if (identity.kind !== "column") {
|
|
565
866
|
catalogError2("OKM1020", `Column object identity is ${identity.kind}, not a column.`);
|
|
566
867
|
}
|
|
567
|
-
rejectUnknown(definition, ["dataType", "defaultExpression", "generated", "identity", "nullable"], "column definition");
|
|
868
|
+
rejectUnknown(definition, ["collation", "dataType", "defaultExpression", "generated", "identity", "nullable"], "column definition");
|
|
568
869
|
const generated = definition.generated;
|
|
569
870
|
const columnIdentity = definition.identity;
|
|
570
871
|
return column2({
|
|
@@ -576,6 +877,7 @@ function parseColumn(identity, definition, owner, provenance, dependencies) {
|
|
|
576
877
|
provenance,
|
|
577
878
|
dependencies,
|
|
578
879
|
...definition.defaultExpression === undefined ? {} : { defaultExpression: requireString(definition.defaultExpression, "default") },
|
|
880
|
+
...definition.collation === undefined ? {} : { collation: requireString(definition.collation, "collation") },
|
|
579
881
|
...columnIdentity === undefined ? {} : { identity: parseAlways(columnIdentity) },
|
|
580
882
|
...generated === undefined ? {} : { generated: parseGenerated(generated) }
|
|
581
883
|
});
|
|
@@ -662,6 +964,18 @@ function parseType(identity, definition, owner, provenance, dependencies) {
|
|
|
662
964
|
if (identity.kind !== "type") {
|
|
663
965
|
catalogError2("OKM1020", `Type object identity is ${identity.kind}, not a type.`);
|
|
664
966
|
}
|
|
967
|
+
if ("base" in definition || "check" in definition) {
|
|
968
|
+
rejectUnknown(definition, ["base", "check"], "type definition");
|
|
969
|
+
return domainType({
|
|
970
|
+
namespace: identity.namespace,
|
|
971
|
+
name: identity.name,
|
|
972
|
+
base: requireString(definition.base, "domain base"),
|
|
973
|
+
check: requireString(definition.check, "domain check"),
|
|
974
|
+
owner,
|
|
975
|
+
provenance,
|
|
976
|
+
dependencies
|
|
977
|
+
});
|
|
978
|
+
}
|
|
665
979
|
rejectUnknown(definition, ["labels"], "type definition");
|
|
666
980
|
return enumType({
|
|
667
981
|
namespace: identity.namespace,
|
|
@@ -672,6 +986,160 @@ function parseType(identity, definition, owner, provenance, dependencies) {
|
|
|
672
986
|
dependencies
|
|
673
987
|
});
|
|
674
988
|
}
|
|
989
|
+
function parseFunction(identity, definition, owner, provenance, dependencies) {
|
|
990
|
+
if (identity.kind !== "function") {
|
|
991
|
+
catalogError2("OKM1020", `Function object identity is ${identity.kind}, not a function.`);
|
|
992
|
+
}
|
|
993
|
+
rejectUnknown(definition, ["arguments", "atomic", "body", "language", "returns", "searchPath", "security", "volatility"], "function definition");
|
|
994
|
+
const language = requireString(definition.language, "function language");
|
|
995
|
+
if (language !== "sql" && language !== "plpgsql") {
|
|
996
|
+
catalogError2("OKM1020", `Function ${identity.name} language must be sql or plpgsql.`);
|
|
997
|
+
}
|
|
998
|
+
const volatility = parseVolatility(definition.volatility);
|
|
999
|
+
const security = parseSecurity(definition.security);
|
|
1000
|
+
return functionObject({
|
|
1001
|
+
namespace: identity.namespace,
|
|
1002
|
+
name: identity.name,
|
|
1003
|
+
arguments: parseArguments(definition.arguments),
|
|
1004
|
+
returns: requireString(definition.returns, "function returns"),
|
|
1005
|
+
language,
|
|
1006
|
+
body: requireString(definition.body, "function body"),
|
|
1007
|
+
owner,
|
|
1008
|
+
provenance,
|
|
1009
|
+
dependencies,
|
|
1010
|
+
...volatility !== undefined ? { volatility } : {},
|
|
1011
|
+
...security !== undefined ? { security } : {},
|
|
1012
|
+
...definition.atomic === true ? { atomic: true } : {},
|
|
1013
|
+
...definition.searchPath !== undefined ? { searchPath: requireString(definition.searchPath, "search path") } : {}
|
|
1014
|
+
});
|
|
1015
|
+
}
|
|
1016
|
+
function parseArguments(value) {
|
|
1017
|
+
if (value === undefined)
|
|
1018
|
+
return [];
|
|
1019
|
+
if (!Array.isArray(value))
|
|
1020
|
+
catalogError2("OKM1020", "Function arguments must be an array.");
|
|
1021
|
+
return value.map((item) => {
|
|
1022
|
+
const record = requireRecord(item, "function argument");
|
|
1023
|
+
rejectUnknown(record, ["name", "type"], "function argument");
|
|
1024
|
+
return {
|
|
1025
|
+
name: requireString(record.name, "argument name"),
|
|
1026
|
+
type: requireString(record.type, "argument type")
|
|
1027
|
+
};
|
|
1028
|
+
});
|
|
1029
|
+
}
|
|
1030
|
+
function parseVolatility(value) {
|
|
1031
|
+
if (value === undefined)
|
|
1032
|
+
return;
|
|
1033
|
+
const text = requireString(value, "volatility");
|
|
1034
|
+
if (text !== "volatile" && text !== "stable" && text !== "immutable") {
|
|
1035
|
+
catalogError2("OKM1020", `Volatility ${text} is not supported.`);
|
|
1036
|
+
}
|
|
1037
|
+
return text;
|
|
1038
|
+
}
|
|
1039
|
+
function parseSecurity(value) {
|
|
1040
|
+
if (value === undefined)
|
|
1041
|
+
return;
|
|
1042
|
+
const text = requireString(value, "security");
|
|
1043
|
+
if (text !== "invoker" && text !== "definer") {
|
|
1044
|
+
catalogError2("OKM1020", `Security ${text} is not supported.`);
|
|
1045
|
+
}
|
|
1046
|
+
return text;
|
|
1047
|
+
}
|
|
1048
|
+
function parseTrigger(identity, definition, owner, provenance, dependencies) {
|
|
1049
|
+
if (identity.kind !== "trigger") {
|
|
1050
|
+
catalogError2("OKM1020", `Trigger object identity is ${identity.kind}, not a trigger.`);
|
|
1051
|
+
}
|
|
1052
|
+
rejectUnknown(definition, ["calls", "events", "level", "timing", "updateOf", "when"], "trigger definition");
|
|
1053
|
+
const timing = requireString(definition.timing, "trigger timing");
|
|
1054
|
+
if (timing !== "before" && timing !== "after" && timing !== "instead") {
|
|
1055
|
+
catalogError2("OKM1020", `Trigger timing ${timing} is not supported.`);
|
|
1056
|
+
}
|
|
1057
|
+
const level = requireString(definition.level, "trigger level");
|
|
1058
|
+
if (level !== "row" && level !== "statement") {
|
|
1059
|
+
catalogError2("OKM1020", `Trigger level ${level} is not supported.`);
|
|
1060
|
+
}
|
|
1061
|
+
const calls = requireRecord(definition.calls, "trigger call");
|
|
1062
|
+
rejectUnknown(calls, ["argTypes", "name", "namespace"], "trigger call");
|
|
1063
|
+
return triggerObject({
|
|
1064
|
+
parent: identity.parent,
|
|
1065
|
+
name: identity.name,
|
|
1066
|
+
timing,
|
|
1067
|
+
events: requireStrings(definition.events, "trigger events").map(parseEvent),
|
|
1068
|
+
level,
|
|
1069
|
+
calls: {
|
|
1070
|
+
namespace: parseNamespace(calls.namespace),
|
|
1071
|
+
name: requireString(calls.name, "trigger function"),
|
|
1072
|
+
argTypes: requireStrings(calls.argTypes, "trigger argument types")
|
|
1073
|
+
},
|
|
1074
|
+
owner,
|
|
1075
|
+
provenance,
|
|
1076
|
+
dependencies,
|
|
1077
|
+
...definition.updateOf !== undefined ? { updateOf: requireStrings(definition.updateOf, "update of") } : {},
|
|
1078
|
+
...definition.when !== undefined ? { when: requireString(definition.when, "when") } : {}
|
|
1079
|
+
});
|
|
1080
|
+
}
|
|
1081
|
+
function parseView(kind, identity, definition, owner, provenance, dependencies) {
|
|
1082
|
+
if (identity.kind !== kind) {
|
|
1083
|
+
catalogError2("OKM1020", `View object identity is ${identity.kind}, not a ${kind}.`);
|
|
1084
|
+
}
|
|
1085
|
+
const fields = kind === "view" ? ["columns", "query"] : ["columns", "query", "refresh"];
|
|
1086
|
+
rejectUnknown(definition, fields, "view definition");
|
|
1087
|
+
const columns = parseViewColumns(definition.columns);
|
|
1088
|
+
const query = requireString(definition.query, "view query");
|
|
1089
|
+
const refresh = definition.refresh;
|
|
1090
|
+
if (refresh !== undefined && refresh !== "concurrently") {
|
|
1091
|
+
catalogError2("OKM1020", `Materialized view ${identity.name} refresh is not supported.`);
|
|
1092
|
+
}
|
|
1093
|
+
const input = {
|
|
1094
|
+
namespace: identity.namespace,
|
|
1095
|
+
name: identity.name,
|
|
1096
|
+
columns,
|
|
1097
|
+
query,
|
|
1098
|
+
owner,
|
|
1099
|
+
provenance,
|
|
1100
|
+
dependencies
|
|
1101
|
+
};
|
|
1102
|
+
if (kind === "materializedView") {
|
|
1103
|
+
return materializedViewObject({
|
|
1104
|
+
...input,
|
|
1105
|
+
...refresh === "concurrently" ? { refresh: "concurrently" } : {}
|
|
1106
|
+
});
|
|
1107
|
+
}
|
|
1108
|
+
return viewObject(input);
|
|
1109
|
+
}
|
|
1110
|
+
function parseViewColumns(value) {
|
|
1111
|
+
if (!Array.isArray(value))
|
|
1112
|
+
catalogError2("OKM1020", "View columns must be a list.");
|
|
1113
|
+
return value.map((item) => {
|
|
1114
|
+
const record = requireRecord(item, "view column");
|
|
1115
|
+
rejectUnknown(record, ["dataType", "name"], "view column");
|
|
1116
|
+
return {
|
|
1117
|
+
name: requireString(record.name, "view column"),
|
|
1118
|
+
dataType: requireString(record.dataType, "view column type")
|
|
1119
|
+
};
|
|
1120
|
+
});
|
|
1121
|
+
}
|
|
1122
|
+
function parseEvent(value) {
|
|
1123
|
+
if (value !== "insert" && value !== "update" && value !== "delete" && value !== "truncate") {
|
|
1124
|
+
catalogError2("OKM1020", `Trigger event ${value} is not supported.`);
|
|
1125
|
+
}
|
|
1126
|
+
return value;
|
|
1127
|
+
}
|
|
1128
|
+
function parseExtension(identity, definition, owner, provenance, dependencies) {
|
|
1129
|
+
if (identity.kind !== "extension") {
|
|
1130
|
+
catalogError2("OKM1020", `Extension object identity is ${identity.kind}, not an extension.`);
|
|
1131
|
+
}
|
|
1132
|
+
rejectUnknown(definition, ["relocatable", "schema", "version"], "extension definition");
|
|
1133
|
+
return extensionObject({
|
|
1134
|
+
name: identity.name,
|
|
1135
|
+
schema: requireString(definition.schema, "extension schema"),
|
|
1136
|
+
relocatable: requireBoolean(definition.relocatable, "relocatable"),
|
|
1137
|
+
...definition.version !== undefined ? { version: requireString(definition.version, "extension version") } : {},
|
|
1138
|
+
owner,
|
|
1139
|
+
provenance,
|
|
1140
|
+
dependencies
|
|
1141
|
+
});
|
|
1142
|
+
}
|
|
675
1143
|
function parseIdentity(value) {
|
|
676
1144
|
const record = requireRecord(value, "identity");
|
|
677
1145
|
const kind = requireString(record.kind, "identity kind");
|
|
@@ -757,8 +1225,8 @@ function parseGrantObject(value) {
|
|
|
757
1225
|
const record = requireRecord(value, "grant object");
|
|
758
1226
|
rejectUnknown(record, ["kind", "name", "namespace"], "grant object");
|
|
759
1227
|
const kind = requireString(record.kind, "grant object kind");
|
|
760
|
-
if (kind !== "table" && kind !== "sequence" && kind !== "namespace") {
|
|
761
|
-
catalogError2("OKM1020", `Grant object kind ${kind} must be table, sequence, or namespace.`);
|
|
1228
|
+
if (kind !== "table" && kind !== "view" && kind !== "materializedView" && kind !== "sequence" && kind !== "function" && kind !== "namespace") {
|
|
1229
|
+
catalogError2("OKM1020", `Grant object kind ${kind} must be table, view, materializedView, sequence, function, or namespace.`);
|
|
762
1230
|
}
|
|
763
1231
|
return {
|
|
764
1232
|
kind,
|
|
@@ -766,6 +1234,50 @@ function parseGrantObject(value) {
|
|
|
766
1234
|
namespace: parseNamespace(record.namespace)
|
|
767
1235
|
};
|
|
768
1236
|
}
|
|
1237
|
+
function parseRole(identity, definition, owner, provenance, dependencies) {
|
|
1238
|
+
if (identity.kind !== "role") {
|
|
1239
|
+
catalogError2("OKM1020", `Role object identity is ${identity.kind}, not a role.`);
|
|
1240
|
+
}
|
|
1241
|
+
rejectUnknown(definition, ["inherit", "login"], "role definition");
|
|
1242
|
+
return roleObject({
|
|
1243
|
+
name: identity.name,
|
|
1244
|
+
login: requireBoolean(definition.login, "login"),
|
|
1245
|
+
inherit: requireBoolean(definition.inherit, "inherit"),
|
|
1246
|
+
owner,
|
|
1247
|
+
provenance,
|
|
1248
|
+
dependencies
|
|
1249
|
+
});
|
|
1250
|
+
}
|
|
1251
|
+
function parseGrant(identity, definition, owner, provenance, dependencies) {
|
|
1252
|
+
if (identity.kind !== "grant") {
|
|
1253
|
+
catalogError2("OKM1020", `Grant object identity is ${identity.kind}, not a grant.`);
|
|
1254
|
+
}
|
|
1255
|
+
rejectUnknown(definition, [], "grant definition");
|
|
1256
|
+
return grantObject({
|
|
1257
|
+
role: identity.role,
|
|
1258
|
+
object: identity.object,
|
|
1259
|
+
privilege: identity.privilege,
|
|
1260
|
+
owner,
|
|
1261
|
+
provenance,
|
|
1262
|
+
dependencies
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
function parseDefaultPrivilege(identity, definition, owner, provenance, dependencies) {
|
|
1266
|
+
if (identity.kind !== "defaultPrivilege") {
|
|
1267
|
+
catalogError2("OKM1020", `Default privilege object identity is ${identity.kind}, not a default privilege.`);
|
|
1268
|
+
}
|
|
1269
|
+
rejectUnknown(definition, [], "default privilege definition");
|
|
1270
|
+
return defaultPrivilegeObject({
|
|
1271
|
+
forRole: identity.forRole,
|
|
1272
|
+
namespace: identity.namespace,
|
|
1273
|
+
objectKind: identity.objectKind,
|
|
1274
|
+
grantee: identity.grantee,
|
|
1275
|
+
privilege: identity.privilege,
|
|
1276
|
+
owner,
|
|
1277
|
+
provenance,
|
|
1278
|
+
dependencies
|
|
1279
|
+
});
|
|
1280
|
+
}
|
|
769
1281
|
function parsePartition(value) {
|
|
770
1282
|
const record = requireRecord(value, "partition");
|
|
771
1283
|
rejectUnknown(record, ["columns", "method"], "partition");
|
|
@@ -839,7 +1351,7 @@ function parseDependencies(value) {
|
|
|
839
1351
|
});
|
|
840
1352
|
}
|
|
841
1353
|
function isBuiltKind(kind) {
|
|
842
|
-
return BUILT_KINDS2.includes(kind);
|
|
1354
|
+
return kind === "extension" || kind === "function" || kind === "trigger" || kind === "view" || kind === "materializedView" || kind === "role" || kind === "grant" || kind === "defaultPrivilege" || BUILT_KINDS2.includes(kind);
|
|
843
1355
|
}
|
|
844
1356
|
function isOwner(value) {
|
|
845
1357
|
return OWNERS2.includes(value);
|
|
@@ -885,4 +1397,4 @@ function assertNeverKind(value) {
|
|
|
885
1397
|
return catalogError2("OKM1020", `Unexpected kind ${JSON.stringify(value)}.`);
|
|
886
1398
|
}
|
|
887
1399
|
|
|
888
|
-
export { creationOrder2, renameColumn2, renameTable2, serializeCatalog2, catalogHash2, loadTrustedCatalog2, parseCatalog2 };
|
|
1400
|
+
export { roleObject, grantObject, defaultPrivilegeObject, creationOrder2, renameColumn2, renameTable2, serializeCatalog2, catalogHash2, loadTrustedCatalog2, parseCatalog2 };
|