@abedmurrar/objection 4.0.0-alpha.0 → 4.0.0-beta.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/README.md +103 -67
- package/lib/index.mjs +6 -0
- package/lib/initialize.js +6 -9
- package/lib/model/AjvValidator.js +235 -282
- package/lib/model/Model.js +653 -823
- package/lib/model/ModifierNotFoundError.js +5 -7
- package/lib/model/NotFoundError.js +14 -18
- package/lib/model/RelationDoesNotExistError.js +6 -9
- package/lib/model/ValidationError.js +33 -41
- package/lib/model/Validator.js +15 -21
- package/lib/model/getModel.js +1 -3
- package/lib/model/graph/ModelGraph.js +44 -64
- package/lib/model/graph/ModelGraphBuilder.js +164 -217
- package/lib/model/graph/ModelGraphEdge.js +31 -43
- package/lib/model/graph/ModelGraphNode.js +192 -231
- package/lib/model/inheritModel.js +9 -18
- package/lib/model/modelBindKnex.js +48 -62
- package/lib/model/modelClone.js +79 -98
- package/lib/model/modelColPropMap.js +16 -26
- package/lib/model/modelConcurrency.js +24 -0
- package/lib/model/modelId.js +44 -49
- package/lib/model/modelJsonAttributes.js +56 -76
- package/lib/model/modelParseRelations.js +68 -67
- package/lib/model/modelQueryProps.js +76 -107
- package/lib/model/modelSet.js +92 -112
- package/lib/model/modelTableMetadata.js +60 -72
- package/lib/model/modelToJson.js +120 -150
- package/lib/model/modelUtils.js +30 -37
- package/lib/model/modelValidate.js +34 -42
- package/lib/model/modelValues.js +78 -91
- package/lib/model/modelVisitor.js +22 -29
- package/lib/objection.js +42 -67
- package/lib/queryBuilder/FunctionBuilder.js +231 -279
- package/lib/queryBuilder/InternalOptions.js +19 -24
- package/lib/queryBuilder/JoinBuilder.js +116 -149
- package/lib/queryBuilder/QueryBuilder.js +1009 -1271
- package/lib/queryBuilder/QueryBuilderBase.js +647 -865
- package/lib/queryBuilder/QueryBuilderContext.js +14 -21
- package/lib/queryBuilder/QueryBuilderContextBase.js +20 -29
- package/lib/queryBuilder/QueryBuilderOperationSupport.js +462 -536
- package/lib/queryBuilder/QueryBuilderUserContext.js +19 -25
- package/lib/queryBuilder/RawBuilder.js +58 -73
- package/lib/queryBuilder/ReferenceBuilder.js +232 -270
- package/lib/queryBuilder/RelationExpression.js +322 -380
- package/lib/queryBuilder/StaticHookArguments.js +94 -106
- package/lib/queryBuilder/ValueBuilder.js +100 -112
- package/lib/queryBuilder/expressions.js +86 -116
- package/lib/queryBuilder/functions/mysql.js +642 -697
- package/lib/queryBuilder/graph/GraphAction.js +44 -59
- package/lib/queryBuilder/graph/GraphData.js +7 -9
- package/lib/queryBuilder/graph/GraphFetcher.js +115 -151
- package/lib/queryBuilder/graph/GraphNodeDbExistence.js +114 -152
- package/lib/queryBuilder/graph/GraphOperation.js +16 -22
- package/lib/queryBuilder/graph/GraphOptions.js +143 -185
- package/lib/queryBuilder/graph/GraphUpsert.js +167 -241
- package/lib/queryBuilder/graph/delete/GraphDelete.js +8 -13
- package/lib/queryBuilder/graph/delete/GraphDeleteAction.js +44 -62
- package/lib/queryBuilder/graph/insert/GraphInsert.js +99 -128
- package/lib/queryBuilder/graph/insert/GraphInsertAction.js +151 -193
- package/lib/queryBuilder/graph/insert/JoinRowGraphInsertAction.js +57 -79
- package/lib/queryBuilder/graph/patch/GraphPatch.js +8 -13
- package/lib/queryBuilder/graph/patch/GraphPatchAction.js +181 -234
- package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsert.js +16 -21
- package/lib/queryBuilder/graph/recursiveUpsert/GraphRecursiveUpsertAction.js +80 -110
- package/lib/queryBuilder/join/JoinResultColumn.js +14 -18
- package/lib/queryBuilder/join/JoinResultParser.js +88 -101
- package/lib/queryBuilder/join/RelationJoiner.js +205 -288
- package/lib/queryBuilder/join/TableNode.js +117 -144
- package/lib/queryBuilder/join/TableTree.js +60 -76
- package/lib/queryBuilder/join/utils.js +10 -16
- package/lib/queryBuilder/operations/DelegateOperation.js +93 -133
- package/lib/queryBuilder/operations/DeleteOperation.js +33 -37
- package/lib/queryBuilder/operations/FindByIdOperation.js +20 -28
- package/lib/queryBuilder/operations/FindByIdsOperation.js +17 -23
- package/lib/queryBuilder/operations/FindOperation.js +114 -131
- package/lib/queryBuilder/operations/FirstOperation.js +14 -19
- package/lib/queryBuilder/operations/FromOperation.js +69 -88
- package/lib/queryBuilder/operations/InsertAndFetchOperation.js +28 -39
- package/lib/queryBuilder/operations/InsertGraphAndFetchOperation.js +25 -35
- package/lib/queryBuilder/operations/InsertGraphOperation.js +77 -98
- package/lib/queryBuilder/operations/InsertOperation.js +132 -165
- package/lib/queryBuilder/operations/InstanceDeleteOperation.js +27 -36
- package/lib/queryBuilder/operations/InstanceFindOperation.js +9 -13
- package/lib/queryBuilder/operations/InstanceInsertOperation.js +13 -17
- package/lib/queryBuilder/operations/InstanceUpdateOperation.js +32 -46
- package/lib/queryBuilder/operations/JoinRelatedOperation.js +66 -86
- package/lib/queryBuilder/operations/KnexOperation.js +4 -7
- package/lib/queryBuilder/operations/MergeOperation.js +32 -45
- package/lib/queryBuilder/operations/ObjectionToKnexConvertingOperation.js +131 -150
- package/lib/queryBuilder/operations/OnBuildKnexOperation.js +17 -23
- package/lib/queryBuilder/operations/OnBuildOperation.js +17 -23
- package/lib/queryBuilder/operations/OnErrorOperation.js +17 -23
- package/lib/queryBuilder/operations/QueryBuilderOperation.js +231 -270
- package/lib/queryBuilder/operations/RangeOperation.js +30 -40
- package/lib/queryBuilder/operations/RelateOperation.js +14 -21
- package/lib/queryBuilder/operations/ReturningOperation.js +12 -18
- package/lib/queryBuilder/operations/RunAfterOperation.js +17 -23
- package/lib/queryBuilder/operations/RunBeforeOperation.js +17 -23
- package/lib/queryBuilder/operations/UnrelateOperation.js +12 -17
- package/lib/queryBuilder/operations/UpdateAndFetchOperation.js +48 -65
- package/lib/queryBuilder/operations/UpdateOperation.js +104 -129
- package/lib/queryBuilder/operations/UpsertGraphAndFetchOperation.js +25 -35
- package/lib/queryBuilder/operations/UpsertGraphOperation.js +36 -55
- package/lib/queryBuilder/operations/WhereCompositeOperation.js +30 -39
- package/lib/queryBuilder/operations/WhereInOperation.js +34 -36
- package/lib/queryBuilder/operations/eager/EagerOperation.js +37 -52
- package/lib/queryBuilder/operations/eager/JoinEagerOperation.js +34 -44
- package/lib/queryBuilder/operations/eager/NaiveEagerOperation.js +4 -7
- package/lib/queryBuilder/operations/eager/WhereInEagerOperation.js +193 -251
- package/lib/queryBuilder/operations/jsonApi/WhereJsonHasOperation.js +18 -25
- package/lib/queryBuilder/operations/jsonApi/WhereJsonNotObjectOperation.js +25 -41
- package/lib/queryBuilder/operations/jsonApi/WhereJsonOperation.js +19 -20
- package/lib/queryBuilder/operations/jsonApi/WhereJsonOverlapsOperation.js +23 -21
- package/lib/queryBuilder/operations/jsonApi/mysqlJsonApi.js +106 -118
- package/lib/queryBuilder/operations/jsonApi/postgresJsonApi.js +79 -108
- package/lib/queryBuilder/operations/select/SelectOperation.js +37 -53
- package/lib/queryBuilder/operations/select/Selection.js +94 -105
- package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeMsSqlOperation.js +68 -101
- package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeOperation.js +65 -75
- package/lib/queryBuilder/operations/whereInComposite/WhereInCompositeSqliteOperation.js +75 -84
- package/lib/queryBuilder/parsers/jsonFieldExpressionParser.js +760 -859
- package/lib/queryBuilder/parsers/relationExpressionParser.js +840 -952
- package/lib/queryBuilder/transformations/CompositeQueryTransformation.js +10 -15
- package/lib/queryBuilder/transformations/QueryTransformation.js +4 -6
- package/lib/queryBuilder/transformations/WrapMysqlModifySubqueryTransformation.js +35 -49
- package/lib/queryBuilder/transformations/index.js +3 -9
- package/lib/queryBuilder/whereScopes.js +158 -186
- package/lib/relations/Relation.js +293 -375
- package/lib/relations/RelationDeleteOperation.js +24 -28
- package/lib/relations/RelationFindOperation.js +108 -138
- package/lib/relations/RelationInsertOperation.js +24 -32
- package/lib/relations/RelationOwner.js +175 -209
- package/lib/relations/RelationProperty.js +186 -223
- package/lib/relations/RelationUpdateOperation.js +23 -29
- package/lib/relations/belongsToOne/BelongsToOneDeleteOperation.js +16 -21
- package/lib/relations/belongsToOne/BelongsToOneInsertOperation.js +30 -41
- package/lib/relations/belongsToOne/BelongsToOneRelateOperation.js +36 -47
- package/lib/relations/belongsToOne/BelongsToOneRelation.js +42 -50
- package/lib/relations/belongsToOne/BelongsToOneUnrelateOperation.js +43 -58
- package/lib/relations/hasMany/HasManyInsertOperation.js +40 -56
- package/lib/relations/hasMany/HasManyRelateOperation.js +45 -61
- package/lib/relations/hasMany/HasManyRelation.js +38 -46
- package/lib/relations/hasMany/HasManyUnrelateOperation.js +25 -32
- package/lib/relations/hasOne/HasOneRelation.js +9 -12
- package/lib/relations/hasOneThrough/HasOneThroughRelation.js +9 -12
- package/lib/relations/manyToMany/ManyToManyModifyMixin.js +73 -95
- package/lib/relations/manyToMany/ManyToManyRelation.js +374 -473
- package/lib/relations/manyToMany/ManyToManySqliteModifyMixin.js +23 -30
- package/lib/relations/manyToMany/delete/ManyToManyDeleteOperation.js +8 -10
- package/lib/relations/manyToMany/delete/ManyToManyDeleteOperationBase.js +20 -25
- package/lib/relations/manyToMany/delete/ManyToManyDeleteSqliteOperation.js +8 -12
- package/lib/relations/manyToMany/find/ManyToManyFindOperation.js +77 -100
- package/lib/relations/manyToMany/insert/ManyToManyInsertOperation.js +37 -49
- package/lib/relations/manyToMany/relate/ManyToManyRelateOperation.js +58 -74
- package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperation.js +10 -13
- package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateOperationBase.js +26 -33
- package/lib/relations/manyToMany/unrelate/ManyToManyUnrelateSqliteOperation.js +10 -15
- package/lib/relations/manyToMany/update/ManyToManyUpdateOperation.js +8 -10
- package/lib/relations/manyToMany/update/ManyToManyUpdateOperationBase.js +61 -78
- package/lib/relations/manyToMany/update/ManyToManyUpdateSqliteOperation.js +8 -12
- package/lib/transaction.js +53 -83
- package/lib/utils/assert.js +15 -21
- package/lib/utils/buildUtils.js +17 -19
- package/lib/utils/classUtils.js +7 -11
- package/lib/utils/cloneDeep.js +365 -0
- package/lib/utils/createModifier.js +36 -41
- package/lib/utils/deprecate.js +8 -12
- package/lib/utils/identifierMapping.js +153 -192
- package/lib/utils/internalPropUtils.js +4 -8
- package/lib/utils/knexUtils.js +61 -56
- package/lib/utils/mixin.js +16 -23
- package/lib/utils/mysqlJsonPath.js +55 -40
- package/lib/utils/normalizeIds.js +110 -127
- package/lib/utils/objectUtils.js +236 -338
- package/lib/utils/parseFieldExpression.js +66 -44
- package/lib/utils/postgresJsonPath.js +48 -62
- package/lib/utils/promiseUtils/after.js +10 -13
- package/lib/utils/promiseUtils/afterReturn.js +10 -13
- package/lib/utils/promiseUtils/index.js +15 -17
- package/lib/utils/promiseUtils/isPromise.js +6 -9
- package/lib/utils/promiseUtils/map.js +75 -89
- package/lib/utils/promiseUtils/mapAfterAllReturn.js +17 -23
- package/lib/utils/promiseUtils/try.js +15 -18
- package/lib/utils/resolveModel.js +91 -94
- package/lib/utils/tmpColumnUtils.js +4 -13
- package/package.json +50 -23
- package/typings/objection/index.d.mts +362 -0
- package/typings/objection/index.d.ts +36 -9
- package/lib/.eslintrc.json +0 -8
- package/lib/queryBuilder/parsers/jsonFieldExpressionParser.pegjs +0 -97
- package/lib/queryBuilder/parsers/relationExpressionParser.pegjs +0 -141
- package/lib/utils/clone.js +0 -2329
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
2
|
const { GraphData } = require('./GraphData');
|
|
4
3
|
const { GraphAction } = require('./GraphAction');
|
|
5
4
|
const promiseUtils = require('../../utils/promiseUtils');
|
|
6
|
-
|
|
7
5
|
/**
|
|
8
6
|
* This weird little class is responsible for checking (and maintaining information)
|
|
9
7
|
* whether certain nodes exist in the database.
|
|
@@ -12,173 +10,137 @@ const promiseUtils = require('../../utils/promiseUtils');
|
|
|
12
10
|
* option is true.
|
|
13
11
|
*/
|
|
14
12
|
class GraphNodeDbExistence {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Goes through the graphs and identifies nodes that may not exist in the db
|
|
21
|
-
* (nodes that have an id, but are not found in `currentGraph`) and
|
|
22
|
-
* creates an instance of GraphNodeDbExistence that can be used to
|
|
23
|
-
* synchronously check if a node exist in the database.
|
|
24
|
-
*/
|
|
25
|
-
static async create({ builder, graph, graphOptions, currentGraph }) {
|
|
26
|
-
if (graphOptions.isInsertOnly()) {
|
|
27
|
-
// With insertGraph, we never want to do anything but inserts.
|
|
28
|
-
return GraphNodeDbExistence.createEveryNodeExistsExistence();
|
|
13
|
+
static createEveryNodeExistsExistence() {
|
|
14
|
+
return new GraphNodeDbExistence(new Map());
|
|
29
15
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
16
|
+
/**
|
|
17
|
+
* Goes through the graphs and identifies nodes that may not exist in the db
|
|
18
|
+
* (nodes that have an id, but are not found in `currentGraph`) and
|
|
19
|
+
* creates an instance of GraphNodeDbExistence that can be used to
|
|
20
|
+
* synchronously check if a node exist in the database.
|
|
21
|
+
*/
|
|
22
|
+
static async create({ builder, graph, graphOptions, currentGraph }) {
|
|
23
|
+
if (graphOptions.isInsertOnly()) {
|
|
24
|
+
// With insertGraph, we never want to do anything but inserts.
|
|
25
|
+
return GraphNodeDbExistence.createEveryNodeExistsExistence();
|
|
26
|
+
}
|
|
27
|
+
const graphData = new GraphData({
|
|
28
|
+
graph,
|
|
29
|
+
graphOptions,
|
|
30
|
+
currentGraph,
|
|
31
|
+
// We don't yet have an instance of GraphNodeDbExistence since we are
|
|
32
|
+
// creating one. We can (and should) safely use an instance that
|
|
33
|
+
// assumes that all nodes exist in the db for the purposes of this
|
|
34
|
+
// method.
|
|
35
|
+
nodeDbExistence: GraphNodeDbExistence.createEveryNodeExistsExistence(),
|
|
36
|
+
});
|
|
37
|
+
const { mayNotExist, mayNotExistNodes } = createMayNotExistMap(graphData);
|
|
38
|
+
if (mayNotExist.size == 0) {
|
|
39
|
+
// Early exit if we found no items for which we should check their
|
|
40
|
+
// existence in the db.
|
|
41
|
+
return GraphNodeDbExistence.createEveryNodeExistsExistence();
|
|
42
|
+
}
|
|
43
|
+
const dontExist = await createDontExistMap({ builder, mayNotExist, mayNotExistNodes });
|
|
44
|
+
return new GraphNodeDbExistence(dontExist);
|
|
45
|
+
}
|
|
46
|
+
constructor(dontExist) {
|
|
47
|
+
this.dontExist = dontExist;
|
|
48
48
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
constructor(dontExist) {
|
|
56
|
-
this.dontExist = dontExist;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
doesNodeExistInDb(node) {
|
|
60
|
-
const idMap = this.dontExist.get(node.modelClass);
|
|
61
|
-
|
|
62
|
-
if (!idMap) {
|
|
63
|
-
return true;
|
|
49
|
+
doesNodeExistInDb(node) {
|
|
50
|
+
const idMap = this.dontExist.get(node.modelClass);
|
|
51
|
+
if (!idMap) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return !idMap.has(node.obj.$idKey());
|
|
64
55
|
}
|
|
65
|
-
|
|
66
|
-
return !idMap.has(node.obj.$idKey());
|
|
67
|
-
}
|
|
68
56
|
}
|
|
69
|
-
|
|
70
57
|
function createMayNotExistMap(graphData) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
mayNotExist.get(node.modelClass).set(node.obj.$idKey(), node.obj.$id());
|
|
97
|
-
mayNotExistNodes.push(node);
|
|
58
|
+
const { graph, currentGraph, graphOptions } = graphData;
|
|
59
|
+
const mayNotExist = new Map();
|
|
60
|
+
const mayNotExistNodes = [];
|
|
61
|
+
for (const node of graph.nodes) {
|
|
62
|
+
if (
|
|
63
|
+
// As an optimization, only consider nodes for which `insertMissing` is true.
|
|
64
|
+
// We only need the information for those nodes.
|
|
65
|
+
graphOptions.shouldInsertMissing(node) &&
|
|
66
|
+
// Only consider nodes that will be related. We don't consider nodes that
|
|
67
|
+
// would get inserted with an id. Those will still result in a unique
|
|
68
|
+
// constraint error.
|
|
69
|
+
graphOptions.shouldRelate(node, graphData) &&
|
|
70
|
+
// Relate nodes may not have an id if they are `#ref` nodes. Only consider
|
|
71
|
+
// nodes that have an id so that we can check the existence.
|
|
72
|
+
node.hasId &&
|
|
73
|
+
// We can ignore nodes if they are found anywhere in the graph. `shouldRelate`
|
|
74
|
+
// only checks if the node is found in the same relation.
|
|
75
|
+
!hasNodeById(currentGraph, node)) {
|
|
76
|
+
if (!mayNotExist.has(node.modelClass)) {
|
|
77
|
+
mayNotExist.set(node.modelClass, new Map());
|
|
78
|
+
}
|
|
79
|
+
mayNotExist.get(node.modelClass).set(node.obj.$idKey(), node.obj.$id());
|
|
80
|
+
mayNotExistNodes.push(node);
|
|
81
|
+
}
|
|
98
82
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
mayNotExistNodes,
|
|
104
|
-
};
|
|
83
|
+
return {
|
|
84
|
+
mayNotExist,
|
|
85
|
+
mayNotExistNodes,
|
|
86
|
+
};
|
|
105
87
|
}
|
|
106
|
-
|
|
107
88
|
function hasNodeById(currentGraph, nodeToFind) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
node.modelClass.getTableName() === tableToFind &&
|
|
116
|
-
idProps.every((idProp) => node.obj[idProp] === nodeToFind.obj[idProp])
|
|
117
|
-
);
|
|
118
|
-
});
|
|
89
|
+
const { modelClass } = nodeToFind;
|
|
90
|
+
const tableToFind = modelClass.getTableName();
|
|
91
|
+
const idProps = modelClass.getIdPropertyArray();
|
|
92
|
+
return currentGraph.nodes.some((node) => {
|
|
93
|
+
return (node.modelClass.getTableName() === tableToFind &&
|
|
94
|
+
idProps.every((idProp) => node.obj[idProp] === nodeToFind.obj[idProp]));
|
|
95
|
+
});
|
|
119
96
|
}
|
|
120
|
-
|
|
121
97
|
async function createDontExistMap({ builder, mayNotExist, mayNotExistNodes }) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
idMap.delete(item.$idKey());
|
|
98
|
+
const dontExist = cloneExistenceMap(mayNotExist);
|
|
99
|
+
const existenceCheckQueries = createExistenceCheckQueries({ builder, mayNotExist });
|
|
100
|
+
const results = await promiseUtils.map(existenceCheckQueries, (builder) => builder.execute(), {
|
|
101
|
+
concurrency: GraphAction.getConcurrency(builder, mayNotExistNodes),
|
|
102
|
+
});
|
|
103
|
+
// Remove all items from the mayNotExist map that we have just proven to exist
|
|
104
|
+
// by executing the existenceCheckQueries.
|
|
105
|
+
for (const modelResult of results) {
|
|
106
|
+
for (const item of modelResult) {
|
|
107
|
+
const modelClass = item.constructor;
|
|
108
|
+
const idMap = dontExist.get(modelClass);
|
|
109
|
+
// Exist, remove from the map.
|
|
110
|
+
idMap.delete(item.$idKey());
|
|
111
|
+
}
|
|
137
112
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
// Now only items that don't exist in the db are left in this map.
|
|
141
|
-
return dontExist;
|
|
113
|
+
// Now only items that don't exist in the db are left in this map.
|
|
114
|
+
return dontExist;
|
|
142
115
|
}
|
|
143
|
-
|
|
144
116
|
function createExistenceCheckQueries({ builder, mayNotExist }) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
.select(modelClass.getIdColumnArray()),
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return builders;
|
|
117
|
+
const builders = [];
|
|
118
|
+
for (const [modelClass, idMap] of mayNotExist.entries()) {
|
|
119
|
+
const ids = Array.from(idMap.values());
|
|
120
|
+
// Create one query per model class (table) to fetch the identifiers
|
|
121
|
+
// of the nodes that may not exist. These queries should be super fast
|
|
122
|
+
// since they come straight from the index.
|
|
123
|
+
builders.push(modelClass
|
|
124
|
+
.query()
|
|
125
|
+
.childQueryOf(builder, childQueryOptions())
|
|
126
|
+
.findByIds(ids)
|
|
127
|
+
.select(modelClass.getIdColumnArray()));
|
|
128
|
+
}
|
|
129
|
+
return builders;
|
|
163
130
|
}
|
|
164
|
-
|
|
165
131
|
function childQueryOptions() {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
132
|
+
return {
|
|
133
|
+
fork: true,
|
|
134
|
+
isInternalQuery: true,
|
|
135
|
+
};
|
|
170
136
|
}
|
|
171
|
-
|
|
172
137
|
function cloneExistenceMap(exixtenseMap) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
return clone;
|
|
138
|
+
const clone = new Map(exixtenseMap);
|
|
139
|
+
for (const modelClass of clone.keys()) {
|
|
140
|
+
clone.set(modelClass, new Map(clone.get(modelClass)));
|
|
141
|
+
}
|
|
142
|
+
return clone;
|
|
180
143
|
}
|
|
181
|
-
|
|
182
144
|
module.exports = {
|
|
183
|
-
|
|
145
|
+
GraphNodeDbExistence,
|
|
184
146
|
};
|
|
@@ -1,27 +1,21 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
3
2
|
class GraphOperation {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
createActions() {
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
3
|
+
constructor(graphData) {
|
|
4
|
+
this.graphData = graphData;
|
|
5
|
+
}
|
|
6
|
+
get graph() {
|
|
7
|
+
return this.graphData.graph;
|
|
8
|
+
}
|
|
9
|
+
get currentGraph() {
|
|
10
|
+
return this.graphData.currentGraph;
|
|
11
|
+
}
|
|
12
|
+
get graphOptions() {
|
|
13
|
+
return this.graphData.graphOptions;
|
|
14
|
+
}
|
|
15
|
+
createActions() {
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
23
18
|
}
|
|
24
|
-
|
|
25
19
|
module.exports = {
|
|
26
|
-
|
|
20
|
+
GraphOperation,
|
|
27
21
|
};
|