@comake/skl-js-engine 1.3.8 → 1.3.10
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/dist/JsExecutor/PermissionBuilder.d.ts +1 -0
- package/dist/JsExecutor/PermissionBuilder.d.ts.map +1 -0
- package/dist/JsExecutor/PermissionBuilder.js.map +1 -1
- package/dist/JsExecutor/constants.d.ts +1 -0
- package/dist/JsExecutor/constants.d.ts.map +1 -0
- package/dist/JsExecutor/constants.js.map +1 -1
- package/dist/JsExecutor/denoUtils.d.ts +1 -0
- package/dist/JsExecutor/denoUtils.d.ts.map +1 -0
- package/dist/JsExecutor/denoUtils.js.map +1 -1
- package/dist/JsExecutor/errors.d.ts +1 -0
- package/dist/JsExecutor/errors.d.ts.map +1 -0
- package/dist/JsExecutor/errors.js.map +1 -1
- package/dist/JsExecutor/examples/basic/index.d.ts +1 -0
- package/dist/JsExecutor/examples/basic/index.d.ts.map +1 -0
- package/dist/JsExecutor/examples/basic/index.js.map +1 -1
- package/dist/JsExecutor/examples/basic/process.d.ts +1 -0
- package/dist/JsExecutor/examples/basic/process.d.ts.map +1 -0
- package/dist/JsExecutor/examples/basic/process.js.map +1 -1
- package/dist/JsExecutor/examples/jsExecutor/index.d.ts +1 -0
- package/dist/JsExecutor/examples/jsExecutor/index.d.ts.map +1 -0
- package/dist/JsExecutor/examples/jsExecutor/index.js.map +1 -1
- package/dist/JsExecutor/examples/jsExecutor/process.d.ts +1 -0
- package/dist/JsExecutor/examples/jsExecutor/process.d.ts.map +1 -0
- package/dist/JsExecutor/examples/jsExecutor/process.js.map +1 -1
- package/dist/JsExecutor/index.d.ts +1 -0
- package/dist/JsExecutor/index.d.ts.map +1 -0
- package/dist/JsExecutor/index.js.map +1 -1
- package/dist/JsExecutor/jsExecutor.d.ts +1 -0
- package/dist/JsExecutor/jsExecutor.d.ts.map +1 -0
- package/dist/JsExecutor/jsExecutor.js.map +1 -1
- package/dist/JsExecutor/jsonRpc/JsonRpcClient.d.ts +1 -0
- package/dist/JsExecutor/jsonRpc/JsonRpcClient.d.ts.map +1 -0
- package/dist/JsExecutor/jsonRpc/JsonRpcClient.js.map +1 -1
- package/dist/JsExecutor/jsonRpc/JsonRpcServer.d.ts +1 -0
- package/dist/JsExecutor/jsonRpc/JsonRpcServer.d.ts.map +1 -0
- package/dist/JsExecutor/jsonRpc/JsonRpcServer.js.map +1 -1
- package/dist/JsExecutor/jsonRpc/index.d.ts +1 -0
- package/dist/JsExecutor/jsonRpc/index.d.ts.map +1 -0
- package/dist/JsExecutor/jsonRpc/index.js.map +1 -1
- package/dist/JsExecutor/jsonRpc/types.d.ts +1 -0
- package/dist/JsExecutor/jsonRpc/types.d.ts.map +1 -0
- package/dist/JsExecutor/jsonRpc/types.js.map +1 -1
- package/dist/JsExecutor/transport/Transport.d.ts +1 -0
- package/dist/JsExecutor/transport/Transport.d.ts.map +1 -0
- package/dist/JsExecutor/transport/Transport.js.map +1 -1
- package/dist/JsExecutor/transport/base/BaseTransport.d.ts +1 -0
- package/dist/JsExecutor/transport/base/BaseTransport.d.ts.map +1 -0
- package/dist/JsExecutor/transport/base/BaseTransport.js.map +1 -1
- package/dist/JsExecutor/transport/index.d.ts +1 -0
- package/dist/JsExecutor/transport/index.d.ts.map +1 -0
- package/dist/JsExecutor/transport/index.js.map +1 -1
- package/dist/JsExecutor/transport/process/ProcessManager.d.ts +1 -0
- package/dist/JsExecutor/transport/process/ProcessManager.d.ts.map +1 -0
- package/dist/JsExecutor/transport/process/ProcessManager.js.map +1 -1
- package/dist/JsExecutor/transport/stdio/ChildStdioTransport.d.ts +1 -0
- package/dist/JsExecutor/transport/stdio/ChildStdioTransport.d.ts.map +1 -0
- package/dist/JsExecutor/transport/stdio/ChildStdioTransport.js.map +1 -1
- package/dist/JsExecutor/transport/stdio/ParentStdioTransport.d.ts +1 -0
- package/dist/JsExecutor/transport/stdio/ParentStdioTransport.d.ts.map +1 -0
- package/dist/JsExecutor/transport/stdio/ParentStdioTransport.js.map +1 -1
- package/dist/JsExecutor/transport/utils/MessageUtils.d.ts +1 -0
- package/dist/JsExecutor/transport/utils/MessageUtils.d.ts.map +1 -0
- package/dist/JsExecutor/transport/utils/MessageUtils.js.map +1 -1
- package/dist/JsExecutor/transport/utils/PollingUtils.d.ts +1 -0
- package/dist/JsExecutor/transport/utils/PollingUtils.d.ts.map +1 -0
- package/dist/JsExecutor/transport/utils/PollingUtils.js.map +1 -1
- package/dist/JsExecutor/types.d.ts +1 -0
- package/dist/JsExecutor/types.d.ts.map +1 -0
- package/dist/JsExecutor/types.js.map +1 -1
- package/dist/SklEngine.d.ts +1 -0
- package/dist/SklEngine.d.ts.map +1 -0
- package/dist/SklEngine.js.map +1 -1
- package/dist/SklEngineOptions.d.ts +1 -0
- package/dist/SklEngineOptions.d.ts.map +1 -0
- package/dist/SklEngineOptions.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/customCapabilities.d.ts +1 -0
- package/dist/customCapabilities.d.ts.map +1 -0
- package/dist/customCapabilities.js.map +1 -1
- package/dist/examples/customCapabilitiesExample.d.ts +1 -0
- package/dist/examples/customCapabilitiesExample.d.ts.map +1 -0
- package/dist/examples/customCapabilitiesExample.js.map +1 -1
- package/dist/hooks/globalHooks.d.ts +1 -0
- package/dist/hooks/globalHooks.d.ts.map +1 -0
- package/dist/hooks/globalHooks.js.map +1 -1
- package/dist/hooks/types.d.ts +1 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js.map +1 -1
- package/dist/mapping/Mapper.d.ts +1 -0
- package/dist/mapping/Mapper.d.ts.map +1 -0
- package/dist/mapping/Mapper.js.map +1 -1
- package/dist/storage/FindOperator.d.ts +1 -0
- package/dist/storage/FindOperator.d.ts.map +1 -0
- package/dist/storage/FindOperator.js.map +1 -1
- package/dist/storage/FindOptionsTypes.d.ts +1 -0
- package/dist/storage/FindOptionsTypes.d.ts.map +1 -0
- package/dist/storage/FindOptionsTypes.js.map +1 -1
- package/dist/storage/GroupOptionTypes.d.ts +1 -0
- package/dist/storage/GroupOptionTypes.d.ts.map +1 -0
- package/dist/storage/GroupOptionTypes.js.map +1 -1
- package/dist/storage/operator/And.d.ts +1 -0
- package/dist/storage/operator/And.d.ts.map +1 -0
- package/dist/storage/operator/And.js.map +1 -1
- package/dist/storage/operator/Contains.d.ts +1 -0
- package/dist/storage/operator/Contains.d.ts.map +1 -0
- package/dist/storage/operator/Contains.js.map +1 -1
- package/dist/storage/operator/Equal.d.ts +1 -0
- package/dist/storage/operator/Equal.d.ts.map +1 -0
- package/dist/storage/operator/Equal.js.map +1 -1
- package/dist/storage/operator/Exists.d.ts +1 -0
- package/dist/storage/operator/Exists.d.ts.map +1 -0
- package/dist/storage/operator/Exists.js.map +1 -1
- package/dist/storage/operator/GreaterThan.d.ts +1 -0
- package/dist/storage/operator/GreaterThan.d.ts.map +1 -0
- package/dist/storage/operator/GreaterThan.js.map +1 -1
- package/dist/storage/operator/GreaterThanOrEqual.d.ts +1 -0
- package/dist/storage/operator/GreaterThanOrEqual.d.ts.map +1 -0
- package/dist/storage/operator/GreaterThanOrEqual.js.map +1 -1
- package/dist/storage/operator/In.d.ts +1 -0
- package/dist/storage/operator/In.d.ts.map +1 -0
- package/dist/storage/operator/In.js.map +1 -1
- package/dist/storage/operator/Inverse.d.ts +1 -0
- package/dist/storage/operator/Inverse.d.ts.map +1 -0
- package/dist/storage/operator/Inverse.js.map +1 -1
- package/dist/storage/operator/InversePath.d.ts +1 -0
- package/dist/storage/operator/InversePath.d.ts.map +1 -0
- package/dist/storage/operator/InversePath.js.map +1 -1
- package/dist/storage/operator/InverseRelation.d.ts +1 -0
- package/dist/storage/operator/InverseRelation.d.ts.map +1 -0
- package/dist/storage/operator/InverseRelation.js.map +1 -1
- package/dist/storage/operator/InverseRelationOrder.d.ts +1 -0
- package/dist/storage/operator/InverseRelationOrder.d.ts.map +1 -0
- package/dist/storage/operator/InverseRelationOrder.js.map +1 -1
- package/dist/storage/operator/LessThan.d.ts +1 -0
- package/dist/storage/operator/LessThan.d.ts.map +1 -0
- package/dist/storage/operator/LessThan.js.map +1 -1
- package/dist/storage/operator/LessThanOrEqual.d.ts +1 -0
- package/dist/storage/operator/LessThanOrEqual.d.ts.map +1 -0
- package/dist/storage/operator/LessThanOrEqual.js.map +1 -1
- package/dist/storage/operator/Not.d.ts +1 -0
- package/dist/storage/operator/Not.d.ts.map +1 -0
- package/dist/storage/operator/Not.js.map +1 -1
- package/dist/storage/operator/OneOrMorePath.d.ts +1 -0
- package/dist/storage/operator/OneOrMorePath.d.ts.map +1 -0
- package/dist/storage/operator/OneOrMorePath.js.map +1 -1
- package/dist/storage/operator/Sequence.d.ts +1 -0
- package/dist/storage/operator/Sequence.d.ts.map +1 -0
- package/dist/storage/operator/Sequence.js.map +1 -1
- package/dist/storage/operator/SequencePath.d.ts +1 -0
- package/dist/storage/operator/SequencePath.d.ts.map +1 -0
- package/dist/storage/operator/SequencePath.js.map +1 -1
- package/dist/storage/operator/ZeroOrMorePath.d.ts +1 -0
- package/dist/storage/operator/ZeroOrMorePath.d.ts.map +1 -0
- package/dist/storage/operator/ZeroOrMorePath.js.map +1 -1
- package/dist/storage/query-adapter/QueryAdapter.d.ts +1 -0
- package/dist/storage/query-adapter/QueryAdapter.d.ts.map +1 -0
- package/dist/storage/query-adapter/QueryAdapter.js.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.js +28 -4
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapter.js.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapterOptions.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapterOptions.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/SparqlQueryAdapterOptions.js.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.js +7 -21
- package/dist/storage/query-adapter/sparql/SparqlQueryBuilder.js.map +1 -1
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/SparqlUpdateBuilder.js.map +1 -1
- package/dist/storage/query-adapter/sparql/VariableGenerator.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/VariableGenerator.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/VariableGenerator.js.map +1 -1
- package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.js.map +1 -1
- package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.js.map +1 -1
- package/dist/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.d.ts +1 -0
- package/dist/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.d.ts.map +1 -0
- package/dist/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.js.map +1 -1
- package/dist/util/PerformanceLogger.d.ts +1 -0
- package/dist/util/PerformanceLogger.d.ts.map +1 -0
- package/dist/util/PerformanceLogger.js.map +1 -1
- package/dist/util/SparqlUtil.d.ts +1 -0
- package/dist/util/SparqlUtil.d.ts.map +1 -0
- package/dist/util/SparqlUtil.js.map +1 -1
- package/dist/util/TripleUtil.d.ts +1 -0
- package/dist/util/TripleUtil.d.ts.map +1 -0
- package/dist/util/TripleUtil.js +10 -0
- package/dist/util/TripleUtil.js.map +1 -1
- package/dist/util/Types.d.ts +1 -0
- package/dist/util/Types.d.ts.map +1 -0
- package/dist/util/Types.js.map +1 -1
- package/dist/util/Util.d.ts +1 -0
- package/dist/util/Util.d.ts.map +1 -0
- package/dist/util/Util.js.map +1 -1
- package/dist/util/Vocabularies/Shared.d.ts +1 -0
- package/dist/util/Vocabularies/Shared.d.ts.map +1 -0
- package/dist/util/Vocabularies/Shared.js.map +1 -1
- package/dist/util/Vocabularies/helper.d.ts +1 -0
- package/dist/util/Vocabularies/helper.d.ts.map +1 -0
- package/dist/util/Vocabularies/helper.js.map +1 -1
- package/dist/util/Vocabularies/index.d.ts +1 -0
- package/dist/util/Vocabularies/index.d.ts.map +1 -0
- package/dist/util/Vocabularies/index.js.map +1 -1
- package/dist/util/safeJsonStringify.d.ts +1 -0
- package/dist/util/safeJsonStringify.d.ts.map +1 -0
- package/dist/util/safeJsonStringify.js.map +1 -1
- package/package.json +6 -3
- package/src/JsExecutor/PermissionBuilder.ts +60 -0
- package/src/JsExecutor/constants.ts +27 -0
- package/src/JsExecutor/denoUtils.ts +20 -0
- package/src/JsExecutor/errors.ts +63 -0
- package/src/JsExecutor/examples/basic/index.ts +54 -0
- package/src/JsExecutor/examples/basic/process.ts +39 -0
- package/src/JsExecutor/examples/jsExecutor/README.md +3 -0
- package/src/JsExecutor/examples/jsExecutor/index.ts +50 -0
- package/src/JsExecutor/examples/jsExecutor/process.ts +79 -0
- package/src/JsExecutor/index.ts +19 -0
- package/src/JsExecutor/jsExecutor.ts +194 -0
- package/src/JsExecutor/jsonRpc/JsonRpcClient.ts +422 -0
- package/src/JsExecutor/jsonRpc/JsonRpcServer.ts +454 -0
- package/src/JsExecutor/jsonRpc/index.ts +4 -0
- package/src/JsExecutor/jsonRpc/types.ts +231 -0
- package/src/JsExecutor/transport/README.md +67 -0
- package/src/JsExecutor/transport/Transport.ts +106 -0
- package/src/JsExecutor/transport/base/BaseTransport.ts +83 -0
- package/src/JsExecutor/transport/index.ts +56 -0
- package/src/JsExecutor/transport/process/ProcessManager.ts +281 -0
- package/src/JsExecutor/transport/stdio/ChildStdioTransport.ts +251 -0
- package/src/JsExecutor/transport/stdio/ParentStdioTransport.ts +308 -0
- package/src/JsExecutor/transport/utils/MessageUtils.ts +139 -0
- package/src/JsExecutor/transport/utils/PollingUtils.ts +114 -0
- package/src/JsExecutor/types.ts +130 -0
- package/src/SklEngine.ts +1828 -0
- package/src/SklEngineOptions.ts +28 -0
- package/src/constants.ts +120 -0
- package/src/customCapabilities.ts +65 -0
- package/src/examples/customCapabilitiesExample.ts +77 -0
- package/src/hooks/globalHooks.ts +238 -0
- package/src/hooks/types.ts +7 -0
- package/src/index.ts +45 -0
- package/src/logger.ts +144 -0
- package/src/mapping/Mapper.ts +52 -0
- package/src/storage/FindOperator.ts +55 -0
- package/src/storage/FindOptionsTypes.ts +107 -0
- package/src/storage/GroupOptionTypes.ts +32 -0
- package/src/storage/operator/And.ts +10 -0
- package/src/storage/operator/Contains.ts +9 -0
- package/src/storage/operator/Equal.ts +13 -0
- package/src/storage/operator/Exists.ts +6 -0
- package/src/storage/operator/GreaterThan.ts +12 -0
- package/src/storage/operator/GreaterThanOrEqual.ts +12 -0
- package/src/storage/operator/In.ts +12 -0
- package/src/storage/operator/Inverse.ts +11 -0
- package/src/storage/operator/InversePath.ts +17 -0
- package/src/storage/operator/InverseRelation.ts +18 -0
- package/src/storage/operator/InverseRelationOrder.ts +17 -0
- package/src/storage/operator/LessThan.ts +12 -0
- package/src/storage/operator/LessThanOrEqual.ts +12 -0
- package/src/storage/operator/Not.ts +11 -0
- package/src/storage/operator/OneOrMorePath.ts +17 -0
- package/src/storage/operator/Sequence.ts +11 -0
- package/src/storage/operator/SequencePath.ts +17 -0
- package/src/storage/operator/ZeroOrMorePath.ts +17 -0
- package/src/storage/query-adapter/QueryAdapter.ts +110 -0
- package/src/storage/query-adapter/sparql/SparqlQueryAdapter.ts +400 -0
- package/src/storage/query-adapter/sparql/SparqlQueryAdapterOptions.ts +38 -0
- package/src/storage/query-adapter/sparql/SparqlQueryBuilder.ts +1524 -0
- package/src/storage/query-adapter/sparql/SparqlUpdateBuilder.ts +347 -0
- package/src/storage/query-adapter/sparql/VariableGenerator.ts +8 -0
- package/src/storage/query-adapter/sparql/query-executor/InMemorySparqlQueryExecutor.ts +135 -0
- package/src/storage/query-adapter/sparql/query-executor/SparqlEndpointQueryExecutor.ts +146 -0
- package/src/storage/query-adapter/sparql/query-executor/SparqlQueryExecutor.ts +51 -0
- package/src/util/PerformanceLogger.ts +286 -0
- package/src/util/SparqlUtil.ts +516 -0
- package/src/util/TripleUtil.ts +412 -0
- package/src/util/Types.ts +399 -0
- package/src/util/Util.ts +116 -0
- package/src/util/Vocabularies/Shared.ts +99 -0
- package/src/util/Vocabularies/helper.ts +14 -0
- package/src/util/Vocabularies/index.ts +108 -0
- package/src/util/safeJsonStringify.ts +19 -0
- package/dist/JsExecutor/transport/StdioTransport.d.ts +0 -0
- package/dist/JsExecutor/transport/StdioTransport.js +0 -641
- package/dist/JsExecutor/transport/StdioTransport.js.map +0 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/method-signature-style */
|
|
2
|
+
import type { GraphObject } from 'jsonld';
|
|
3
|
+
import type { Frame } from 'jsonld/jsonld-spec';
|
|
4
|
+
import type { Entity } from '../../util/Types';
|
|
5
|
+
import type {
|
|
6
|
+
FindAllOptions,
|
|
7
|
+
FindCountOptions,
|
|
8
|
+
FindExistsOptions,
|
|
9
|
+
FindOneOptions,
|
|
10
|
+
FindOptionsWhere
|
|
11
|
+
} from '../FindOptionsTypes';
|
|
12
|
+
import type { GroupByOptions, GroupByResponse } from '../GroupOptionTypes';
|
|
13
|
+
|
|
14
|
+
export type RawQueryResult = Record<string, number | boolean | string>;
|
|
15
|
+
|
|
16
|
+
export interface UpdateOptions {
|
|
17
|
+
validate?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Adapts CRUD operations to a specific persistence layer.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export interface QueryAdapter {
|
|
25
|
+
/**
|
|
26
|
+
* Performs a raw query for data matching the query.
|
|
27
|
+
*/
|
|
28
|
+
executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Performs a raw query for entities matching the query. The query must be a CONSTRUCT query.
|
|
31
|
+
*/
|
|
32
|
+
executeRawConstructQuery(query: string, frame?: Frame): Promise<GraphObject>;
|
|
33
|
+
/**
|
|
34
|
+
* Performs a raw query for data matching the query.
|
|
35
|
+
*/
|
|
36
|
+
executeRawUpdate(query: string): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Finds the first entity by a given find options.
|
|
39
|
+
* If entity was not found in the database it returns null.
|
|
40
|
+
*/
|
|
41
|
+
find(options?: FindOneOptions): Promise<Entity | null>;
|
|
42
|
+
/**
|
|
43
|
+
* Finds the first entity that matches given where condition.
|
|
44
|
+
* If entity was not found in the database it returns null.
|
|
45
|
+
*/
|
|
46
|
+
findBy(where: FindOptionsWhere): Promise<Entity | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Finds entities that match given find options.
|
|
49
|
+
*/
|
|
50
|
+
findAll(options?: FindAllOptions): Promise<Entity[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Finds entities that match given where condition.
|
|
53
|
+
*/
|
|
54
|
+
findAllBy(where: FindOptionsWhere): Promise<Entity[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Determines if an entity matching the given where condition exists in the database.
|
|
57
|
+
*/
|
|
58
|
+
exists(options?: FindExistsOptions): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Returns a count of entities matching the given where condition in the database.
|
|
61
|
+
*/
|
|
62
|
+
count(options?: FindCountOptions): Promise<number>;
|
|
63
|
+
/**
|
|
64
|
+
* Saves a given entity in the database.
|
|
65
|
+
* If entity does not exist in the database then inserts, otherwise updates.
|
|
66
|
+
*/
|
|
67
|
+
save(entity: Entity): Promise<Entity>;
|
|
68
|
+
/**
|
|
69
|
+
* Saves all given entities in the database.
|
|
70
|
+
* If entities do not exist in the database then inserts, otherwise updates.
|
|
71
|
+
*/
|
|
72
|
+
save(entities: Entity[]): Promise<Entity[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Updates an entity partially.
|
|
75
|
+
*/
|
|
76
|
+
update(id: string, attributes: Partial<Entity>): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Updates multiple entities partially.
|
|
79
|
+
*/
|
|
80
|
+
update(ids: string[], attributes: Partial<Entity>): Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Removes an entity from the database by id.
|
|
83
|
+
*/
|
|
84
|
+
delete(id: string): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Removes multiple entities from the database by id.
|
|
87
|
+
*/
|
|
88
|
+
delete(ids: string[]): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Removes a given entity from the database.
|
|
91
|
+
*/
|
|
92
|
+
destroy(entity: Entity): Promise<Entity>;
|
|
93
|
+
/**
|
|
94
|
+
* Removes given entities from the database.
|
|
95
|
+
*/
|
|
96
|
+
destroy(entities: Entity[]): Promise<Entity[]>;
|
|
97
|
+
/**
|
|
98
|
+
* Deletes entities by a given criteria.
|
|
99
|
+
* Unlike destroy method executes a primitive operation without cascades, relations and other operations included.
|
|
100
|
+
*/
|
|
101
|
+
// delete(criteria: UpdateOrDeleteCriteria): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Removes all entities from the database.
|
|
104
|
+
*/
|
|
105
|
+
destroyAll(): Promise<void>;
|
|
106
|
+
/**
|
|
107
|
+
* Groups entities by a given options.
|
|
108
|
+
*/
|
|
109
|
+
groupBy(options: GroupByOptions): Promise<GroupByResponse>;
|
|
110
|
+
}
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
/* eslint-disable capitalized-comments */
|
|
2
|
+
|
|
3
|
+
/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */
|
|
4
|
+
/* eslint-disable indent */
|
|
5
|
+
/* eslint-disable @typescript-eslint/naming-convention */
|
|
6
|
+
import type { OrArray } from '@comake/rmlmapper-js';
|
|
7
|
+
import type { GraphObject, NodeObject } from 'jsonld';
|
|
8
|
+
import type { Frame } from 'jsonld/jsonld-spec';
|
|
9
|
+
import type {
|
|
10
|
+
ConstructQuery,
|
|
11
|
+
Pattern,
|
|
12
|
+
Triple
|
|
13
|
+
} from 'sparqljs';
|
|
14
|
+
import { Logger } from '../../../logger';
|
|
15
|
+
import { PerformanceLogger } from '../../../util/PerformanceLogger';
|
|
16
|
+
import {
|
|
17
|
+
createSparqlBasicGraphPattern, createSparqlCountSelectQuery, createSparqlGraphPattern,
|
|
18
|
+
createSparqlSelectGroup,
|
|
19
|
+
createSparqlSelectQuery,
|
|
20
|
+
createValuesPatternsForVariables,
|
|
21
|
+
creteSparqlAskQuery, entityGraphTriple, entityVariable, getEntityVariableValuesFromVariables,
|
|
22
|
+
getRdfTypeVariableValuesFromVariables,
|
|
23
|
+
groupSelectQueryResultsByKey,
|
|
24
|
+
rdfTypeNamedNode,
|
|
25
|
+
rdfTypeVariable,
|
|
26
|
+
selectQueryResultsAsJSValues
|
|
27
|
+
} from '../../../util/SparqlUtil';
|
|
28
|
+
import {
|
|
29
|
+
triplesToJsonld,
|
|
30
|
+
triplesToJsonldWithFrame
|
|
31
|
+
} from '../../../util/TripleUtil';
|
|
32
|
+
import type { Entity } from '../../../util/Types';
|
|
33
|
+
import type {
|
|
34
|
+
FindAllOptions, FindCountOptions,
|
|
35
|
+
FindExistsOptions, FindOneOptions, FindOptionsWhere
|
|
36
|
+
} from '../../FindOptionsTypes';
|
|
37
|
+
import type { GroupByOptions, GroupByResponse, GroupResult } from '../../GroupOptionTypes';
|
|
38
|
+
import type { QueryAdapter, RawQueryResult } from '../QueryAdapter';
|
|
39
|
+
import { InMemorySparqlQueryExecutor } from './query-executor/InMemorySparqlQueryExecutor';
|
|
40
|
+
import { SparqlEndpointQueryExecutor } from './query-executor/SparqlEndpointQueryExecutor';
|
|
41
|
+
import type { QueryExecutor } from './query-executor/SparqlQueryExecutor';
|
|
42
|
+
import type { SparqlQueryAdapterOptions } from './SparqlQueryAdapterOptions';
|
|
43
|
+
import { SparqlQueryBuilder } from './SparqlQueryBuilder';
|
|
44
|
+
import { SparqlUpdateBuilder } from './SparqlUpdateBuilder';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
|
|
48
|
+
*/
|
|
49
|
+
export class SparqlQueryAdapter implements QueryAdapter {
|
|
50
|
+
protected readonly queryExecutor: QueryExecutor;
|
|
51
|
+
private readonly setTimestamps: boolean;
|
|
52
|
+
private readonly logger: Logger;
|
|
53
|
+
|
|
54
|
+
public constructor(options: SparqlQueryAdapterOptions) {
|
|
55
|
+
this.setTimestamps = options.setTimestamps ?? false;
|
|
56
|
+
switch (options.type) {
|
|
57
|
+
case 'memory':
|
|
58
|
+
this.queryExecutor = new InMemorySparqlQueryExecutor();
|
|
59
|
+
break;
|
|
60
|
+
case 'sparql':
|
|
61
|
+
this.queryExecutor = new SparqlEndpointQueryExecutor(options);
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
throw new Error('No schema source found in setSchema args.');
|
|
65
|
+
}
|
|
66
|
+
this.logger = Logger.getInstance();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public async executeRawQuery<T extends RawQueryResult>(query: string): Promise<T[]> {
|
|
70
|
+
const response =
|
|
71
|
+
await this.queryExecutor.executeSparqlSelectAndGetDataRaw(query);
|
|
72
|
+
if (response.length === 0) {
|
|
73
|
+
return [] as T[];
|
|
74
|
+
}
|
|
75
|
+
return selectQueryResultsAsJSValues<T>(response);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public async executeRawConstructQuery(query: string, frame?: Frame): Promise<GraphObject> {
|
|
79
|
+
const response = await this.queryExecutor.executeSparqlConstructAndGetDataRaw(query);
|
|
80
|
+
if (response.length === 0) {
|
|
81
|
+
return { '@graph': []};
|
|
82
|
+
}
|
|
83
|
+
return await triplesToJsonldWithFrame(response, frame);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public async executeRawUpdate(
|
|
87
|
+
query: string
|
|
88
|
+
): Promise<void> {
|
|
89
|
+
await this.queryExecutor.executeRawSparqlUpdate(query);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public async find(options?: FindOneOptions): Promise<Entity | null> {
|
|
93
|
+
return PerformanceLogger.withSpan('Adapter.find', async() => {
|
|
94
|
+
const jsonld = await this.findAllAsJsonLd({ ...options, limit: 1 });
|
|
95
|
+
if (Array.isArray(jsonld) && !options?.skipFraming) {
|
|
96
|
+
if (jsonld.length === 0) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
if (jsonld.length === 1) {
|
|
100
|
+
return jsonld[0] as Entity;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return jsonld as Entity;
|
|
104
|
+
}, { options });
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public async findBy(where: FindOptionsWhere): Promise<Entity | null> {
|
|
108
|
+
return PerformanceLogger.withSpan('Adapter.findBy', async() => this.find({ where }), { where });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public async findAll(options?: FindAllOptions): Promise<Entity[]> {
|
|
112
|
+
return PerformanceLogger.withSpan('Adapter.findAll', async() => {
|
|
113
|
+
const jsonld = await this.findAllAsJsonLd(options);
|
|
114
|
+
if (Array.isArray(jsonld)) {
|
|
115
|
+
return jsonld as Entity[];
|
|
116
|
+
}
|
|
117
|
+
return [ jsonld ] as Entity[];
|
|
118
|
+
}, { options });
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private async findAllAsJsonLd(options?: FindAllOptions): Promise<OrArray<NodeObject>> {
|
|
122
|
+
const queryBuilder = new SparqlQueryBuilder();
|
|
123
|
+
const { where, selectionTriples, entityOrder, rdfTypes } = await this.buildFindAllQueryData(queryBuilder, options);
|
|
124
|
+
if (entityOrder && entityOrder.length === 0) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
|
|
128
|
+
const query = queryBuilder.buildConstructFromEntitySelectQuery(
|
|
129
|
+
where,
|
|
130
|
+
selectionTriples,
|
|
131
|
+
options?.select,
|
|
132
|
+
queryData.selectVariables
|
|
133
|
+
);
|
|
134
|
+
return await this.executeEntitySelectQuery(query, options, entityOrder, rdfTypes);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
private async buildFindAllQueryData(
|
|
138
|
+
queryBuilder: SparqlQueryBuilder,
|
|
139
|
+
options?: FindAllOptions
|
|
140
|
+
): Promise<{ where: Pattern[]; selectionTriples: Triple[]; entityOrder?: string[], rdfTypes?: string[] }> {
|
|
141
|
+
const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
|
|
142
|
+
const selectQueryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, {
|
|
143
|
+
...options,
|
|
144
|
+
relations: undefined
|
|
145
|
+
});
|
|
146
|
+
let rdfTypes: string[] | undefined;
|
|
147
|
+
const wherePatterns: Pattern[] = [ ...selectQueryData.where, ...selectQueryData.graphWhere ];
|
|
148
|
+
wherePatterns.push({
|
|
149
|
+
type: 'bgp',
|
|
150
|
+
triples: [
|
|
151
|
+
{
|
|
152
|
+
subject: entityVariable,
|
|
153
|
+
predicate: rdfTypeNamedNode,
|
|
154
|
+
object: rdfTypeVariable
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
});
|
|
158
|
+
const entitySelectQuery = selectQueryData.where.length > 0
|
|
159
|
+
? createSparqlSelectQuery(
|
|
160
|
+
[
|
|
161
|
+
options?.entitySelectVariable ?? entityVariable,
|
|
162
|
+
rdfTypeVariable,
|
|
163
|
+
...selectQueryData.selectVariables?.map(({ variable, expression }) => {
|
|
164
|
+
if (!expression) return variable;
|
|
165
|
+
return {
|
|
166
|
+
variable,
|
|
167
|
+
expression
|
|
168
|
+
};
|
|
169
|
+
}) ?? []
|
|
170
|
+
],
|
|
171
|
+
wherePatterns,
|
|
172
|
+
selectQueryData.orders,
|
|
173
|
+
selectQueryData.group ?? options?.group,
|
|
174
|
+
options?.limit,
|
|
175
|
+
options?.offset
|
|
176
|
+
)
|
|
177
|
+
: undefined;
|
|
178
|
+
let entityOrder: string[] | undefined;
|
|
179
|
+
/* If relations are present add them to where */
|
|
180
|
+
if ((queryData?.relationsQueryData?.unionPatterns ?? []).length > 0) {
|
|
181
|
+
queryData?.relationsQueryData?.unionPatterns.push(
|
|
182
|
+
createSparqlGraphPattern(entityVariable, [ createSparqlBasicGraphPattern([ entityGraphTriple ]) ])
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
if (queryData.orders.length > 0 && options?.limit !== 1 && entitySelectQuery) {
|
|
186
|
+
const entitySelectResponse =
|
|
187
|
+
await this.queryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
|
|
188
|
+
const valuesByVariable = groupSelectQueryResultsByKey(entitySelectResponse);
|
|
189
|
+
entityOrder = getEntityVariableValuesFromVariables(valuesByVariable);
|
|
190
|
+
if (entityOrder.length === 0) {
|
|
191
|
+
return {
|
|
192
|
+
where: queryData.where,
|
|
193
|
+
selectionTriples: queryData.graphSelectionTriples,
|
|
194
|
+
entityOrder: []
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
const variableValueFilters = createValuesPatternsForVariables({
|
|
198
|
+
[entityVariable.value]: valuesByVariable[entityVariable.value]
|
|
199
|
+
});
|
|
200
|
+
queryData.graphWhere = [ ...variableValueFilters, ...queryData.graphWhere ];
|
|
201
|
+
} else if (entitySelectQuery) {
|
|
202
|
+
// We need entity IDs for framing when:
|
|
203
|
+
// 1. There are relations (to distinguish root entities from related entities)
|
|
204
|
+
// 2. There's a type constraint (to handle subclass matching where SPARQL finds subclasses but JSON-LD needs exact types)
|
|
205
|
+
const hasRelations = (queryData?.relationsQueryData?.unionPatterns ?? []).length > 0;
|
|
206
|
+
const hasTypeConstraint = options?.where?.type !== undefined;
|
|
207
|
+
|
|
208
|
+
if ((hasRelations || hasTypeConstraint) && queryData.orders.length > 0) {
|
|
209
|
+
const entitySelectResponse =
|
|
210
|
+
await this.queryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
|
|
211
|
+
const valuesByVariable = groupSelectQueryResultsByKey(entitySelectResponse);
|
|
212
|
+
entityOrder = queryData.orders.length > 0 ? getEntityVariableValuesFromVariables(valuesByVariable) : [];
|
|
213
|
+
if (entityOrder.length === 0) {
|
|
214
|
+
return {
|
|
215
|
+
where: queryData.where,
|
|
216
|
+
selectionTriples: queryData.graphSelectionTriples,
|
|
217
|
+
entityOrder: []
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
else if (hasRelations || hasTypeConstraint) {
|
|
222
|
+
const entitySelectResponse = await this.queryExecutor.executeSparqlSelectAndGetData(entitySelectQuery);
|
|
223
|
+
const groupedResults = groupSelectQueryResultsByKey(entitySelectResponse);
|
|
224
|
+
const valuesByVariable = getRdfTypeVariableValuesFromVariables(groupedResults);
|
|
225
|
+
rdfTypes = [...new Set(valuesByVariable)];
|
|
226
|
+
// Also get entity IDs for framing to distinguish root entities from related ones
|
|
227
|
+
// entityOrder = getEntityVariableValuesFromVariables(groupedResults);
|
|
228
|
+
// if (entityOrder.length === 0) {
|
|
229
|
+
// return {
|
|
230
|
+
// where: queryData.where,
|
|
231
|
+
// selectionTriples: queryData.graphSelectionTriples,
|
|
232
|
+
// entityOrder: [],
|
|
233
|
+
// rdfTypes
|
|
234
|
+
// };
|
|
235
|
+
// }
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Always add the select group query to the CONSTRUCT
|
|
239
|
+
const entitySelectGroupQuery = createSparqlSelectGroup([ entitySelectQuery ]);
|
|
240
|
+
queryData.graphWhere.unshift(entitySelectGroupQuery);
|
|
241
|
+
// queryData.graphWhere = [ ...queryData.where, ...queryData.graphWhere ];
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
where: queryData.graphWhere,
|
|
245
|
+
selectionTriples: queryData.graphSelectionTriples,
|
|
246
|
+
entityOrder,
|
|
247
|
+
rdfTypes
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private async executeEntitySelectQuery(
|
|
252
|
+
query: ConstructQuery,
|
|
253
|
+
options?: FindAllOptions,
|
|
254
|
+
entityOrder?: string[],
|
|
255
|
+
rdfTypes?: string[]
|
|
256
|
+
): Promise<OrArray<NodeObject>> {
|
|
257
|
+
const responseTriples = await this.queryExecutor.executeSparqlSelectAndGetData(query);
|
|
258
|
+
return await triplesToJsonld(
|
|
259
|
+
responseTriples,
|
|
260
|
+
options?.skipFraming,
|
|
261
|
+
options?.relations,
|
|
262
|
+
options?.where,
|
|
263
|
+
entityOrder,
|
|
264
|
+
rdfTypes
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
public async findAllBy(where: FindOptionsWhere): Promise<Entity[]> {
|
|
269
|
+
return PerformanceLogger.withSpan('Adapter.findAllBy', async() => this.findAll({ where }), { where });
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
public async exists(options: FindExistsOptions): Promise<boolean> {
|
|
273
|
+
return PerformanceLogger.withSpan('Adapter.exists', async() => {
|
|
274
|
+
const queryBuilder = new SparqlQueryBuilder();
|
|
275
|
+
const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
|
|
276
|
+
const values = queryData.graphWhere.filter((pattern): boolean => pattern.type === 'values');
|
|
277
|
+
const query = creteSparqlAskQuery([ ...values, ...queryData.where ]);
|
|
278
|
+
return await this.queryExecutor.executeAskQueryAndGetResponse(query);
|
|
279
|
+
}, { options });
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
public async count(options: FindCountOptions): Promise<number> {
|
|
283
|
+
return PerformanceLogger.withSpan('Adapter.count', async() => {
|
|
284
|
+
const queryBuilder = new SparqlQueryBuilder();
|
|
285
|
+
const queryData = queryBuilder.buildEntitySelectPatternsFromOptions(entityVariable, options);
|
|
286
|
+
const values = queryData.graphWhere.filter((pattern): boolean => pattern.type === 'values');
|
|
287
|
+
const query = createSparqlCountSelectQuery(
|
|
288
|
+
entityVariable,
|
|
289
|
+
[ ...values, ...queryData.where ],
|
|
290
|
+
queryData.orders,
|
|
291
|
+
options?.offset
|
|
292
|
+
);
|
|
293
|
+
return await this.queryExecutor.executeSelectCountAndGetResponse(query);
|
|
294
|
+
}, { options });
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
public async save(entity: Entity): Promise<Entity>;
|
|
298
|
+
public async save(entities: Entity[]): Promise<Entity[]>;
|
|
299
|
+
public async save(entityOrEntities: Entity | Entity[]): Promise<Entity | Entity[]> {
|
|
300
|
+
return PerformanceLogger.withSpan('Adapter.save', async() => {
|
|
301
|
+
const queryBuilder = new SparqlUpdateBuilder({ setTimestamps: this.setTimestamps });
|
|
302
|
+
const query = queryBuilder.buildUpdate(entityOrEntities);
|
|
303
|
+
await this.queryExecutor.executeSparqlUpdate(query);
|
|
304
|
+
return entityOrEntities;
|
|
305
|
+
}, { entityCount: Array.isArray(entityOrEntities) ? entityOrEntities.length : 1 });
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
public async groupBy(options: GroupByOptions): Promise<GroupByResponse> {
|
|
309
|
+
return PerformanceLogger.withSpan('Adapter.groupBy', async() => {
|
|
310
|
+
const queryBuilder = new SparqlQueryBuilder();
|
|
311
|
+
const { query: selectQuery, variableMapping } = await queryBuilder.buildGroupByQuery(options);
|
|
312
|
+
const results = await this.queryExecutor.executeSparqlSelectAndGetData(
|
|
313
|
+
selectQuery
|
|
314
|
+
);
|
|
315
|
+
|
|
316
|
+
// Create reverse mapping from path to variable name
|
|
317
|
+
const reverseMapping = Object.entries(variableMapping).reduce<Record<string, string>>((acc, [ varName, path ]) => {
|
|
318
|
+
acc[path] = varName;
|
|
319
|
+
return acc;
|
|
320
|
+
}, {});
|
|
321
|
+
|
|
322
|
+
// Transform results
|
|
323
|
+
const groupResults: GroupResult[] = results.map(result => {
|
|
324
|
+
const group: Record<string, string | number> = {};
|
|
325
|
+
|
|
326
|
+
options.groupBy?.forEach(path => {
|
|
327
|
+
const varName = reverseMapping[path];
|
|
328
|
+
if (!varName) {
|
|
329
|
+
throw new Error(`No variable mapping found for path: ${path}`);
|
|
330
|
+
}
|
|
331
|
+
const { value } = result[varName];
|
|
332
|
+
// Try to convert to number if possible
|
|
333
|
+
group[path] = Number.isNaN(Number(value)) ? value : Number(value);
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
if (options.dateGrouping) {
|
|
337
|
+
const dateGroupVarName = reverseMapping.dateGroup;
|
|
338
|
+
group.dateGroup = result[dateGroupVarName].value;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
const countVarName = reverseMapping.count;
|
|
342
|
+
const entityIdsVarName = reverseMapping.entityIds;
|
|
343
|
+
|
|
344
|
+
return {
|
|
345
|
+
group,
|
|
346
|
+
count: Number.parseInt(result[countVarName].value, 10),
|
|
347
|
+
entityIds: result[entityIdsVarName].value.split(' ')
|
|
348
|
+
};
|
|
349
|
+
});
|
|
350
|
+
|
|
351
|
+
return {
|
|
352
|
+
results: groupResults,
|
|
353
|
+
meta: {
|
|
354
|
+
totalCount: groupResults.reduce((sum, curr) => sum + curr.count, 0),
|
|
355
|
+
dateRange: options.dateRange,
|
|
356
|
+
groupings: options.groupBy || []
|
|
357
|
+
}
|
|
358
|
+
};
|
|
359
|
+
}, { options });
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
public async update(id: string, attributes: Partial<Entity>): Promise<void>;
|
|
363
|
+
public async update(ids: string[], attributes: Partial<Entity>): Promise<void>;
|
|
364
|
+
public async update(idOrIds: string | string[], attributes: Partial<Entity>): Promise<void> {
|
|
365
|
+
return PerformanceLogger.withSpan('Adapter.update', async() => {
|
|
366
|
+
const queryBuilder = new SparqlUpdateBuilder({ setTimestamps: this.setTimestamps });
|
|
367
|
+
const query = queryBuilder.buildPartialUpdate(idOrIds, attributes);
|
|
368
|
+
await this.queryExecutor.executeSparqlUpdate(query);
|
|
369
|
+
}, { idCount: Array.isArray(idOrIds) ? idOrIds.length : 1 });
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
public async delete(id: string): Promise<void>;
|
|
373
|
+
public async delete(ids: string[]): Promise<void>;
|
|
374
|
+
public async delete(idOrIds: string | string[]): Promise<void> {
|
|
375
|
+
return PerformanceLogger.withSpan('Adapter.delete', async() => {
|
|
376
|
+
const queryBuilder = new SparqlUpdateBuilder();
|
|
377
|
+
const query = queryBuilder.buildDeleteById(idOrIds);
|
|
378
|
+
await this.queryExecutor.executeSparqlUpdate(query);
|
|
379
|
+
}, { idCount: Array.isArray(idOrIds) ? idOrIds.length : 1 });
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
public async destroy(entity: Entity): Promise<Entity>;
|
|
383
|
+
public async destroy(entities: Entity[]): Promise<Entity[]>;
|
|
384
|
+
public async destroy(entityOrEntities: Entity | Entity[]): Promise<Entity | Entity[]> {
|
|
385
|
+
return PerformanceLogger.withSpan('Adapter.destroy', async() => {
|
|
386
|
+
const queryBuilder = new SparqlUpdateBuilder();
|
|
387
|
+
const query = queryBuilder.buildDelete(entityOrEntities);
|
|
388
|
+
await this.queryExecutor.executeSparqlUpdate(query);
|
|
389
|
+
return entityOrEntities;
|
|
390
|
+
}, { entityCount: Array.isArray(entityOrEntities) ? entityOrEntities.length : 1 });
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
public async destroyAll(): Promise<void> {
|
|
394
|
+
return PerformanceLogger.withSpan('Adapter.destroyAll', async() => {
|
|
395
|
+
const queryBuilder = new SparqlUpdateBuilder();
|
|
396
|
+
const query = queryBuilder.buildDeleteAll();
|
|
397
|
+
await this.queryExecutor.executeSparqlUpdate(query);
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type QueryAdapterType = 'memory' | 'sparql';
|
|
2
|
+
|
|
3
|
+
interface BaseQueryAdapterOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Query Adapter type. This value is required.
|
|
6
|
+
*/
|
|
7
|
+
readonly type: QueryAdapterType;
|
|
8
|
+
/**
|
|
9
|
+
* Whether to set Dublic Core created and modified timestamps on saved entities. Defaults to false.
|
|
10
|
+
*/
|
|
11
|
+
readonly setTimestamps?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
interface SparqlEndpointQueryAdapterOptions extends BaseQueryAdapterOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Query Adapter type.
|
|
17
|
+
*/
|
|
18
|
+
readonly type: 'sparql';
|
|
19
|
+
/**
|
|
20
|
+
* The location of the SPARQL endpoint. This value is required.
|
|
21
|
+
*/
|
|
22
|
+
readonly endpointUrl: string;
|
|
23
|
+
/**
|
|
24
|
+
* The location of the SPARQL update endpoint. Defaults to the value of endpointUrl if not set.
|
|
25
|
+
*/
|
|
26
|
+
readonly updateUrl?: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
interface MemorySparqlQueryAdapterOptions extends BaseQueryAdapterOptions {
|
|
30
|
+
/**
|
|
31
|
+
* Query Adapter type.
|
|
32
|
+
*/
|
|
33
|
+
readonly type: 'memory';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type SparqlQueryAdapterOptions =
|
|
37
|
+
| MemorySparqlQueryAdapterOptions
|
|
38
|
+
| SparqlEndpointQueryAdapterOptions;
|