@_linked/core 2.0.0 → 2.0.1
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 +27 -0
- package/README.md +50 -24
- package/lib/cjs/queries/DeleteBuilder.d.ts +17 -20
- package/lib/cjs/queries/DeleteBuilder.js +46 -19
- package/lib/cjs/queries/DeleteBuilder.js.map +1 -1
- package/lib/cjs/queries/DeleteQuery.d.ts +2 -2
- package/lib/cjs/queries/DeleteQuery.js.map +1 -1
- package/lib/cjs/queries/IRCanonicalize.d.ts +9 -2
- package/lib/cjs/queries/IRCanonicalize.js +6 -1
- package/lib/cjs/queries/IRCanonicalize.js.map +1 -1
- package/lib/cjs/queries/IRDesugar.d.ts +19 -0
- package/lib/cjs/queries/IRDesugar.js +15 -9
- package/lib/cjs/queries/IRDesugar.js.map +1 -1
- package/lib/cjs/queries/IRLower.d.ts +10 -2
- package/lib/cjs/queries/IRLower.js +104 -2
- package/lib/cjs/queries/IRLower.js.map +1 -1
- package/lib/cjs/queries/IRMutation.d.ts +21 -1
- package/lib/cjs/queries/IRMutation.js +30 -1
- package/lib/cjs/queries/IRMutation.js.map +1 -1
- package/lib/cjs/queries/IntermediateRepresentation.d.ts +24 -2
- package/lib/cjs/queries/QueryBuilder.d.ts +14 -1
- package/lib/cjs/queries/QueryBuilder.js +59 -2
- package/lib/cjs/queries/QueryBuilder.js.map +1 -1
- package/lib/cjs/queries/UpdateBuilder.d.ts +20 -13
- package/lib/cjs/queries/UpdateBuilder.js +61 -11
- package/lib/cjs/queries/UpdateBuilder.js.map +1 -1
- package/lib/cjs/queries/UpdateQuery.d.ts +2 -2
- package/lib/cjs/shapes/Shape.d.ts +6 -2
- package/lib/cjs/shapes/Shape.js +9 -5
- package/lib/cjs/shapes/Shape.js.map +1 -1
- package/lib/cjs/sparql/SparqlStore.js +15 -0
- package/lib/cjs/sparql/SparqlStore.js.map +1 -1
- package/lib/cjs/sparql/irToAlgebra.d.ts +34 -3
- package/lib/cjs/sparql/irToAlgebra.js +294 -35
- package/lib/cjs/sparql/irToAlgebra.js.map +1 -1
- package/lib/cjs/test-helpers/query-fixtures.d.ts +1464 -16
- package/lib/cjs/test-helpers/query-fixtures.js +31 -2
- package/lib/cjs/test-helpers/query-fixtures.js.map +1 -1
- package/lib/esm/queries/DeleteBuilder.d.ts +17 -20
- package/lib/esm/queries/DeleteBuilder.js +46 -19
- package/lib/esm/queries/DeleteBuilder.js.map +1 -1
- package/lib/esm/queries/DeleteQuery.d.ts +2 -2
- package/lib/esm/queries/DeleteQuery.js.map +1 -1
- package/lib/esm/queries/IRCanonicalize.d.ts +9 -2
- package/lib/esm/queries/IRCanonicalize.js +6 -1
- package/lib/esm/queries/IRCanonicalize.js.map +1 -1
- package/lib/esm/queries/IRDesugar.d.ts +19 -0
- package/lib/esm/queries/IRDesugar.js +7 -2
- package/lib/esm/queries/IRDesugar.js.map +1 -1
- package/lib/esm/queries/IRLower.d.ts +10 -2
- package/lib/esm/queries/IRLower.js +102 -1
- package/lib/esm/queries/IRLower.js.map +1 -1
- package/lib/esm/queries/IRMutation.d.ts +21 -1
- package/lib/esm/queries/IRMutation.js +26 -0
- package/lib/esm/queries/IRMutation.js.map +1 -1
- package/lib/esm/queries/IntermediateRepresentation.d.ts +24 -2
- package/lib/esm/queries/QueryBuilder.d.ts +14 -1
- package/lib/esm/queries/QueryBuilder.js +59 -2
- package/lib/esm/queries/QueryBuilder.js.map +1 -1
- package/lib/esm/queries/UpdateBuilder.d.ts +20 -13
- package/lib/esm/queries/UpdateBuilder.js +61 -11
- package/lib/esm/queries/UpdateBuilder.js.map +1 -1
- package/lib/esm/queries/UpdateQuery.d.ts +2 -2
- package/lib/esm/shapes/Shape.d.ts +6 -2
- package/lib/esm/shapes/Shape.js +9 -5
- package/lib/esm/shapes/Shape.js.map +1 -1
- package/lib/esm/sparql/SparqlStore.js +16 -1
- package/lib/esm/sparql/SparqlStore.js.map +1 -1
- package/lib/esm/sparql/irToAlgebra.d.ts +34 -3
- package/lib/esm/sparql/irToAlgebra.js +288 -35
- package/lib/esm/sparql/irToAlgebra.js.map +1 -1
- package/lib/esm/test-helpers/query-fixtures.d.ts +1464 -16
- package/lib/esm/test-helpers/query-fixtures.js +31 -2
- package/lib/esm/test-helpers/query-fixtures.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { resolveShape } from './resolveShape.js';
|
|
2
2
|
import { UpdateQueryFactory } from './UpdateQuery.js';
|
|
3
3
|
import { getQueryDispatch } from './queryDispatch.js';
|
|
4
|
+
import { processWhereClause } from './SelectQuery.js';
|
|
5
|
+
import { buildCanonicalUpdateWhereMutationIR } from './IRMutation.js';
|
|
6
|
+
import { toWhere } from './IRDesugar.js';
|
|
7
|
+
import { canonicalizeWhere } from './IRCanonicalize.js';
|
|
8
|
+
import { lowerWhereToIR } from './IRLower.js';
|
|
4
9
|
/**
|
|
5
10
|
* An immutable, fluent builder for update mutations.
|
|
6
11
|
*
|
|
@@ -9,20 +14,21 @@ import { getQueryDispatch } from './queryDispatch.js';
|
|
|
9
14
|
* Implements PromiseLike so mutations execute on `await`:
|
|
10
15
|
* ```ts
|
|
11
16
|
* const result = await UpdateBuilder.from(Person).for({id: '...'}).set({name: 'Bob'});
|
|
17
|
+
* await UpdateBuilder.from(Person).set({hobby: 'x'}).forAll(); // returns void
|
|
12
18
|
* ```
|
|
13
19
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* Internally delegates to UpdateQueryFactory for IR generation.
|
|
20
|
+
* R is the resolved type: AddId<U> for ID-based, void for bulk operations.
|
|
17
21
|
*/
|
|
18
22
|
export class UpdateBuilder {
|
|
19
23
|
constructor(init) {
|
|
20
24
|
this._shape = init.shape;
|
|
21
25
|
this._data = init.data;
|
|
22
26
|
this._targetId = init.targetId;
|
|
27
|
+
this._mode = init.mode;
|
|
28
|
+
this._whereFn = init.whereFn;
|
|
23
29
|
}
|
|
24
30
|
clone(overrides = {}) {
|
|
25
|
-
return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId }, overrides));
|
|
31
|
+
return new UpdateBuilder(Object.assign({ shape: this._shape, data: this._data, targetId: this._targetId, mode: this._mode, whereFn: this._whereFn }, overrides));
|
|
26
32
|
}
|
|
27
33
|
// ---------------------------------------------------------------------------
|
|
28
34
|
// Static constructors
|
|
@@ -34,31 +40,75 @@ export class UpdateBuilder {
|
|
|
34
40
|
// ---------------------------------------------------------------------------
|
|
35
41
|
// Fluent API
|
|
36
42
|
// ---------------------------------------------------------------------------
|
|
37
|
-
/** Target a specific entity by ID.
|
|
43
|
+
/** Target a specific entity by ID. */
|
|
38
44
|
for(id) {
|
|
39
45
|
const resolvedId = typeof id === 'string' ? id : id.id;
|
|
40
|
-
return this.clone({ targetId: resolvedId });
|
|
46
|
+
return this.clone({ targetId: resolvedId, mode: 'for' });
|
|
47
|
+
}
|
|
48
|
+
/** Update all instances of this shape type. Returns void. */
|
|
49
|
+
forAll() {
|
|
50
|
+
return this.clone({ mode: 'forAll', targetId: undefined, whereFn: undefined });
|
|
51
|
+
}
|
|
52
|
+
/** Update instances matching a condition. Returns void. */
|
|
53
|
+
where(fn) {
|
|
54
|
+
return this.clone({ mode: 'where', whereFn: fn, targetId: undefined });
|
|
41
55
|
}
|
|
42
|
-
/**
|
|
56
|
+
/** Replace the update data. */
|
|
43
57
|
set(data) {
|
|
44
58
|
return this.clone({ data });
|
|
45
59
|
}
|
|
46
60
|
// ---------------------------------------------------------------------------
|
|
47
61
|
// Build & execute
|
|
48
62
|
// ---------------------------------------------------------------------------
|
|
49
|
-
/** Build the IR mutation.
|
|
63
|
+
/** Build the IR mutation. */
|
|
50
64
|
build() {
|
|
51
|
-
if (!this._targetId) {
|
|
52
|
-
throw new Error('UpdateBuilder requires .for(id) before .build(). Specify which entity to update.');
|
|
53
|
-
}
|
|
54
65
|
if (!this._data) {
|
|
55
66
|
throw new Error('UpdateBuilder requires .set(data) before .build(). Specify what to update.');
|
|
56
67
|
}
|
|
68
|
+
const mode = this._mode || (this._targetId ? 'for' : undefined);
|
|
69
|
+
if (mode === 'forAll') {
|
|
70
|
+
return this.buildUpdateWhere();
|
|
71
|
+
}
|
|
72
|
+
if (mode === 'where') {
|
|
73
|
+
if (!this._whereFn) {
|
|
74
|
+
throw new Error('UpdateBuilder.where() requires a condition callback.');
|
|
75
|
+
}
|
|
76
|
+
return this.buildUpdateWhere();
|
|
77
|
+
}
|
|
78
|
+
// Default: ID-based update
|
|
79
|
+
if (!this._targetId) {
|
|
80
|
+
throw new Error('UpdateBuilder requires .for(id), .forAll(), or .where() before .build().');
|
|
81
|
+
}
|
|
57
82
|
const factory = new UpdateQueryFactory(this._shape, this._targetId, this._data);
|
|
58
83
|
return factory.build();
|
|
59
84
|
}
|
|
85
|
+
buildUpdateWhere() {
|
|
86
|
+
const factory = new UpdateQueryFactory(this._shape, '__placeholder__', // not used for where/forAll
|
|
87
|
+
this._data);
|
|
88
|
+
const description = factory.fields;
|
|
89
|
+
let where;
|
|
90
|
+
let wherePatterns;
|
|
91
|
+
if (this._whereFn) {
|
|
92
|
+
const wherePath = processWhereClause(this._whereFn, this._shape);
|
|
93
|
+
const desugared = toWhere(wherePath);
|
|
94
|
+
const canonical = canonicalizeWhere(desugared);
|
|
95
|
+
const lowered = lowerWhereToIR(canonical);
|
|
96
|
+
where = lowered.where;
|
|
97
|
+
wherePatterns = lowered.wherePatterns;
|
|
98
|
+
}
|
|
99
|
+
return buildCanonicalUpdateWhereMutationIR({
|
|
100
|
+
shape: this._shape.shape,
|
|
101
|
+
updates: description,
|
|
102
|
+
where,
|
|
103
|
+
wherePatterns,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
60
106
|
/** Execute the mutation. */
|
|
61
107
|
exec() {
|
|
108
|
+
const mode = this._mode || (this._targetId ? 'for' : undefined);
|
|
109
|
+
if (mode === 'forAll' || mode === 'where') {
|
|
110
|
+
return getQueryDispatch().updateQuery(this.build()).then(() => undefined);
|
|
111
|
+
}
|
|
62
112
|
return getQueryDispatch().updateQuery(this.build());
|
|
63
113
|
}
|
|
64
114
|
// ---------------------------------------------------------------------------
|
|
@@ -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,kBAAkB,EAAc,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"UpdateBuilder.js","sourceRoot":"","sources":["../../../src/queries/UpdateBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Shape, ShapeConstructor } from '../shapes/Shape.js';
|
|
2
2
|
import { NodeDescriptionValue, NodeReferenceValue, UpdatePartial } from './QueryFactory.js';
|
|
3
3
|
import { MutationQueryFactory } from './MutationQuery.js';
|
|
4
|
-
import { IRUpdateMutation } from './IntermediateRepresentation.js';
|
|
4
|
+
import { IRUpdateMutation, IRUpdateWhereMutation } from './IntermediateRepresentation.js';
|
|
5
5
|
/**
|
|
6
6
|
* The canonical UpdateQuery type — an IR AST node representing an update mutation.
|
|
7
7
|
* This is the type received by IQuadStore.updateQuery().
|
|
8
8
|
*/
|
|
9
|
-
export type UpdateQuery = IRUpdateMutation;
|
|
9
|
+
export type UpdateQuery = IRUpdateMutation | IRUpdateWhereMutation;
|
|
10
10
|
export declare class UpdateQueryFactory<ShapeType extends Shape, U extends UpdatePartial<ShapeType>> extends MutationQueryFactory {
|
|
11
11
|
shapeClass: ShapeConstructor<ShapeType>;
|
|
12
12
|
readonly id: string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { NodeShape, PropertyShape } from './SHACL.js';
|
|
2
|
-
import { QueryBuildFn, QueryResponseToResultType, SelectAllQueryResponse } from '../queries/SelectQuery.js';
|
|
2
|
+
import { QueryBuildFn, QueryResponseToResultType, SelectAllQueryResponse, WhereClause } from '../queries/SelectQuery.js';
|
|
3
3
|
import { NodeReferenceValue, UpdatePartial } from '../queries/QueryFactory.js';
|
|
4
4
|
import { NodeId } from '../queries/MutationQuery.js';
|
|
5
5
|
import { QueryBuilder } from '../queries/QueryBuilder.js';
|
|
@@ -58,9 +58,13 @@ export declare abstract class Shape {
|
|
|
58
58
|
* await Person.update({name: 'Alice'}).for({id: '...'});
|
|
59
59
|
* ```
|
|
60
60
|
*/
|
|
61
|
-
static update<S extends Shape, U extends UpdatePartial<S>>(this: ShapeConstructor<S>, data
|
|
61
|
+
static update<S extends Shape, U extends UpdatePartial<S>>(this: ShapeConstructor<S>, data: U): UpdateBuilder<S, U>;
|
|
62
62
|
static create<S extends Shape, U extends UpdatePartial<S>>(this: ShapeConstructor<S>, updateObjectOrFn?: U): CreateBuilder<S, U>;
|
|
63
63
|
static delete<S extends Shape>(this: ShapeConstructor<S>, id: NodeId | NodeId[] | NodeReferenceValue[]): DeleteBuilder<S>;
|
|
64
|
+
/** Delete all instances of this shape type. Returns void. */
|
|
65
|
+
static deleteAll<S extends Shape>(this: ShapeConstructor<S>): DeleteBuilder<S, void>;
|
|
66
|
+
/** Delete instances matching a condition. Sugar for `.delete().where(fn)`. Returns void. */
|
|
67
|
+
static deleteWhere<S extends Shape>(this: ShapeConstructor<S>, fn: WhereClause<S>): DeleteBuilder<S, void>;
|
|
64
68
|
static mapPropertyShapes<S extends Shape, ResponseType = unknown>(this: ShapeConstructor<S>, mapFunction?: PropertyShapeMapFunction<S, ResponseType>): ResponseType;
|
|
65
69
|
static getSetOf<T extends Shape>(this: ShapeConstructor<T>, values: Iterable<T | NodeReferenceValue | string>): ShapeSet<T>;
|
|
66
70
|
}
|
package/lib/esm/shapes/Shape.js
CHANGED
|
@@ -66,11 +66,7 @@ export class Shape {
|
|
|
66
66
|
* ```
|
|
67
67
|
*/
|
|
68
68
|
static update(data) {
|
|
69
|
-
|
|
70
|
-
if (data) {
|
|
71
|
-
builder = builder.set(data);
|
|
72
|
-
}
|
|
73
|
-
return builder;
|
|
69
|
+
return UpdateBuilder.from(this).set(data);
|
|
74
70
|
}
|
|
75
71
|
static create(updateObjectOrFn) {
|
|
76
72
|
let builder = CreateBuilder.from(this);
|
|
@@ -82,6 +78,14 @@ export class Shape {
|
|
|
82
78
|
static delete(id) {
|
|
83
79
|
return DeleteBuilder.from(this, id);
|
|
84
80
|
}
|
|
81
|
+
/** Delete all instances of this shape type. Returns void. */
|
|
82
|
+
static deleteAll() {
|
|
83
|
+
return DeleteBuilder.from(this).all();
|
|
84
|
+
}
|
|
85
|
+
/** Delete instances matching a condition. Sugar for `.delete().where(fn)`. Returns void. */
|
|
86
|
+
static deleteWhere(fn) {
|
|
87
|
+
return DeleteBuilder.from(this).where(fn);
|
|
88
|
+
}
|
|
85
89
|
static mapPropertyShapes(mapFunction) {
|
|
86
90
|
// SAFETY: dummyShape is used as a dynamic proxy target — we assign .proxy and
|
|
87
91
|
// access arbitrary property names on it, which S doesn't declare.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Shape.js","sourceRoot":"","sources":["../../../src/shapes/Shape.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAC,QAAQ,EAAC,MAAM,4BAA4B,CAAC;AAwBpD,MAAM,OAAgB,KAAK;IAQzB,YAAY,IAAkC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,EAAE,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAQ,IAAI,CAAC,WAA4B,CAAC,KAAK,CAAC;IAClD,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,cAAc,CAAC,UAAwB,EAAE,IAAyB;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC;YACzC,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,GAAG,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;IAsBD,MAAM,CAAC,MAAM,CAMX,QAA6B;QAE7B,IAAI,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAA8B,CAAC;QACnE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,QAAe,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,OAAyC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,SAAS;QASd,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,EAAsC,CAAC;IACjF,CAAC;IAGD;;;;;;;OAOG;IACH,MAAM,CAAC,MAAM,CAEX,IAAO;QAEP,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAmC,CAAC;IAC9E,CAAC;IAED,MAAM,CAAC,MAAM,CAEX,gBAAoB;QAEpB,IAAI,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAA0B,CAAC;QAChE,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,OAAyC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,MAAM,CAEX,EAA4C;QAE5C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAqB,CAAC;IAC1D,CAAC;IAED,6DAA6D;IAC7D,MAAM,CAAC,SAAS;QAGd,OAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAsB,CAAC,GAAG,EAAE,CAAC;IAC9D,CAAC;IAED,4FAA4F;IAC5F,MAAM,CAAC,WAAW,CAEhB,EAAkB;QAElB,OAAQ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,CAAC,iBAAiB,CAEtB,WAAuD;QAEvD,8EAA8E;QAC9E,kEAAkE;QAClE,IAAI,UAAU,GAAQ,IAAI,IAAI,EAAE,CAAC;QACjC,UAAU,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE;YACvC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ;gBACvB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBAC5B,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;wBACtB,IAAI,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;4BAC1C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAClC,CAAC;wBACD,IAAI,aAAa,GAAG,uBAAuB,CACzC,UAAU,CAAC,WAAW,EACtB,GAAG,CAAC,QAAQ,EAAE,CACf,CAAC;wBACF,IAAI,aAAa,EAAE,CAAC;4BAClB,OAAO,aAAa,CAAC;wBACvB,CAAC;wBACD,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,iGAAiG,CAChI,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,QAAQ,CAEb,MAAiD;QAEjD,MAAM,GAAG,GAAG,IAAI,QAAQ,EAAK,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,GAAG,CAAC,GAAG,CAAC,KAAU,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;gBAC5B,QAAQ,CAAC,EAAE,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;;AApMM,iBAAW,GAAuB,IAAI,CAAC;AAEvC,mBAAa,GAAmC,IAAI,GAAG,EAAE,CAAC"}
|
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { selectToSparql, createToSparql, updateToSparql, deleteToSparql, } from './irToAlgebra.js';
|
|
10
|
+
import { selectToSparql, createToSparql, updateToSparql, updateWhereToSparql, deleteToSparql, deleteAllToSparql, deleteWhereToSparql, } from './irToAlgebra.js';
|
|
11
11
|
import { mapSparqlSelectResult, mapSparqlCreateResult, mapSparqlUpdateResult, } from './resultMapping.js';
|
|
12
12
|
import { generateEntityUri } from './sparqlUtils.js';
|
|
13
13
|
/**
|
|
@@ -58,6 +58,11 @@ export class SparqlStore {
|
|
|
58
58
|
}
|
|
59
59
|
updateQuery(query) {
|
|
60
60
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
if (query.kind === 'update_where') {
|
|
62
|
+
const sparql = updateWhereToSparql(query, this.options);
|
|
63
|
+
yield this.executeSparqlUpdate(sparql);
|
|
64
|
+
return { id: '' };
|
|
65
|
+
}
|
|
61
66
|
const sparql = updateToSparql(query, this.options);
|
|
62
67
|
yield this.executeSparqlUpdate(sparql);
|
|
63
68
|
return mapSparqlUpdateResult(query);
|
|
@@ -65,6 +70,16 @@ export class SparqlStore {
|
|
|
65
70
|
}
|
|
66
71
|
deleteQuery(query) {
|
|
67
72
|
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
if (query.kind === 'delete_all') {
|
|
74
|
+
const sparql = deleteAllToSparql(query, this.options);
|
|
75
|
+
yield this.executeSparqlUpdate(sparql);
|
|
76
|
+
return { deleted: [], count: 0 };
|
|
77
|
+
}
|
|
78
|
+
if (query.kind === 'delete_where') {
|
|
79
|
+
const sparql = deleteWhereToSparql(query, this.options);
|
|
80
|
+
yield this.executeSparqlUpdate(sparql);
|
|
81
|
+
return { deleted: [], count: 0 };
|
|
82
|
+
}
|
|
68
83
|
const sparql = deleteToSparql(query, this.options);
|
|
69
84
|
yield this.executeSparqlUpdate(sparql);
|
|
70
85
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SparqlStore.js","sourceRoot":"","sources":["../../../src/sparql/SparqlStore.ts"],"names":[],"mappings":";;;;;;;;;AAWA,OAAO,EACL,cAAc,EACd,cAAc,EACd,cAAc,EACd,cAAc,
|
|
1
|
+
{"version":3,"file":"SparqlStore.js","sourceRoot":"","sources":["../../../src/sparql/SparqlStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IRSelectQuery, IRCreateMutation, IRUpdateMutation, IRDeleteMutation } from '../queries/IntermediateRepresentation.js';
|
|
1
|
+
import { IRSelectQuery, IRCreateMutation, IRUpdateMutation, IRDeleteMutation, IRDeleteAllMutation, IRDeleteWhereMutation, IRUpdateWhereMutation } from '../queries/IntermediateRepresentation.js';
|
|
2
2
|
import { SparqlSelectPlan, SparqlInsertDataPlan, SparqlDeleteInsertPlan } from './SparqlAlgebra.js';
|
|
3
3
|
import { SparqlOptions } from './sparqlUtils.js';
|
|
4
4
|
/**
|
|
@@ -17,9 +17,29 @@ export declare function updateToAlgebra(query: IRUpdateMutation, options?: Sparq
|
|
|
17
17
|
* Converts an IRDeleteMutation to a SparqlDeleteInsertPlan (DELETE + WHERE).
|
|
18
18
|
*/
|
|
19
19
|
export declare function deleteToAlgebra(query: IRDeleteMutation, _options?: SparqlOptions): SparqlDeleteInsertPlan;
|
|
20
|
+
/**
|
|
21
|
+
* Converts an IRDeleteAllMutation to a SparqlDeleteInsertPlan.
|
|
22
|
+
*
|
|
23
|
+
* Generates DELETE { ?a0 ?p ?o . [blank node wildcards] }
|
|
24
|
+
* WHERE { ?a0 a <Shape> . ?a0 ?p ?o . OPTIONAL { [blank node traversals] } }
|
|
25
|
+
*/
|
|
26
|
+
export declare function deleteAllToAlgebra(query: IRDeleteAllMutation, _options?: SparqlOptions): SparqlDeleteInsertPlan;
|
|
27
|
+
/**
|
|
28
|
+
* Converts an IRDeleteWhereMutation to a SparqlDeleteInsertPlan.
|
|
29
|
+
*
|
|
30
|
+
* Like deleteAllToAlgebra but adds filter conditions from the where clause.
|
|
31
|
+
*/
|
|
32
|
+
export declare function deleteWhereToAlgebra(query: IRDeleteWhereMutation, _options?: SparqlOptions): SparqlDeleteInsertPlan;
|
|
33
|
+
/**
|
|
34
|
+
* Converts an IRUpdateWhereMutation to a SparqlDeleteInsertPlan.
|
|
35
|
+
*
|
|
36
|
+
* Like updateToAlgebra but uses a variable subject (?a0) instead of a
|
|
37
|
+
* hardcoded entity IRI, adds a type triple, and optionally includes
|
|
38
|
+
* filter conditions from the where clause.
|
|
39
|
+
*/
|
|
40
|
+
export declare function updateWhereToAlgebra(query: IRUpdateWhereMutation, options?: SparqlOptions): SparqlDeleteInsertPlan;
|
|
20
41
|
/**
|
|
21
42
|
* Converts an IRSelectQuery to a SPARQL string.
|
|
22
|
-
* Stub: will be implemented when algebraToString is available.
|
|
23
43
|
*/
|
|
24
44
|
export declare function selectToSparql(query: IRSelectQuery, options?: SparqlOptions): string;
|
|
25
45
|
/**
|
|
@@ -34,6 +54,17 @@ export declare function createToSparql(query: IRCreateMutation, options?: Sparql
|
|
|
34
54
|
export declare function updateToSparql(query: IRUpdateMutation, options?: SparqlOptions): string;
|
|
35
55
|
/**
|
|
36
56
|
* Converts an IRDeleteMutation to a SPARQL string.
|
|
37
|
-
* Stub: will be implemented when algebraToString is available.
|
|
38
57
|
*/
|
|
39
58
|
export declare function deleteToSparql(query: IRDeleteMutation, options?: SparqlOptions): string;
|
|
59
|
+
/**
|
|
60
|
+
* Converts an IRDeleteAllMutation to a SPARQL string.
|
|
61
|
+
*/
|
|
62
|
+
export declare function deleteAllToSparql(query: IRDeleteAllMutation, options?: SparqlOptions): string;
|
|
63
|
+
/**
|
|
64
|
+
* Converts an IRDeleteWhereMutation to a SPARQL string.
|
|
65
|
+
*/
|
|
66
|
+
export declare function deleteWhereToSparql(query: IRDeleteWhereMutation, options?: SparqlOptions): string;
|
|
67
|
+
/**
|
|
68
|
+
* Converts an IRUpdateWhereMutation to a SPARQL string.
|
|
69
|
+
*/
|
|
70
|
+
export declare function updateWhereToSparql(query: IRUpdateWhereMutation, options?: SparqlOptions): string;
|