@comake/skl-js-engine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +4 -0
- package/README.md +46 -0
- package/dist/Skql.d.ts +68 -0
- package/dist/Skql.js +351 -0
- package/dist/Skql.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/mapping/Mapper.d.ts +14 -0
- package/dist/mapping/Mapper.js +64 -0
- package/dist/mapping/Mapper.js.map +1 -0
- package/dist/sklEngine.d.ts +68 -0
- package/dist/sklEngine.js +351 -0
- package/dist/sklEngine.js.map +1 -0
- package/dist/storage/AggregateOperator.d.ts +12 -0
- package/dist/storage/AggregateOperator.js +17 -0
- package/dist/storage/AggregateOperator.js.map +1 -0
- package/dist/storage/BaseQueryAdapterOptions.d.ts +19 -0
- package/dist/storage/BaseQueryAdapterOptions.js +3 -0
- package/dist/storage/BaseQueryAdapterOptions.js.map +1 -0
- package/dist/storage/FindOperator.d.ts +12 -0
- package/dist/storage/FindOperator.js +17 -0
- package/dist/storage/FindOperator.js.map +1 -0
- package/dist/storage/FindOptionsTypes.d.ts +45 -0
- package/dist/storage/FindOptionsTypes.js +3 -0
- package/dist/storage/FindOptionsTypes.js.map +1 -0
- package/dist/storage/MemoryQueryAdapter.d.ts +28 -0
- package/dist/storage/MemoryQueryAdapter.js +215 -0
- package/dist/storage/MemoryQueryAdapter.js.map +1 -0
- package/dist/storage/QueryAdapter.d.ts +74 -0
- package/dist/storage/QueryAdapter.js +3 -0
- package/dist/storage/QueryAdapter.js.map +1 -0
- package/dist/storage/SparqlQueryAdapter.d.ts +34 -0
- package/dist/storage/SparqlQueryAdapter.js +229 -0
- package/dist/storage/SparqlQueryAdapter.js.map +1 -0
- package/dist/storage/aggregate/Max.d.ts +2 -0
- package/dist/storage/aggregate/Max.js +13 -0
- package/dist/storage/aggregate/Max.js.map +1 -0
- package/dist/storage/memory/MemoryQueryAdapter.d.ts +36 -0
- package/dist/storage/memory/MemoryQueryAdapter.js +246 -0
- package/dist/storage/memory/MemoryQueryAdapter.js.map +1 -0
- package/dist/storage/memory/MemoryQueryAdapterOptions.d.ts +12 -0
- package/dist/storage/memory/MemoryQueryAdapterOptions.js +3 -0
- package/dist/storage/memory/MemoryQueryAdapterOptions.js.map +1 -0
- package/dist/storage/operator/Equal.d.ts +2 -0
- package/dist/storage/operator/Equal.js +13 -0
- package/dist/storage/operator/Equal.js.map +1 -0
- package/dist/storage/operator/GreaterThan.d.ts +2 -0
- package/dist/storage/operator/GreaterThan.js +13 -0
- package/dist/storage/operator/GreaterThan.js.map +1 -0
- package/dist/storage/operator/GreaterThanOrEqual.d.ts +2 -0
- package/dist/storage/operator/GreaterThanOrEqual.js +13 -0
- package/dist/storage/operator/GreaterThanOrEqual.js.map +1 -0
- package/dist/storage/operator/In.d.ts +2 -0
- package/dist/storage/operator/In.js +13 -0
- package/dist/storage/operator/In.js.map +1 -0
- package/dist/storage/operator/Inverse.d.ts +2 -0
- package/dist/storage/operator/Inverse.js +13 -0
- package/dist/storage/operator/Inverse.js.map +1 -0
- package/dist/storage/operator/LessThan.d.ts +2 -0
- package/dist/storage/operator/LessThan.js +13 -0
- package/dist/storage/operator/LessThan.js.map +1 -0
- package/dist/storage/operator/LessThanOrEqual.d.ts +2 -0
- package/dist/storage/operator/LessThanOrEqual.js +13 -0
- package/dist/storage/operator/LessThanOrEqual.js.map +1 -0
- package/dist/storage/operator/Not.d.ts +2 -0
- package/dist/storage/operator/Not.js +13 -0
- package/dist/storage/operator/Not.js.map +1 -0
- package/dist/storage/sparql/SparqlQueryAdapter.d.ts +40 -0
- package/dist/storage/sparql/SparqlQueryAdapter.js +235 -0
- package/dist/storage/sparql/SparqlQueryAdapter.js.map +1 -0
- package/dist/storage/sparql/SparqlQueryAdapterOptions.d.ts +15 -0
- package/dist/storage/sparql/SparqlQueryAdapterOptions.js +3 -0
- package/dist/storage/sparql/SparqlQueryAdapterOptions.js.map +1 -0
- package/dist/storage/sparql/SparqlQueryBuilder.d.ts +81 -0
- package/dist/storage/sparql/SparqlQueryBuilder.js +553 -0
- package/dist/storage/sparql/SparqlQueryBuilder.js.map +1 -0
- package/dist/storage/sparql/SparqlUpdateBuilder.d.ts +31 -0
- package/dist/storage/sparql/SparqlUpdateBuilder.js +190 -0
- package/dist/storage/sparql/SparqlUpdateBuilder.js.map +1 -0
- package/dist/storage/sparql/VariableGenerator.d.ts +4 -0
- package/dist/storage/sparql/VariableGenerator.js +14 -0
- package/dist/storage/sparql/VariableGenerator.js.map +1 -0
- package/dist/util/TripleUtil.d.ts +21 -0
- package/dist/util/TripleUtil.js +221 -0
- package/dist/util/TripleUtil.js.map +1 -0
- package/dist/util/Types.d.ts +10 -0
- package/dist/util/Types.js +3 -0
- package/dist/util/Types.js.map +1 -0
- package/dist/util/Util.d.ts +15 -0
- package/dist/util/Util.js +94 -0
- package/dist/util/Util.js.map +1 -0
- package/dist/util/VariableGenerator.d.ts +5 -0
- package/dist/util/VariableGenerator.js +29 -0
- package/dist/util/VariableGenerator.js.map +1 -0
- package/dist/util/Vocabularies.d.ts +12 -0
- package/dist/util/Vocabularies.js +118 -0
- package/dist/util/Vocabularies.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SparqlQueryAdapter = void 0;
|
|
7
|
+
const sparql_http_client_1 = __importDefault(require("sparql-http-client"));
|
|
8
|
+
const sparqljs_1 = require("sparqljs");
|
|
9
|
+
const TripleUtil_1 = require("../../util/TripleUtil");
|
|
10
|
+
const SparqlQueryBuilder_1 = require("./SparqlQueryBuilder");
|
|
11
|
+
const SparqlUpdateBuilder_1 = require("./SparqlUpdateBuilder");
|
|
12
|
+
/**
|
|
13
|
+
* A {@link QueryAdapter} that stores data in a database through a sparql endpoint.
|
|
14
|
+
*/
|
|
15
|
+
class SparqlQueryAdapter {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.sparqlClient = new sparql_http_client_1.default({
|
|
18
|
+
endpointUrl: options.endpointUrl,
|
|
19
|
+
updateUrl: options.updateUrl ?? options.endpointUrl,
|
|
20
|
+
});
|
|
21
|
+
this.sparqlGenerator = new sparqljs_1.Generator();
|
|
22
|
+
this.setTimestamps = options.setTimestamps ?? false;
|
|
23
|
+
}
|
|
24
|
+
async executeRawQuery(query) {
|
|
25
|
+
const response = await this.executeSparqlSelectAndGetData(query);
|
|
26
|
+
if (response.length === 0) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
return response
|
|
30
|
+
.map((result) => Object.entries(result).reduce((obj, [key, value]) => ({
|
|
31
|
+
...obj,
|
|
32
|
+
[key]: value.termType === 'Literal'
|
|
33
|
+
? (0, TripleUtil_1.toJSValueFromDataType)(value.value, value.datatype?.value)
|
|
34
|
+
: value.value,
|
|
35
|
+
}), {}));
|
|
36
|
+
}
|
|
37
|
+
async executeRawEntityQuery(query, frame) {
|
|
38
|
+
const response = await this.executeSparqlSelectAndGetData(query);
|
|
39
|
+
if (response.length === 0) {
|
|
40
|
+
return { '@graph': [] };
|
|
41
|
+
}
|
|
42
|
+
return await (0, TripleUtil_1.triplesToJsonldWithFrame)(response, frame);
|
|
43
|
+
}
|
|
44
|
+
async find(options) {
|
|
45
|
+
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
46
|
+
const selectQueryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, options?.where, options?.order, options?.relations);
|
|
47
|
+
const entitySelectQuery = this.sparqlSelect([TripleUtil_1.entityVariable, ...selectQueryData.variables], selectQueryData.where, selectQueryData.orders, 1);
|
|
48
|
+
const entitySelectGroupQuery = this.sparqlSelectGroup([entitySelectQuery]);
|
|
49
|
+
selectQueryData.graphWhere.unshift(entitySelectGroupQuery);
|
|
50
|
+
const query = queryBuilder.buildConstructFromEntitySelectQuery(selectQueryData.graphWhere, selectQueryData.variables, options?.select);
|
|
51
|
+
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
52
|
+
const responseTriples = await this.executeSparqlSelectAndGetData(generatedQuery);
|
|
53
|
+
if (responseTriples.length === 0) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
const jsonld = await (0, TripleUtil_1.triplesToJsonld)(responseTriples, options?.relations);
|
|
57
|
+
return jsonld;
|
|
58
|
+
}
|
|
59
|
+
sparqlSelect(variables, where, order, limit, offset) {
|
|
60
|
+
return {
|
|
61
|
+
type: 'query',
|
|
62
|
+
queryType: 'SELECT',
|
|
63
|
+
variables,
|
|
64
|
+
where,
|
|
65
|
+
order: order.length > 0 ? order : undefined,
|
|
66
|
+
limit,
|
|
67
|
+
offset,
|
|
68
|
+
prefixes: {},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async findBy(where) {
|
|
72
|
+
return this.find({ where });
|
|
73
|
+
}
|
|
74
|
+
async findAll(options) {
|
|
75
|
+
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
76
|
+
const selectQueryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, options?.where, options?.order, options?.relations);
|
|
77
|
+
const entitySelectVariables = [TripleUtil_1.entityVariable, ...selectQueryData.variables];
|
|
78
|
+
const entitySelectQuery = this.sparqlSelect(entitySelectVariables, selectQueryData.where, selectQueryData.orders, options?.limit, options?.offset);
|
|
79
|
+
let orderedEntityVariableValues;
|
|
80
|
+
if (selectQueryData.orders.length > 0 && options?.limit !== 1) {
|
|
81
|
+
// We need to execute the entity select query here first to get ordered results.
|
|
82
|
+
const generatedEntitySelectQuery = this.sparqlGenerator.stringify(entitySelectQuery);
|
|
83
|
+
const entitySelectResponse = await this.executeSparqlSelectAndGetData(generatedEntitySelectQuery);
|
|
84
|
+
const valuesByVariable = this.groupByKey(entitySelectResponse);
|
|
85
|
+
orderedEntityVariableValues = valuesByVariable[TripleUtil_1.entityVariable.value]
|
|
86
|
+
.map((namedNode) => namedNode.value);
|
|
87
|
+
const variableValueFilter = queryBuilder.buildInFilterForVariables(valuesByVariable);
|
|
88
|
+
selectQueryData.graphWhere.push(variableValueFilter);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const entitySelectGroupQuery = this.sparqlSelectGroup([entitySelectQuery]);
|
|
92
|
+
selectQueryData.graphWhere.unshift(entitySelectGroupQuery);
|
|
93
|
+
}
|
|
94
|
+
const query = queryBuilder.buildConstructFromEntitySelectQuery(selectQueryData.graphWhere, selectQueryData.variables, options?.select);
|
|
95
|
+
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
96
|
+
const responseTriples = await this.executeSparqlSelectAndGetData(generatedQuery);
|
|
97
|
+
if (responseTriples.length === 0) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const jsonld = await (0, TripleUtil_1.triplesToJsonld)(responseTriples, options?.relations, orderedEntityVariableValues);
|
|
101
|
+
if (Array.isArray(jsonld)) {
|
|
102
|
+
return jsonld;
|
|
103
|
+
}
|
|
104
|
+
return [jsonld];
|
|
105
|
+
}
|
|
106
|
+
groupByKey(entitySelectResponse) {
|
|
107
|
+
return entitySelectResponse
|
|
108
|
+
.reduce((obj, result) => {
|
|
109
|
+
for (const [key, value] of Object.entries(result)) {
|
|
110
|
+
if (!(key in obj)) {
|
|
111
|
+
obj[key] = [value];
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
obj[key].push(value);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return obj;
|
|
118
|
+
}, {});
|
|
119
|
+
}
|
|
120
|
+
sparqlSelectGroup(patterns) {
|
|
121
|
+
return {
|
|
122
|
+
type: 'group',
|
|
123
|
+
patterns,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async findAllBy(where) {
|
|
127
|
+
return this.findAll({ where });
|
|
128
|
+
}
|
|
129
|
+
async exists(where) {
|
|
130
|
+
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
131
|
+
const selectQueryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, where);
|
|
132
|
+
const query = this.sparqlAsk(selectQueryData.where);
|
|
133
|
+
return await this.executeAskQueryAndGetResponse(query);
|
|
134
|
+
}
|
|
135
|
+
sparqlAsk(where) {
|
|
136
|
+
return {
|
|
137
|
+
type: 'query',
|
|
138
|
+
queryType: 'ASK',
|
|
139
|
+
where,
|
|
140
|
+
prefixes: {},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async count(where) {
|
|
144
|
+
const queryBuilder = new SparqlQueryBuilder_1.SparqlQueryBuilder();
|
|
145
|
+
const selectQueryData = queryBuilder.buildPatternsFromQueryOptions(TripleUtil_1.entityVariable, where);
|
|
146
|
+
const query = this.sparqlCountSelect(selectQueryData.where, selectQueryData.graphWhere);
|
|
147
|
+
return await this.executeSelectCountAndGetResponse(query);
|
|
148
|
+
}
|
|
149
|
+
sparqlCountSelect(where, graphWhere) {
|
|
150
|
+
return {
|
|
151
|
+
type: 'query',
|
|
152
|
+
queryType: 'SELECT',
|
|
153
|
+
variables: [{
|
|
154
|
+
expression: {
|
|
155
|
+
type: 'aggregate',
|
|
156
|
+
aggregation: 'count',
|
|
157
|
+
distinct: true,
|
|
158
|
+
expression: TripleUtil_1.entityVariable,
|
|
159
|
+
},
|
|
160
|
+
variable: TripleUtil_1.countVariable,
|
|
161
|
+
}],
|
|
162
|
+
where: [
|
|
163
|
+
this.sparqlSelectGraph(TripleUtil_1.entityVariable, where),
|
|
164
|
+
...graphWhere,
|
|
165
|
+
],
|
|
166
|
+
prefixes: {},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
sparqlSelectGraph(name, patterns) {
|
|
170
|
+
return {
|
|
171
|
+
type: 'graph',
|
|
172
|
+
name: name,
|
|
173
|
+
patterns,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
async save(entityOrEntities) {
|
|
177
|
+
const queryBuilder = new SparqlUpdateBuilder_1.SparqlUpdateBuilder({ setTimestamps: this.setTimestamps });
|
|
178
|
+
const query = queryBuilder.buildUpdate(entityOrEntities);
|
|
179
|
+
await this.executeSparqlUpdate(query);
|
|
180
|
+
return entityOrEntities;
|
|
181
|
+
}
|
|
182
|
+
async destroy(entityOrEntities) {
|
|
183
|
+
const queryBuilder = new SparqlUpdateBuilder_1.SparqlUpdateBuilder();
|
|
184
|
+
const query = queryBuilder.buildDelete(entityOrEntities);
|
|
185
|
+
await this.executeSparqlUpdate(query);
|
|
186
|
+
return entityOrEntities;
|
|
187
|
+
}
|
|
188
|
+
async destroyAll() {
|
|
189
|
+
const queryBuilder = new SparqlUpdateBuilder_1.SparqlUpdateBuilder();
|
|
190
|
+
const query = queryBuilder.buildDeleteAll();
|
|
191
|
+
await this.executeSparqlUpdate(query);
|
|
192
|
+
}
|
|
193
|
+
async executeSparqlSelectAndGetData(query) {
|
|
194
|
+
const stream = await this.sparqlClient.query.select(query);
|
|
195
|
+
return new Promise((resolve, reject) => {
|
|
196
|
+
const data = [];
|
|
197
|
+
stream.on('data', (row) => {
|
|
198
|
+
data.push(row);
|
|
199
|
+
});
|
|
200
|
+
stream.on('end', () => {
|
|
201
|
+
resolve(data);
|
|
202
|
+
});
|
|
203
|
+
stream.on('error', (error) => {
|
|
204
|
+
reject(error);
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
async executeSparqlUpdate(query) {
|
|
209
|
+
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
210
|
+
await this.sparqlClient.query.update(generatedQuery);
|
|
211
|
+
}
|
|
212
|
+
async executeAskQueryAndGetResponse(query) {
|
|
213
|
+
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
214
|
+
return await this.sparqlClient.query.ask(generatedQuery);
|
|
215
|
+
}
|
|
216
|
+
async executeSelectCountAndGetResponse(query) {
|
|
217
|
+
const generatedQuery = this.sparqlGenerator.stringify(query);
|
|
218
|
+
const stream = await this.sparqlClient.query.select(generatedQuery);
|
|
219
|
+
return new Promise((resolve, reject) => {
|
|
220
|
+
let countValue;
|
|
221
|
+
stream.on('data', (row) => {
|
|
222
|
+
const { count } = row;
|
|
223
|
+
countValue = Number.parseInt(count.value, 10);
|
|
224
|
+
});
|
|
225
|
+
stream.on('end', () => {
|
|
226
|
+
resolve(countValue);
|
|
227
|
+
});
|
|
228
|
+
stream.on('error', (error) => {
|
|
229
|
+
reject(error);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
exports.SparqlQueryAdapter = SparqlQueryAdapter;
|
|
235
|
+
//# sourceMappingURL=SparqlQueryAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SparqlQueryAdapter.js","sourceRoot":"","sources":["../../../src/storage/sparql/SparqlQueryAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BaseQueryAdapterOptions } from '../BaseQueryAdapterOptions';
|
|
2
|
+
export interface SparqlQueryAdapterOptions extends BaseQueryAdapterOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Query Adapter type.
|
|
5
|
+
*/
|
|
6
|
+
readonly type: 'sparql';
|
|
7
|
+
/**
|
|
8
|
+
* The location of the SPARQL endpoint. This value is required.
|
|
9
|
+
*/
|
|
10
|
+
readonly endpointUrl: string;
|
|
11
|
+
/**
|
|
12
|
+
* The location of the SPARQL update endpoint. Defaults to the value of endpointUrl if not set.
|
|
13
|
+
*/
|
|
14
|
+
readonly updateUrl?: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SparqlQueryAdapterOptions.js","sourceRoot":"","sources":["../../../src/storage/sparql/SparqlQueryAdapterOptions.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Variable, NamedNode, Literal } from '@rdfjs/types';
|
|
2
|
+
import type { FilterPattern, Pattern, ConstructQuery, Triple, OperationExpression, Ordering } from 'sparqljs';
|
|
3
|
+
import type { FindOptionsOrder, FindOptionsRelations, FindOptionsSelect, FindOptionsWhere } from '../FindOptionsTypes';
|
|
4
|
+
export interface WhereQueryData {
|
|
5
|
+
triples: Triple[];
|
|
6
|
+
graphTriples: Triple[];
|
|
7
|
+
filters: OperationExpression[];
|
|
8
|
+
graphFilters: OperationExpression[];
|
|
9
|
+
}
|
|
10
|
+
export interface RelationsQueryData {
|
|
11
|
+
variables: Variable[];
|
|
12
|
+
triples: Triple[];
|
|
13
|
+
graphTriples: Triple[];
|
|
14
|
+
}
|
|
15
|
+
export interface OrderQueryData {
|
|
16
|
+
triples: Triple[];
|
|
17
|
+
orders: Ordering[];
|
|
18
|
+
variables: Variable[];
|
|
19
|
+
}
|
|
20
|
+
export declare type QueryData = {
|
|
21
|
+
relationsVariables: Variable[];
|
|
22
|
+
filters: OperationExpression[];
|
|
23
|
+
triples: Triple[];
|
|
24
|
+
optionalTriples: Triple[];
|
|
25
|
+
orders: Ordering[];
|
|
26
|
+
graphTriples: Triple[];
|
|
27
|
+
optionalGraphTriples: Triple[];
|
|
28
|
+
graphFilters: OperationExpression[];
|
|
29
|
+
};
|
|
30
|
+
export interface SelectQueryData {
|
|
31
|
+
variables: Variable[];
|
|
32
|
+
where: Pattern[];
|
|
33
|
+
orders: Ordering[];
|
|
34
|
+
graphWhere: Pattern[];
|
|
35
|
+
}
|
|
36
|
+
export declare class SparqlQueryBuilder {
|
|
37
|
+
private readonly variableGenerator;
|
|
38
|
+
constructor();
|
|
39
|
+
buildInFilterForVariables(valuesByVariable: Record<string, (NamedNode | Literal)[]>): FilterPattern;
|
|
40
|
+
private filterWithExpression;
|
|
41
|
+
buildPatternsFromQueryOptions(subject: Variable, where?: FindOptionsWhere, order?: FindOptionsOrder, relations?: FindOptionsRelations): SelectQueryData;
|
|
42
|
+
private createWherePatternsFromQueryData;
|
|
43
|
+
private filterPatternFromFilters;
|
|
44
|
+
private sparqlOptionalWithTriples;
|
|
45
|
+
private sparqlBasicGraphPattern;
|
|
46
|
+
buildConstructFromEntitySelectQuery(graphWhere: Pattern[], graphSelectVariables: Variable[], select?: FindOptionsSelect): ConstructQuery;
|
|
47
|
+
private createSelectPattern;
|
|
48
|
+
private createGraphSelectsAndTriplePatterns;
|
|
49
|
+
private sparqlSelectGraph;
|
|
50
|
+
private sparqlOptionalSelectGraph;
|
|
51
|
+
private createQueryData;
|
|
52
|
+
private createWhereQueryData;
|
|
53
|
+
private createWhereQueryDataForField;
|
|
54
|
+
private createWhereQueryDataForIdValue;
|
|
55
|
+
private createWhereQueryDataForType;
|
|
56
|
+
private createWhereQueryDataFromKeyValue;
|
|
57
|
+
private inversePropertyPredicate;
|
|
58
|
+
private createWhereQueryDataForFindOperator;
|
|
59
|
+
private createWhereQueryDataForNestedWhere;
|
|
60
|
+
private createWhereQueryDataForValueObject;
|
|
61
|
+
private valueObjectToTerm;
|
|
62
|
+
private resolveFindOperatorAsExpressionWithMultipleValues;
|
|
63
|
+
private resolveFindOperatorAsExpressionForId;
|
|
64
|
+
private resolveValueToExpression;
|
|
65
|
+
private buildInOperation;
|
|
66
|
+
private buildNotInOperation;
|
|
67
|
+
private buildNotOperationForMultiValued;
|
|
68
|
+
private buildNotOperationForId;
|
|
69
|
+
private buildEqualOperation;
|
|
70
|
+
private buildGtOperation;
|
|
71
|
+
private buildGteOperation;
|
|
72
|
+
private buildLtOperation;
|
|
73
|
+
private buildLteOperation;
|
|
74
|
+
private buildNotEqualOperation;
|
|
75
|
+
private buildTypesAndSuperTypesTriple;
|
|
76
|
+
private resolveValueToTerm;
|
|
77
|
+
private createOrderQueryData;
|
|
78
|
+
private createOrderQueryDataForProperty;
|
|
79
|
+
private createRelationsQueryData;
|
|
80
|
+
private createVariable;
|
|
81
|
+
}
|