mythix-orm 1.7.0 → 1.7.2
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.
|
@@ -900,7 +900,7 @@ class ConnectionBase extends EventEmitter {
|
|
|
900
900
|
if (batchModels) {
|
|
901
901
|
for (let i = 0, il = batchModels.length; i < il; i++) {
|
|
902
902
|
let batchModel = batchModels[i];
|
|
903
|
-
batchModel.clearDirty();
|
|
903
|
+
// batchModel.clearDirty();
|
|
904
904
|
finalResults.push(batchModel);
|
|
905
905
|
}
|
|
906
906
|
}
|
|
@@ -922,6 +922,7 @@ class ConnectionBase extends EventEmitter {
|
|
|
922
922
|
let groupedModelMap = this.prepareAllModelsAndSubModelsForOperation(Model, models, options);
|
|
923
923
|
let alreadyStored = {};
|
|
924
924
|
let allDirtyModels = new Set();
|
|
925
|
+
let allStoredModels = new Set();
|
|
925
926
|
let primaryResult;
|
|
926
927
|
|
|
927
928
|
for (let [ modelName, models ] of groupedModelMap) {
|
|
@@ -941,6 +942,8 @@ class ConnectionBase extends EventEmitter {
|
|
|
941
942
|
primaryResult = results;
|
|
942
943
|
|
|
943
944
|
for (let storedModel of results) {
|
|
945
|
+
allStoredModels.add(storedModel);
|
|
946
|
+
|
|
944
947
|
for (let [ groupModelName, groupModels ] of groupedModelMap) {
|
|
945
948
|
if (groupModelName === modelName)
|
|
946
949
|
continue;
|
|
@@ -953,9 +956,8 @@ class ConnectionBase extends EventEmitter {
|
|
|
953
956
|
continue;
|
|
954
957
|
|
|
955
958
|
for (let targetModel of groupModels) {
|
|
956
|
-
Utils.setRelationalValues(this, TargetModel, targetModel, GroupModel, storedModel);
|
|
957
|
-
|
|
958
|
-
if (targetModel.isDirty())
|
|
959
|
+
let hasChanges = Utils.setRelationalValues(this, TargetModel, targetModel, GroupModel, storedModel);
|
|
960
|
+
if (hasChanges)
|
|
959
961
|
allDirtyModels.add(targetModel);
|
|
960
962
|
}
|
|
961
963
|
}
|
|
@@ -968,6 +970,12 @@ class ConnectionBase extends EventEmitter {
|
|
|
968
970
|
if (allDirtyModels.size > 0 && typeof afterOperationCallback === 'function')
|
|
969
971
|
await afterOperationCallback.call(this, Model, allDirtyModels, options, queryGenerator);
|
|
970
972
|
|
|
973
|
+
// Now mark all models as clean and persisted
|
|
974
|
+
for (let storedModel of allStoredModels) {
|
|
975
|
+
storedModel.clearDirty();
|
|
976
|
+
storedModel._persisted = true;
|
|
977
|
+
}
|
|
978
|
+
|
|
971
979
|
return (inputIsArray || !primaryResult) ? primaryResult : primaryResult[0];
|
|
972
980
|
}
|
|
973
981
|
|
|
@@ -996,27 +1004,43 @@ class ConnectionBase extends EventEmitter {
|
|
|
996
1004
|
this.removeAllListeners();
|
|
997
1005
|
}
|
|
998
1006
|
|
|
999
|
-
async runSaveHooks(Model, models, operationHookName, saveHookName,
|
|
1007
|
+
async runSaveHooks(Model, models, operationHookName, saveHookName, _options) {
|
|
1000
1008
|
const throwError = (error) => {
|
|
1001
1009
|
throw error;
|
|
1002
1010
|
};
|
|
1003
1011
|
|
|
1012
|
+
let options = _options || {};
|
|
1004
1013
|
let promises = [];
|
|
1005
1014
|
let context = { connection: this, Model, options, self: null };
|
|
1015
|
+
let skipHooks = options.skipHooks;
|
|
1006
1016
|
|
|
1007
|
-
|
|
1008
|
-
|
|
1017
|
+
const shouldSkipHook = (hookName) => {
|
|
1018
|
+
if (!skipHooks)
|
|
1019
|
+
return false;
|
|
1009
1020
|
|
|
1010
|
-
|
|
1021
|
+
if (skipHooks === true)
|
|
1022
|
+
return true;
|
|
1011
1023
|
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1024
|
+
if (skipHooks[hookName] === true)
|
|
1025
|
+
return true;
|
|
1026
|
+
|
|
1027
|
+
return false;
|
|
1028
|
+
};
|
|
1015
1029
|
|
|
1016
|
-
|
|
1030
|
+
for (let i = 0, il = models.length; i < il; i++) {
|
|
1031
|
+
let model = models[i];
|
|
1032
|
+
let modelContext = { ...context, self: model };
|
|
1033
|
+
|
|
1034
|
+
let promise = (shouldSkipHook(operationHookName)) ? undefined : model[operationHookName](modelContext);
|
|
1017
1035
|
if (!Nife.instanceOf(promise, 'promise'))
|
|
1018
1036
|
promise = Promise.resolve(promise);
|
|
1019
1037
|
|
|
1038
|
+
if (!shouldSkipHook(saveHookName)) {
|
|
1039
|
+
promise = promise.then(async () => await model[saveHookName](modelContext), throwError);
|
|
1040
|
+
if (!Nife.instanceOf(promise, 'promise'))
|
|
1041
|
+
promise = Promise.resolve(promise);
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1020
1044
|
promises.push(promise);
|
|
1021
1045
|
}
|
|
1022
1046
|
|
|
@@ -18,7 +18,7 @@ export declare interface RelationStatus {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
export declare interface ModelsRelationStatuses {
|
|
21
|
-
[
|
|
21
|
+
[key: string]: RelationStatus
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export declare function isUUID(value: any): boolean;
|
|
@@ -70,7 +70,7 @@ export declare function setRelationalValues<T extends Model = Model>(
|
|
|
70
70
|
targetModelInstance: T,
|
|
71
71
|
SourceModel: ModelClass,
|
|
72
72
|
sourceModelInstance: Model,
|
|
73
|
-
):
|
|
73
|
+
): boolean;
|
|
74
74
|
|
|
75
75
|
export declare function assignRelatedModels(model: Model, relatedModels: Model | Array<Model>): void;
|
|
76
76
|
export declare function getPrimaryKeysForModels(
|
|
@@ -81,7 +81,7 @@ export declare function getPrimaryKeysForModels(
|
|
|
81
81
|
includeRelations?: boolean | Array<string>,
|
|
82
82
|
skipRelations?: Array<string>,
|
|
83
83
|
},
|
|
84
|
-
): Array<any> | { [
|
|
84
|
+
): Array<any> | { [key: string]: Array<any> };
|
|
85
85
|
|
|
86
86
|
export declare function buildQueryFromModelsAttributes(
|
|
87
87
|
connection: ConnectionBase,
|
package/lib/utils/model-utils.js
CHANGED
|
@@ -531,9 +531,10 @@ function setRelationalValues(connection, TargetModel, targetModelInstance, Sourc
|
|
|
531
531
|
let sourceModelName = SourceModel.getModelName();
|
|
532
532
|
|
|
533
533
|
if (targetModelName === sourceModelName)
|
|
534
|
-
return
|
|
534
|
+
return false;
|
|
535
535
|
|
|
536
|
-
let fieldSets
|
|
536
|
+
let fieldSets = TargetModel.getForeignKeysTargetFieldNames(connection, sourceModelName);
|
|
537
|
+
let hasChanges = false;
|
|
537
538
|
|
|
538
539
|
// Update fields to related model
|
|
539
540
|
for (let i = 0, il = fieldSets.length; i < il; i++) {
|
|
@@ -548,10 +549,13 @@ function setRelationalValues(connection, TargetModel, targetModelInstance, Sourc
|
|
|
548
549
|
let sourceFieldName = fieldSet.targetFieldName;
|
|
549
550
|
let sourceModelValue = (sourceModelInstance) ? sourceModelInstance[sourceFieldName] : null;
|
|
550
551
|
|
|
551
|
-
targetModelInstance[targetFieldName]
|
|
552
|
+
if (targetModelInstance[targetFieldName] !== sourceModelValue) {
|
|
553
|
+
targetModelInstance[targetFieldName] = sourceModelValue;
|
|
554
|
+
hasChanges = true;
|
|
555
|
+
}
|
|
552
556
|
}
|
|
553
557
|
|
|
554
|
-
return
|
|
558
|
+
return hasChanges;
|
|
555
559
|
}
|
|
556
560
|
|
|
557
561
|
function assignRelatedModels(model, _relatedModels) {
|