@_linked/core 2.18.0-next.20260908074910 → 2.18.0-next.20260908083500
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/CHANGELOG.md +48 -0
- package/lib/esm/interfaces/IDataset.d.ts +6 -0
- package/lib/esm/queries/IRMutation.d.ts +17 -1
- package/lib/esm/queries/IRMutation.js +35 -0
- package/lib/esm/queries/IRMutation.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +21 -1
- package/lib/esm/queries/MutationSerialization.d.ts +20 -1
- package/lib/esm/queries/MutationSerialization.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.d.ts +17 -3
- package/lib/esm/queries/UpdateBuilder.js +69 -5
- package/lib/esm/queries/UpdateBuilder.js.map +1 -1
- package/lib/esm/queries/UpdateQuery.d.ts +4 -4
- package/lib/esm/queries/fromJSON.js +2 -0
- package/lib/esm/queries/fromJSON.js.map +1 -1
- package/lib/esm/queries/lower.js +4 -2
- package/lib/esm/queries/lower.js.map +1 -1
- package/lib/esm/queries/lowerMutationJSON.js +13 -1
- package/lib/esm/queries/lowerMutationJSON.js.map +1 -1
- package/lib/esm/queries/mutationLowerSpec.d.ts +2 -0
- package/lib/esm/shapes/Shape.d.ts +43 -0
- package/lib/esm/shapes/Shape.js +37 -0
- package/lib/esm/shapes/Shape.js.map +1 -1
- package/lib/esm/sparql/SparqlDataset.js +4 -2
- package/lib/esm/sparql/SparqlDataset.js.map +1 -1
- package/lib/esm/sparql/index.d.ts +2 -2
- package/lib/esm/sparql/index.js +2 -2
- package/lib/esm/sparql/index.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.d.ts +13 -1
- package/lib/esm/sparql/irToAlgebra.js +37 -1
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/sparql/resultMapping.d.ts +6 -6
- package/lib/esm/sparql/resultMapping.js +18 -6
- package/lib/esm/sparql/resultMapping.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -134,6 +134,45 @@
|
|
|
134
134
|
SPARQL: `.exists()` is a shortcut for an ask query, which is its own query kind with its own
|
|
135
135
|
`IDataset.askQuery` method.
|
|
136
136
|
|
|
137
|
+
- [#212](https://github.com/linked-cm/core/pull/212) [`44936de`](https://github.com/linked-cm/core/commit/44936ded51a0f84a9d9369c452b407c7f2ae2bb5) Thanks [@flyon](https://github.com/flyon)! - `Shape.upsert()` — create-or-replace against a known id, in one request.
|
|
138
|
+
|
|
139
|
+
```ts
|
|
140
|
+
await SourceDocument.upsert({ filename, checksum }).for({ id });
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
It replaces the branch callers otherwise hand-roll:
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
if (await S.exists({ id })) await S.update(values).for({ id });
|
|
147
|
+
else await S.create({ id, ...values });
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
which costs two round-trips, races between them, and — if the existence check is wrong in the
|
|
151
|
+
`false` direction — silently takes `create`, where `INSERT DATA` duplicates single-valued
|
|
152
|
+
properties instead of erroring.
|
|
153
|
+
|
|
154
|
+
**Semantics**
|
|
155
|
+
|
|
156
|
+
- Replaces **only the properties named**; others on an existing node are untouched. It is not a
|
|
157
|
+
whole-node replace.
|
|
158
|
+
- Always asserts the node's type. `update().for({id})` does not — an update against an absent id
|
|
159
|
+
writes its properties onto an untyped node that shape-scoped selects cannot find. That single
|
|
160
|
+
triple is the entire difference between the two: `update`'s `WHERE` is a bare `OPTIONAL`, so it
|
|
161
|
+
already matches when the node is missing.
|
|
162
|
+
- Returns what `update` returns. It deliberately does not report whether it created or replaced —
|
|
163
|
+
knowing that needs the extra read the single round-trip exists to avoid.
|
|
164
|
+
- `.where()` and `.forAll()` throw: an upsert targets one known id.
|
|
165
|
+
- Expression-valued fields throw. An expression reads the node's current value, which does not
|
|
166
|
+
exist when upsert creates it, and SPARQL would silently drop the triple.
|
|
167
|
+
|
|
168
|
+
**Wire format** — a new `op: "upsert"` envelope (`mode` is always `"for"`), documented in
|
|
169
|
+
`documentation/dsl-json.md`. It is a distinct `op` rather than a new `mode` on `update` so that a
|
|
170
|
+
consumer which does not understand it fails loudly instead of falling through to an
|
|
171
|
+
update-every-instance.
|
|
172
|
+
|
|
173
|
+
**IR** — a new `IRUpsertMutation` kind, with `upsertToAlgebra` / `upsertToSparql` alongside the
|
|
174
|
+
update equivalents.
|
|
175
|
+
|
|
137
176
|
### Patch Changes
|
|
138
177
|
|
|
139
178
|
- [#207](https://github.com/linked-cm/core/pull/207) [`02a32e2`](https://github.com/linked-cm/core/commit/02a32e2bd3483e601b1761ea950e3771ff1c419b) Thanks [@flyon](https://github.com/flyon)! - Never emit a prefixed name whose local part is not a legal SPARQL `PN_LOCAL`.
|
|
@@ -149,6 +188,15 @@
|
|
|
149
188
|
`<full-iri>` when it does not fit. `collectPrefixes` asks `toPrefixed` rather than
|
|
150
189
|
re-implementing the rule, so the `PREFIX` block and the terms can never disagree.
|
|
151
190
|
|
|
191
|
+
- [#213](https://github.com/linked-cm/core/pull/213) [`46bc8de`](https://github.com/linked-cm/core/commit/46bc8def877ea741c62baa0e39bf49cec5855176) Thanks [@flyon](https://github.com/flyon)! - Read result bindings under the same sanitized variable name they were written with.
|
|
192
|
+
|
|
193
|
+
`algebraToString` sanitizes a projection into a legal SPARQL variable — only letters, digits
|
|
194
|
+
and underscore survive — while `resultMapping` derived the name it reads back without doing
|
|
195
|
+
the same. A property named by a person ("Volume share", "Avg. basket") was therefore emitted
|
|
196
|
+
as `?a0_Volume_share` and looked up as `a0_Volume share`, matching no binding: the value came
|
|
197
|
+
back `null` with no error, for every multi-word property, on every query. Single-word names
|
|
198
|
+
were unaffected, which made it look like missing data rather than a naming mismatch.
|
|
199
|
+
|
|
152
200
|
- [#189](https://github.com/linked-cm/core/pull/189) [`70a6d33`](https://github.com/linked-cm/core/commit/70a6d33e01f7eaab0e01cc7b59b2bc4c54118655) Thanks [@carlenmy](https://github.com/carlenmy)! - Register `PropertyShape.defaultValue` as a queryable property.
|
|
153
201
|
|
|
154
202
|
`sh:defaultValue` was read from config and emitted by `PropertyShape.getResult()`,
|
|
@@ -42,6 +42,12 @@ export interface IDataset {
|
|
|
42
42
|
* API was built to remove.
|
|
43
43
|
*/
|
|
44
44
|
askQuery(query: AskQuery): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Receives update AND upsert mutations — `lower(query)` yields `kind: 'update'`,
|
|
47
|
+
* `'update_where'` or `'upsert'`. An implementation that does not handle `'upsert'`
|
|
48
|
+
* should throw rather than fall through to the update path: an upsert lowered as a
|
|
49
|
+
* plain update writes an untyped node and reports success.
|
|
50
|
+
*/
|
|
45
51
|
updateQuery?(query: UpdateQuery): Promise<UpdateResult>;
|
|
46
52
|
createQuery?(query: CreateQuery): Promise<CreateResult>;
|
|
47
53
|
deleteQuery?(query: DeleteQuery): Promise<DeleteResponse>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { NodeShapeData } from '../shapes/SHACL.js';
|
|
2
2
|
import { type NodeDescriptionValue, NodeReferenceValue } from './QueryFactory.js';
|
|
3
|
-
import type { IRCreateMutation, IRDeleteMutation, IRDeleteAllMutation, IRDeleteWhereMutation, IRUpdateWhereMutation, IRUpdateMutation, IRExpression, IRGraphPattern, IRTraversalPattern } from './IntermediateRepresentation.js';
|
|
3
|
+
import type { IRCreateMutation, IRDeleteMutation, IRDeleteAllMutation, IRDeleteWhereMutation, IRUpdateWhereMutation, IRUpdateMutation, IRUpsertMutation, IRExpression, IRGraphPattern, IRTraversalPattern } from './IntermediateRepresentation.js';
|
|
4
4
|
type CreateMutationInput = {
|
|
5
5
|
shape: NodeShapeData;
|
|
6
6
|
description: NodeDescriptionValue;
|
|
@@ -10,6 +10,11 @@ type UpdateMutationInput = {
|
|
|
10
10
|
shape: NodeShapeData;
|
|
11
11
|
updates: NodeDescriptionValue;
|
|
12
12
|
};
|
|
13
|
+
type UpsertMutationInput = {
|
|
14
|
+
id: string;
|
|
15
|
+
shape: NodeShapeData;
|
|
16
|
+
updates: NodeDescriptionValue;
|
|
17
|
+
};
|
|
13
18
|
type DeleteMutationInput = {
|
|
14
19
|
shape: NodeShapeData;
|
|
15
20
|
ids: NodeReferenceValue[];
|
|
@@ -28,6 +33,17 @@ export declare function createTraversalCollector(): TraversalCollector;
|
|
|
28
33
|
export declare const buildCanonicalCreateMutationIR: (query: CreateMutationInput) => IRCreateMutation;
|
|
29
34
|
/** Builds an IRUpdateMutation from an update factory's internal description. */
|
|
30
35
|
export declare const buildCanonicalUpdateMutationIR: (query: UpdateMutationInput) => IRUpdateMutation;
|
|
36
|
+
/**
|
|
37
|
+
* Builds an IRUpsertMutation — an update that also asserts the node's type, so it is
|
|
38
|
+
* correct whether or not the node exists.
|
|
39
|
+
*
|
|
40
|
+
* Rejects expression-valued fields. An expression such as `age: p.age.plus(1)` lowers to
|
|
41
|
+
* a BIND over the node's current value; when the node does not exist that ref is unbound,
|
|
42
|
+
* and SPARQL drops any INSERT triple containing an unbound variable. The write would
|
|
43
|
+
* report success and store nothing for that property — precisely the silent-wrong-write
|
|
44
|
+
* this primitive exists to remove, so it is refused rather than documented.
|
|
45
|
+
*/
|
|
46
|
+
export declare const buildCanonicalUpsertMutationIR: (query: UpsertMutationInput) => IRUpsertMutation;
|
|
31
47
|
/** Builds an IRDeleteMutation from a delete factory's internal description. */
|
|
32
48
|
export declare const buildCanonicalDeleteMutationIR: (query: DeleteMutationInput) => IRDeleteMutation;
|
|
33
49
|
type DeleteAllMutationInput = {
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
import { isSetModificationValue, } from './QueryFactory.js';
|
|
2
2
|
import { isExpressionNode, resolveExpressionRefs } from '../expressions/ExpressionNode.js';
|
|
3
3
|
import { createTraversalResolver } from './IRLower.js';
|
|
4
|
+
/**
|
|
5
|
+
* Throws if any field of an upsert carries an expression. Named per offending property so
|
|
6
|
+
* the caller is not left decoding an unbound-variable mystery further down the pipeline.
|
|
7
|
+
*/
|
|
8
|
+
const assertNoExpressionFields = (updates, shapeId) => {
|
|
9
|
+
var _a;
|
|
10
|
+
for (const field of (_a = updates === null || updates === void 0 ? void 0 : updates.fields) !== null && _a !== void 0 ? _a : []) {
|
|
11
|
+
// Mirrors how `toSingleFieldValue` recognises an expression, so the guard cannot
|
|
12
|
+
// drift from the lowering it is protecting.
|
|
13
|
+
if (isExpressionNode(field.val)) {
|
|
14
|
+
throw new Error(`upsert does not support expression-valued fields (property "${field.prop.id}" of ${shapeId}). ` +
|
|
15
|
+
`An expression reads the node's current value, which does not exist when upsert creates it, ` +
|
|
16
|
+
`and the property would be silently skipped. Pass a concrete value, or use ` +
|
|
17
|
+
`update().for({id}) if the node is known to exist.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
4
21
|
const toNodeReference = (value) => ({
|
|
5
22
|
id: value.id,
|
|
6
23
|
});
|
|
@@ -85,6 +102,24 @@ export const buildCanonicalUpdateMutationIR = (query) => {
|
|
|
85
102
|
? { traversalPatterns: collector.patterns }
|
|
86
103
|
: {}));
|
|
87
104
|
};
|
|
105
|
+
/**
|
|
106
|
+
* Builds an IRUpsertMutation — an update that also asserts the node's type, so it is
|
|
107
|
+
* correct whether or not the node exists.
|
|
108
|
+
*
|
|
109
|
+
* Rejects expression-valued fields. An expression such as `age: p.age.plus(1)` lowers to
|
|
110
|
+
* a BIND over the node's current value; when the node does not exist that ref is unbound,
|
|
111
|
+
* and SPARQL drops any INSERT triple containing an unbound variable. The write would
|
|
112
|
+
* report success and store nothing for that property — precisely the silent-wrong-write
|
|
113
|
+
* this primitive exists to remove, so it is refused rather than documented.
|
|
114
|
+
*/
|
|
115
|
+
export const buildCanonicalUpsertMutationIR = (query) => {
|
|
116
|
+
assertNoExpressionFields(query.updates, query.shape.id);
|
|
117
|
+
const collector = createTraversalCollector();
|
|
118
|
+
const data = toNodeData(query.updates, collector);
|
|
119
|
+
return Object.assign({ kind: 'upsert', shape: query.shape.id, id: query.id, data }, (collector.patterns.length > 0
|
|
120
|
+
? { traversalPatterns: collector.patterns }
|
|
121
|
+
: {}));
|
|
122
|
+
};
|
|
88
123
|
/** Builds an IRDeleteMutation from a delete factory's internal description. */
|
|
89
124
|
export const buildCanonicalDeleteMutationIR = (query) => {
|
|
90
125
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IRMutation.js","sourceRoot":"","sources":["../../../src/queries/IRMutation.ts"],"names":[],"mappings":"AACA,OAAO,EAML,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"IRMutation.js","sourceRoot":"","sources":["../../../src/queries/IRMutation.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { PathExpr } from '../paths/PropertyPathExpr.js';
|
|
|
3
3
|
export type IRDirection = 'ASC' | 'DESC';
|
|
4
4
|
export type IRAlias = string;
|
|
5
5
|
export type IRValue = string | number | boolean | null;
|
|
6
|
-
export type IRQuery = IRSelectQuery | IRAskQuery | IRCreateMutation | IRUpdateMutation | IRDeleteMutation | IRDeleteAllMutation | IRDeleteWhereMutation | IRUpdateWhereMutation;
|
|
6
|
+
export type IRQuery = IRSelectQuery | IRAskQuery | IRCreateMutation | IRUpdateMutation | IRUpsertMutation | IRDeleteMutation | IRDeleteAllMutation | IRDeleteWhereMutation | IRUpdateWhereMutation;
|
|
7
7
|
export type IRSelectQuery = {
|
|
8
8
|
kind: 'select';
|
|
9
9
|
root: IRShapeScanPattern;
|
|
@@ -198,6 +198,26 @@ export type IRUpdateMutation = {
|
|
|
198
198
|
data: IRNodeData;
|
|
199
199
|
traversalPatterns?: IRTraversalPattern[];
|
|
200
200
|
};
|
|
201
|
+
/**
|
|
202
|
+
* Create-or-replace against a known id, in one request.
|
|
203
|
+
*
|
|
204
|
+
* Structurally identical to {@link IRUpdateMutation} — it lowers through the same
|
|
205
|
+
* DELETE/INSERT/WHERE body — and differs in exactly one emitted triple: upsert also
|
|
206
|
+
* asserts `?id rdf:type <targetClass>`, which the update path never writes.
|
|
207
|
+
*
|
|
208
|
+
* That single triple is the whole difference between the two, because `update`'s WHERE
|
|
209
|
+
* is a bare `OPTIONAL` and so already matches when the node is absent. It is a distinct
|
|
210
|
+
* IR kind rather than a flag on the update mutation so that a consumer which does not
|
|
211
|
+
* know about upsert fails loudly, instead of quietly writing an untyped node and
|
|
212
|
+
* reporting success.
|
|
213
|
+
*/
|
|
214
|
+
export type IRUpsertMutation = {
|
|
215
|
+
kind: 'upsert';
|
|
216
|
+
shape: string;
|
|
217
|
+
id: string;
|
|
218
|
+
data: IRNodeData;
|
|
219
|
+
traversalPatterns?: IRTraversalPattern[];
|
|
220
|
+
};
|
|
201
221
|
export type IRDeleteMutation = {
|
|
202
222
|
kind: 'delete';
|
|
203
223
|
shape: string;
|
|
@@ -65,6 +65,25 @@ export type UpdateMutationJSON = {
|
|
|
65
65
|
where?: WherePathJSON;
|
|
66
66
|
data: MutationNodeDataJSON;
|
|
67
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Create-or-replace against a known id.
|
|
70
|
+
*
|
|
71
|
+
* A distinct `op` rather than `op: 'update'` with a new `mode`. An unaware consumer that
|
|
72
|
+
* received `{op: 'update', mode: 'upsert'}` would fall past its `mode === 'for'` and
|
|
73
|
+
* `mode === 'where'` branches into the update-where path with no where clause — an update
|
|
74
|
+
* applied to *every instance of the shape*. A distinct op instead hits `fromJSON`'s
|
|
75
|
+
* existing `default:` and throws "Unknown query op": loud, and safe.
|
|
76
|
+
*/
|
|
77
|
+
export type UpsertMutationJSON = {
|
|
78
|
+
v?: string;
|
|
79
|
+
op: 'upsert';
|
|
80
|
+
shape: string;
|
|
81
|
+
/** Upsert targets one known id; there is no `forAll`/`where` form. */
|
|
82
|
+
mode: 'for';
|
|
83
|
+
/** A node id, or a `{@ctx: name}` context reference resolved at lowering. */
|
|
84
|
+
targetId?: string | ContextRefJSON;
|
|
85
|
+
data: MutationNodeDataJSON;
|
|
86
|
+
};
|
|
68
87
|
export type DeleteMutationJSON = {
|
|
69
88
|
v?: string;
|
|
70
89
|
op: 'delete';
|
|
@@ -83,7 +102,7 @@ export type DeleteMutationJSON = {
|
|
|
83
102
|
mode: 'where';
|
|
84
103
|
where: WherePathJSON;
|
|
85
104
|
};
|
|
86
|
-
export type MutationJSON = CreateMutationJSON | UpdateMutationJSON | DeleteMutationJSON;
|
|
105
|
+
export type MutationJSON = CreateMutationJSON | UpdateMutationJSON | UpsertMutationJSON | DeleteMutationJSON;
|
|
87
106
|
/** The shape a nested node is expected to have (a property's value shape), if resolvable. */
|
|
88
107
|
export declare function valueShapeOf(prop?: PropertyShapeData): NodeShapeData | undefined;
|
|
89
108
|
/** Encode any property value, including arrays and set modifications. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MutationSerialization.js","sourceRoot":"","sources":["../../../src/queries/MutationSerialization.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAML,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,gBAAgB,EAAC,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAC,cAAc,EAAE,gBAAgB,EAAC,MAAM,kCAAkC,CAAC;AAGlF,OAAO,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAErD,OAAO,EACL,eAAe,EACf,eAAe,GAEhB,MAAM,wBAAwB,CAAC;AAoChC,qDAAqD;AACrD,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,cAAc,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"MutationSerialization.js","sourceRoot":"","sources":["../../../src/queries/MutationSerialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { PendingQueryContext } from './QueryContext.js';
|
|
|
6
6
|
import type { NodeShapeData } from '../shapes/SHACL.js';
|
|
7
7
|
import { type WhereClause } from './SelectQuery.js';
|
|
8
8
|
import type { ExpressionUpdateProxy, ExpressionUpdateResult } from '../expressions/ExpressionMethods.js';
|
|
9
|
-
import { type UpdateMutationJSON } from './MutationSerialization.js';
|
|
9
|
+
import { type UpdateMutationJSON, type UpsertMutationJSON } from './MutationSerialization.js';
|
|
10
10
|
import type { UpdateLowerSpec } from './mutationLowerSpec.js';
|
|
11
11
|
/**
|
|
12
12
|
* An immutable, fluent builder for update mutations.
|
|
@@ -30,17 +30,26 @@ export declare class UpdateBuilder<S extends Shape = Shape, U extends UpdatePart
|
|
|
30
30
|
private readonly _whereFn?;
|
|
31
31
|
private readonly _where?;
|
|
32
32
|
private readonly _targetContextName?;
|
|
33
|
+
private readonly _upsert;
|
|
33
34
|
private constructor();
|
|
34
35
|
private clone;
|
|
35
36
|
static from<S extends Shape>(shape: ShapeConstructor<S> | string): UpdateBuilder<S>;
|
|
37
|
+
/** Builder for a create-or-replace against a known id. See `Shape.upsert()`. */
|
|
38
|
+
static upsertFrom<S extends Shape>(shape: ShapeConstructor<S> | string): UpdateBuilder<S>;
|
|
36
39
|
/** Reconstruct an UpdateBuilder from its DSL-JSON (inverse of `toJSON`). */
|
|
37
|
-
static fromJSON(json: UpdateMutationJSON): UpdateBuilder;
|
|
40
|
+
static fromJSON(json: UpdateMutationJSON | UpsertMutationJSON): UpdateBuilder;
|
|
38
41
|
/** Target a specific entity by ID. */
|
|
39
42
|
for(id: string | NodeReferenceValue | PendingQueryContext): UpdateBuilder<S, U, AddId<U>>;
|
|
40
43
|
/** Update all instances of this shape type. Returns void. */
|
|
41
44
|
forAll(): UpdateBuilder<S, U, void>;
|
|
42
45
|
/** Update instances matching a condition. Returns void. */
|
|
43
46
|
where(fn: WhereClause<S>): UpdateBuilder<S, U, void>;
|
|
47
|
+
/**
|
|
48
|
+
* An upsert has to know which node to create, so it only makes sense against a single
|
|
49
|
+
* known id. `forAll()` and `where()` select existing nodes — there is nothing to create
|
|
50
|
+
* when they match nothing, and no single id to create it under.
|
|
51
|
+
*/
|
|
52
|
+
private _assertNotUpsert;
|
|
44
53
|
/** Replace the update data. */
|
|
45
54
|
set(fn: (p: ExpressionUpdateProxy<S>) => ExpressionUpdateResult<S>): UpdateBuilder<S, any, R>;
|
|
46
55
|
set<NewU extends UpdatePartial<S>>(data: NewU): UpdateBuilder<S, NewU, R>;
|
|
@@ -50,6 +59,11 @@ export declare class UpdateBuilder<S extends Shape = Shape, U extends UpdatePart
|
|
|
50
59
|
get shape(): NodeShapeData;
|
|
51
60
|
/** @internal The IR-free lowering spec consumed by `lower()`. Validates inputs. */
|
|
52
61
|
_lowerSpec(): UpdateLowerSpec<S>;
|
|
62
|
+
/**
|
|
63
|
+
* The key name of a top-level `id`/`__id` in the update data, if present. Used only to
|
|
64
|
+
* improve the missing-target error; the data object itself is validated downstream.
|
|
65
|
+
*/
|
|
66
|
+
private _strayTopLevelId;
|
|
53
67
|
/** Resolve the target id from an explicit id or a query-context reference. */
|
|
54
68
|
private _resolveTargetId;
|
|
55
69
|
/**
|
|
@@ -57,7 +71,7 @@ export declare class UpdateBuilder<S extends Shape = Shape, U extends UpdatePart
|
|
|
57
71
|
* data through the IR-free factory base (handles the expression-callback form
|
|
58
72
|
* of `.set()`), and serializes the where clause for `where`-mode updates.
|
|
59
73
|
*/
|
|
60
|
-
toJSON(): UpdateMutationJSON;
|
|
74
|
+
toJSON(): UpdateMutationJSON | UpsertMutationJSON;
|
|
61
75
|
/**
|
|
62
76
|
* Execute the mutation.
|
|
63
77
|
*
|
|
@@ -15,7 +15,7 @@ import { WIRE_VERSION, assertWireVersion } from './wireVersion.js';
|
|
|
15
15
|
import { PendingQueryContext, getQueryContext, UnresolvedContextError } from './QueryContext.js';
|
|
16
16
|
import { encodeContextRef, isContextRefJSON } from './ContextRef.js';
|
|
17
17
|
import { processWhereClause } from './SelectQuery.js';
|
|
18
|
-
import { encodeNodeData, decodeNodeDataToRaw } from './MutationSerialization.js';
|
|
18
|
+
import { encodeNodeData, decodeNodeDataToRaw, } from './MutationSerialization.js';
|
|
19
19
|
import { serializeWherePath, deserializeWherePath } from './QueryBuilderSerialization.js';
|
|
20
20
|
/**
|
|
21
21
|
* An immutable, fluent builder for update mutations.
|
|
@@ -32,6 +32,7 @@ import { serializeWherePath, deserializeWherePath } from './QueryBuilderSerializ
|
|
|
32
32
|
*/
|
|
33
33
|
export class UpdateBuilder extends MutationThenable {
|
|
34
34
|
constructor(init) {
|
|
35
|
+
var _a;
|
|
35
36
|
super();
|
|
36
37
|
this._tag = 'UpdateBuilder';
|
|
37
38
|
// ---------------------------------------------------------------------------
|
|
@@ -46,9 +47,10 @@ export class UpdateBuilder extends MutationThenable {
|
|
|
46
47
|
this._whereFn = init.whereFn;
|
|
47
48
|
this._where = init.where;
|
|
48
49
|
this._targetContextName = init.targetContextName;
|
|
50
|
+
this._upsert = (_a = init.upsert) !== null && _a !== void 0 ? _a : false;
|
|
49
51
|
}
|
|
50
52
|
clone(overrides = {}) {
|
|
51
|
-
return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId, mode: this._mode, whereFn: this._whereFn, where: this._where, targetContextName: this._targetContextName }, overrides));
|
|
53
|
+
return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId, mode: this._mode, whereFn: this._whereFn, where: this._where, targetContextName: this._targetContextName, upsert: this._upsert }, overrides));
|
|
52
54
|
}
|
|
53
55
|
// ---------------------------------------------------------------------------
|
|
54
56
|
// Static constructors
|
|
@@ -57,11 +59,31 @@ export class UpdateBuilder extends MutationThenable {
|
|
|
57
59
|
const resolved = resolveShape(shape);
|
|
58
60
|
return new UpdateBuilder({ shape: resolved });
|
|
59
61
|
}
|
|
62
|
+
/** Builder for a create-or-replace against a known id. See `Shape.upsert()`. */
|
|
63
|
+
static upsertFrom(shape) {
|
|
64
|
+
const resolved = resolveShape(shape);
|
|
65
|
+
return new UpdateBuilder({ shape: resolved, upsert: true });
|
|
66
|
+
}
|
|
60
67
|
/** Reconstruct an UpdateBuilder from its DSL-JSON (inverse of `toJSON`). */
|
|
61
68
|
static fromJSON(json) {
|
|
62
69
|
assertWireVersion(json.v);
|
|
63
70
|
const resolved = resolveShape(json.shape);
|
|
64
71
|
const data = decodeNodeDataToRaw(json.data, resolved.shape);
|
|
72
|
+
// Branch on `op` first so each envelope keeps its own narrowed type; an upsert has
|
|
73
|
+
// only the `for` form, so its modes are not the update modes.
|
|
74
|
+
if (json.op === 'upsert') {
|
|
75
|
+
// The type says `mode: 'for'`, but an inbound envelope is untrusted data — the
|
|
76
|
+
// cast keeps the runtime check that the type alone cannot enforce.
|
|
77
|
+
if (json.mode !== 'for') {
|
|
78
|
+
throw new Error(`upsert mode "${String(json.mode)}" is invalid — an upsert targets one known id.`);
|
|
79
|
+
}
|
|
80
|
+
if (isContextRefJSON(json.targetId)) {
|
|
81
|
+
return new UpdateBuilder({
|
|
82
|
+
shape: resolved, data, targetContextName: json.targetId['@ctx'], mode: 'for', upsert: true,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return new UpdateBuilder({ shape: resolved, data, targetId: json.targetId, mode: 'for', upsert: true });
|
|
86
|
+
}
|
|
65
87
|
if (json.mode === 'for') {
|
|
66
88
|
if (isContextRefJSON(json.targetId)) {
|
|
67
89
|
return new UpdateBuilder({ shape: resolved, data, targetContextName: json.targetId['@ctx'], mode: 'for' });
|
|
@@ -87,12 +109,25 @@ export class UpdateBuilder extends MutationThenable {
|
|
|
87
109
|
}
|
|
88
110
|
/** Update all instances of this shape type. Returns void. */
|
|
89
111
|
forAll() {
|
|
112
|
+
this._assertNotUpsert('forAll()');
|
|
90
113
|
return this.clone({ mode: 'forAll', targetId: undefined, whereFn: undefined });
|
|
91
114
|
}
|
|
92
115
|
/** Update instances matching a condition. Returns void. */
|
|
93
116
|
where(fn) {
|
|
117
|
+
this._assertNotUpsert('where()');
|
|
94
118
|
return this.clone({ mode: 'where', whereFn: fn, targetId: undefined });
|
|
95
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* An upsert has to know which node to create, so it only makes sense against a single
|
|
122
|
+
* known id. `forAll()` and `where()` select existing nodes — there is nothing to create
|
|
123
|
+
* when they match nothing, and no single id to create it under.
|
|
124
|
+
*/
|
|
125
|
+
_assertNotUpsert(method) {
|
|
126
|
+
if (this._upsert) {
|
|
127
|
+
throw new Error(`upsert does not support .${method} — an upsert targets one known id, ` +
|
|
128
|
+
`so use .for(id). (.${method} selects existing nodes, which is what update does.)`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
96
131
|
set(data) {
|
|
97
132
|
return this.clone({ data });
|
|
98
133
|
}
|
|
@@ -123,9 +158,33 @@ export class UpdateBuilder extends MutationThenable {
|
|
|
123
158
|
if (this._targetContextName) {
|
|
124
159
|
throw new UnresolvedContextError(this._targetContextName);
|
|
125
160
|
}
|
|
126
|
-
|
|
161
|
+
// A caller arriving from `create({__id: id, ...values})` — which upsert is meant to
|
|
162
|
+
// replace — naturally writes the id into the data object. That form is rejected
|
|
163
|
+
// further down ("cannot use id in the top level"), but only once a target exists;
|
|
164
|
+
// without one they would otherwise get a bare "requires .for(id)" that never
|
|
165
|
+
// mentions the id they did pass. Name it here instead.
|
|
166
|
+
const strayId = this._strayTopLevelId();
|
|
167
|
+
if (strayId) {
|
|
168
|
+
throw new Error(`${this._upsert ? 'upsert' : 'update'} takes the target id in .for(id), not in the data: ` +
|
|
169
|
+
`move "${strayId}" out of the data object — ` +
|
|
170
|
+
`${this._upsert ? 'upsert' : 'update'}(values).for({id}). ` +
|
|
171
|
+
`(create() is the one that takes an id in its data, because there it names the node being created.)`);
|
|
172
|
+
}
|
|
173
|
+
throw new Error(this._upsert
|
|
174
|
+
? 'upsert requires .for(id) before it can be lowered — an upsert targets one known id.'
|
|
175
|
+
: 'UpdateBuilder requires .for(id), .forAll(), or .where() before it can be lowered.');
|
|
127
176
|
}
|
|
128
|
-
return { shapeClass: this._shape, data: this._data, mode: 'for', targetId };
|
|
177
|
+
return Object.assign({ shapeClass: this._shape, data: this._data, mode: 'for', targetId }, (this._upsert ? { upsert: true } : {}));
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* The key name of a top-level `id`/`__id` in the update data, if present. Used only to
|
|
181
|
+
* improve the missing-target error; the data object itself is validated downstream.
|
|
182
|
+
*/
|
|
183
|
+
_strayTopLevelId() {
|
|
184
|
+
const data = this._data;
|
|
185
|
+
if (!data || typeof data !== 'object')
|
|
186
|
+
return undefined;
|
|
187
|
+
return ['id', '__id'].find((k) => k in data);
|
|
129
188
|
}
|
|
130
189
|
/** Resolve the target id from an explicit id or a query-context reference. */
|
|
131
190
|
_resolveTargetId() {
|
|
@@ -151,9 +210,12 @@ export class UpdateBuilder extends MutationThenable {
|
|
|
151
210
|
throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before .toJSON().');
|
|
152
211
|
}
|
|
153
212
|
const fields = new MutationQueryFactory().describe(this._shape.shape, this._data, { validate: 'partial' });
|
|
213
|
+
if (this._upsert && mode !== 'for') {
|
|
214
|
+
throw new Error('upsert requires .for(id) before it can be serialized.');
|
|
215
|
+
}
|
|
154
216
|
const json = {
|
|
155
217
|
v: WIRE_VERSION,
|
|
156
|
-
op: 'update',
|
|
218
|
+
op: this._upsert ? 'upsert' : 'update',
|
|
157
219
|
shape: this._shape.shape.id,
|
|
158
220
|
mode,
|
|
159
221
|
data: encodeNodeData(fields, this._shape.shape),
|
|
@@ -169,6 +231,8 @@ export class UpdateBuilder extends MutationThenable {
|
|
|
169
231
|
if (!wherePath) {
|
|
170
232
|
throw new Error('UpdateBuilder.where() requires a condition callback.');
|
|
171
233
|
}
|
|
234
|
+
// `mode === 'where'` is unreachable for an upsert (guarded in `.where()` and again
|
|
235
|
+
// above), so this branch is always the update envelope.
|
|
172
236
|
json.where = serializeWherePath(wherePath, this._shape.shape);
|
|
173
237
|
}
|
|
174
238
|
return json;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateBuilder.js","sourceRoot":"","sources":["../../../src/queries/UpdateBuilder.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAC,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAC,mBAAmB,EAAE,eAAe,EAAE,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AAC/F,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAmC,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAEtF,OAAO,
|
|
1
|
+
{"version":3,"file":"UpdateBuilder.js","sourceRoot":"","sources":["../../../src/queries/UpdateBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { IRUpdateMutation, IRUpdateWhereMutation } from './IntermediateRepresentation.js';
|
|
1
|
+
import type { IRUpdateMutation, IRUpdateWhereMutation, IRUpsertMutation } from './IntermediateRepresentation.js';
|
|
2
2
|
import type { NodeShapeData } from '../shapes/SHACL.js';
|
|
3
|
-
import type { UpdateMutationJSON } from './MutationSerialization.js';
|
|
3
|
+
import type { UpdateMutationJSON, UpsertMutationJSON } from './MutationSerialization.js';
|
|
4
4
|
import type { UpdateLowerSpec } from './mutationLowerSpec.js';
|
|
5
5
|
/**
|
|
6
6
|
* The closed, read-only update query a dataset receives (implemented by
|
|
@@ -10,9 +10,9 @@ import type { UpdateLowerSpec } from './mutationLowerSpec.js';
|
|
|
10
10
|
export interface UpdateQuery {
|
|
11
11
|
readonly __queryKind: 'update';
|
|
12
12
|
readonly shape: NodeShapeData;
|
|
13
|
-
toJSON(): UpdateMutationJSON;
|
|
13
|
+
toJSON(): UpdateMutationJSON | UpsertMutationJSON;
|
|
14
14
|
/** @internal IR-free lowering spec consumed by `lower()`. */
|
|
15
15
|
_lowerSpec(): UpdateLowerSpec;
|
|
16
16
|
}
|
|
17
17
|
/** The lowered IR for an update mutation (what `lower()` produces). */
|
|
18
|
-
export type IRUpdateQuery = IRUpdateMutation | IRUpdateWhereMutation;
|
|
18
|
+
export type IRUpdateQuery = IRUpdateMutation | IRUpdateWhereMutation | IRUpsertMutation;
|
|
@@ -26,6 +26,8 @@ export function fromJSON(json) {
|
|
|
26
26
|
case 'create':
|
|
27
27
|
return CreateBuilder.fromJSON(json);
|
|
28
28
|
case 'update':
|
|
29
|
+
case 'upsert':
|
|
30
|
+
// Both reconstruct an UpdateBuilder; the op selects upsert mode inside.
|
|
29
31
|
return UpdateBuilder.fromJSON(json);
|
|
30
32
|
case 'delete':
|
|
31
33
|
return DeleteBuilder.fromJSON(json);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fromJSON.js","sourceRoot":"","sources":["../../../src/queries/fromJSON.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,OAAO,EAAC,aAAa,EAAwB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAKnD,MAAM,UAAU,QAAQ,CACtB,IAAe;IAEf,iBAAiB,CAAE,IAAsB,aAAtB,IAAI,uBAAJ,IAAI,CAAoB,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACrD,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;YAChB,KAAK,KAAK;gBACR,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAC;YACnD,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC;gBACE,oEAAoE;gBACpE,qEAAqE;gBACrE,uCAAuC;gBACvC,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAE,IAAsB,CAAC,EAAE,CAAC,yBAAyB,CACjF,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAwB,CAAC,CAAC;AAC1D,CAAC"}
|
|
1
|
+
{"version":3,"file":"fromJSON.js","sourceRoot":"","sources":["../../../src/queries/fromJSON.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;GAOG;AACH,OAAO,EAAC,aAAa,EAAwB,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,kBAAkB,CAAC;AAKnD,MAAM,UAAU,QAAQ,CACtB,IAAe;IAEf,iBAAiB,CAAE,IAAsB,aAAtB,IAAI,uBAAJ,IAAI,CAAoB,CAAC,CAAC,CAAC;IAC9C,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACrD,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;YAChB,KAAK,KAAK;gBACR,OAAO,UAAU,CAAC,QAAQ,CAAC,IAAoB,CAAC,CAAC;YACnD,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ,CAAC;YACd,KAAK,QAAQ;gBACX,wEAAwE;gBACxE,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,QAAQ;gBACX,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC;gBACE,oEAAoE;gBACpE,qEAAqE;gBACrE,uCAAuC;gBACvC,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAE,IAAsB,CAAC,EAAE,CAAC,yBAAyB,CACjF,CAAC;QACN,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAwB,CAAC,CAAC;AAC1D,CAAC"}
|
package/lib/esm/queries/lower.js
CHANGED
|
@@ -20,7 +20,7 @@ import { MutationQueryFactory } from './MutationQuery.js';
|
|
|
20
20
|
import { isSetModificationValue } from './QueryFactory.js';
|
|
21
21
|
import { PendingQueryContext } from './QueryContext.js';
|
|
22
22
|
import { resolveContextId } from './ContextRef.js';
|
|
23
|
-
import { buildCanonicalCreateMutationIR, buildCanonicalUpdateMutationIR, buildCanonicalUpdateWhereMutationIR, buildCanonicalDeleteMutationIR, buildCanonicalDeleteAllMutationIR, buildCanonicalDeleteWhereMutationIR, } from './IRMutation.js';
|
|
23
|
+
import { buildCanonicalCreateMutationIR, buildCanonicalUpdateMutationIR, buildCanonicalUpsertMutationIR, buildCanonicalUpdateWhereMutationIR, buildCanonicalDeleteMutationIR, buildCanonicalDeleteAllMutationIR, buildCanonicalDeleteWhereMutationIR, } from './IRMutation.js';
|
|
24
24
|
import { toWhere } from './IRDesugar.js';
|
|
25
25
|
import { lowerWhereToIR } from './IRLower.js';
|
|
26
26
|
/** Lower a pre-evaluated where path to its canonical IR fragment. */
|
|
@@ -71,7 +71,9 @@ function lowerUpdate(spec) {
|
|
|
71
71
|
const shape = spec.shapeClass.shape;
|
|
72
72
|
const updates = resolveDescriptionContexts(new MutationQueryFactory().describe(shape, spec.data, { validate: 'partial' }));
|
|
73
73
|
if (spec.mode === 'for') {
|
|
74
|
-
return
|
|
74
|
+
return spec.upsert
|
|
75
|
+
? buildCanonicalUpsertMutationIR({ id: spec.targetId, shape, updates })
|
|
76
|
+
: buildCanonicalUpdateMutationIR({ id: spec.targetId, shape, updates });
|
|
75
77
|
}
|
|
76
78
|
// forAll / where
|
|
77
79
|
const lowered = spec.wherePath ? lowerWherePath(spec.wherePath) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lower.js","sourceRoot":"","sources":["../../../src/queries/lower.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lower.js","sourceRoot":"","sources":["../../../src/queries/lower.ts"],"names":[],"mappings":"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"}
|