masterrecord 0.3.62 → 0.3.64
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/Entity/entityTrackerModel.js +1 -0
- package/SQLLiteEngine.js +9 -15
- package/mySQLEngine.js +10 -15
- package/package.json +1 -1
- package/postgresEngine.js +10 -15
|
@@ -44,6 +44,7 @@ class EntityTrackerModel {
|
|
|
44
44
|
modelClass["__proto__"]["_" + modelField] = transformedValue;
|
|
45
45
|
|
|
46
46
|
Object.defineProperty(modelClass,modelField, {
|
|
47
|
+
enumerable: true,
|
|
47
48
|
set: function(value) {
|
|
48
49
|
// Run validators before setting value
|
|
49
50
|
const fieldDef = currentEntity[modelField];
|
package/SQLLiteEngine.js
CHANGED
|
@@ -797,17 +797,11 @@ class SQLLiteEngine {
|
|
|
797
797
|
var fieldName = dirtyFields[column];
|
|
798
798
|
var entityDef = model.__entity[fieldName];
|
|
799
799
|
if(entityDef && entityDef.nullable === false && entityDef.primary !== true){
|
|
800
|
-
//
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
break;
|
|
806
|
-
case "belongsTo":
|
|
807
|
-
persistedValue = model["_" + fieldName] !== undefined ? model["_" + fieldName] : model[fieldName];
|
|
808
|
-
break;
|
|
809
|
-
default:
|
|
810
|
-
persistedValue = model[fieldName];
|
|
800
|
+
// Read the raw backing field to get the set()-transformed value,
|
|
801
|
+
// bypassing get() which may change the type (e.g. parseFloat)
|
|
802
|
+
var persistedValue = model["_" + fieldName];
|
|
803
|
+
if(persistedValue === undefined){
|
|
804
|
+
persistedValue = model[fieldName];
|
|
811
805
|
}
|
|
812
806
|
var isEmptyString = (typeof persistedValue === 'string') && (persistedValue.trim() === '');
|
|
813
807
|
if(persistedValue === undefined || persistedValue === null || isEmptyString){
|
|
@@ -862,7 +856,7 @@ class SQLLiteEngine {
|
|
|
862
856
|
params.push(intValue);
|
|
863
857
|
break;
|
|
864
858
|
case "string":
|
|
865
|
-
var strValue = model[dirtyFields[column]];
|
|
859
|
+
var strValue = model["_" + dirtyFields[column]];
|
|
866
860
|
|
|
867
861
|
// 🔥 Apply toDatabase transformer before validation
|
|
868
862
|
try {
|
|
@@ -880,7 +874,7 @@ class SQLLiteEngine {
|
|
|
880
874
|
params.push(strValue);
|
|
881
875
|
break;
|
|
882
876
|
case "boolean":
|
|
883
|
-
var boolValue = model[dirtyFields[column]];
|
|
877
|
+
var boolValue = model["_" + dirtyFields[column]];
|
|
884
878
|
|
|
885
879
|
// 🔥 Apply toDatabase transformer before validation
|
|
886
880
|
try {
|
|
@@ -902,7 +896,7 @@ class SQLLiteEngine {
|
|
|
902
896
|
params.push(boolValue);
|
|
903
897
|
break;
|
|
904
898
|
case "time":
|
|
905
|
-
var timeValue = model[dirtyFields[column]];
|
|
899
|
+
var timeValue = model["_" + dirtyFields[column]];
|
|
906
900
|
|
|
907
901
|
// 🔥 Apply toDatabase transformer before validation
|
|
908
902
|
try {
|
|
@@ -925,7 +919,7 @@ class SQLLiteEngine {
|
|
|
925
919
|
break;
|
|
926
920
|
default:
|
|
927
921
|
sqlParts.push(`[${dirtyFields[column]}] = ?`);
|
|
928
|
-
params.push(model[dirtyFields[column]]);
|
|
922
|
+
params.push(model["_" + dirtyFields[column]]);
|
|
929
923
|
}
|
|
930
924
|
}
|
|
931
925
|
|
package/mySQLEngine.js
CHANGED
|
@@ -520,16 +520,11 @@ class MySQLEngine {
|
|
|
520
520
|
const entityDef = model.__entity[fieldName];
|
|
521
521
|
|
|
522
522
|
if (entityDef && entityDef.nullable === false && entityDef.primary !== true) {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
case "belongsTo":
|
|
529
|
-
persistedValue = model["_" + fieldName] !== undefined ? model["_" + fieldName] : model[fieldName];
|
|
530
|
-
break;
|
|
531
|
-
default:
|
|
532
|
-
persistedValue = model[fieldName];
|
|
523
|
+
// Read the raw backing field to get the set()-transformed value,
|
|
524
|
+
// bypassing get() which may change the type (e.g. parseFloat)
|
|
525
|
+
let persistedValue = model["_" + fieldName];
|
|
526
|
+
if (persistedValue === undefined) {
|
|
527
|
+
persistedValue = model[fieldName];
|
|
533
528
|
}
|
|
534
529
|
const isEmptyString = (typeof persistedValue === 'string') && (persistedValue.trim() === '');
|
|
535
530
|
if (persistedValue === undefined || persistedValue === null || isEmptyString) {
|
|
@@ -578,7 +573,7 @@ class MySQLEngine {
|
|
|
578
573
|
break;
|
|
579
574
|
|
|
580
575
|
case "string":
|
|
581
|
-
let strValue = model[dirtyFields[column]];
|
|
576
|
+
let strValue = model["_" + dirtyFields[column]];
|
|
582
577
|
try {
|
|
583
578
|
strValue = FieldTransformer.toDatabase(strValue, model.__entity[dirtyFields[column]], model.__entity.__name, dirtyFields[column]);
|
|
584
579
|
} catch (transformError) {
|
|
@@ -594,7 +589,7 @@ class MySQLEngine {
|
|
|
594
589
|
break;
|
|
595
590
|
|
|
596
591
|
case "boolean":
|
|
597
|
-
let boolValue = model[dirtyFields[column]];
|
|
592
|
+
let boolValue = model["_" + dirtyFields[column]];
|
|
598
593
|
try {
|
|
599
594
|
boolValue = FieldTransformer.toDatabase(boolValue, model.__entity[dirtyFields[column]], model.__entity.__name, dirtyFields[column]);
|
|
600
595
|
} catch (transformError) {
|
|
@@ -612,7 +607,7 @@ class MySQLEngine {
|
|
|
612
607
|
break;
|
|
613
608
|
|
|
614
609
|
case "time":
|
|
615
|
-
let timeValue = model[dirtyFields[column]];
|
|
610
|
+
let timeValue = model["_" + dirtyFields[column]];
|
|
616
611
|
try {
|
|
617
612
|
timeValue = FieldTransformer.toDatabase(timeValue, model.__entity[dirtyFields[column]], model.__entity.__name, dirtyFields[column]);
|
|
618
613
|
} catch (transformError) {
|
|
@@ -629,12 +624,12 @@ class MySQLEngine {
|
|
|
629
624
|
|
|
630
625
|
case "hasMany":
|
|
631
626
|
sqlParts.push(`\`${dirtyFields[column]}\` = ?`);
|
|
632
|
-
params.push(model[dirtyFields[column]]);
|
|
627
|
+
params.push(model["_" + dirtyFields[column]]);
|
|
633
628
|
break;
|
|
634
629
|
|
|
635
630
|
default:
|
|
636
631
|
sqlParts.push(`\`${dirtyFields[column]}\` = ?`);
|
|
637
|
-
params.push(model[dirtyFields[column]]);
|
|
632
|
+
params.push(model["_" + dirtyFields[column]]);
|
|
638
633
|
}
|
|
639
634
|
}
|
|
640
635
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "masterrecord",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.64",
|
|
4
4
|
"description": "An Object-relational mapping for the Master framework. Master Record connects classes to relational database tables to establish a database with almost zero-configuration ",
|
|
5
5
|
"main": "MasterRecord.js",
|
|
6
6
|
"bin": {
|
package/postgresEngine.js
CHANGED
|
@@ -457,16 +457,11 @@ class postgresEngine {
|
|
|
457
457
|
|
|
458
458
|
// Check for required fields
|
|
459
459
|
if (entityDef && entityDef.nullable === false && entityDef.primary !== true) {
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
case "belongsTo":
|
|
466
|
-
persistedValue = model["_" + fieldName] !== undefined ? model["_" + fieldName] : model[fieldName];
|
|
467
|
-
break;
|
|
468
|
-
default:
|
|
469
|
-
persistedValue = model[fieldName];
|
|
460
|
+
// Read the raw backing field to get the set()-transformed value,
|
|
461
|
+
// bypassing get() which may change the type (e.g. parseFloat)
|
|
462
|
+
let persistedValue = model["_" + fieldName];
|
|
463
|
+
if (persistedValue === undefined) {
|
|
464
|
+
persistedValue = model[fieldName];
|
|
470
465
|
}
|
|
471
466
|
const isEmptyString = (typeof persistedValue === 'string') && (persistedValue.trim() === '');
|
|
472
467
|
if (persistedValue === undefined || persistedValue === null || isEmptyString) {
|
|
@@ -519,7 +514,7 @@ class postgresEngine {
|
|
|
519
514
|
break;
|
|
520
515
|
|
|
521
516
|
case "string":
|
|
522
|
-
let strValue = model[dirtyFields[column]];
|
|
517
|
+
let strValue = model["_" + dirtyFields[column]];
|
|
523
518
|
// Apply toDatabase transformer
|
|
524
519
|
try {
|
|
525
520
|
strValue = FieldTransformer.toDatabase(strValue, model.__entity[dirtyFields[column]], model.__entity.__name, dirtyFields[column]);
|
|
@@ -537,7 +532,7 @@ class postgresEngine {
|
|
|
537
532
|
break;
|
|
538
533
|
|
|
539
534
|
case "boolean":
|
|
540
|
-
let boolValue = model[dirtyFields[column]];
|
|
535
|
+
let boolValue = model["_" + dirtyFields[column]];
|
|
541
536
|
// Apply toDatabase transformer
|
|
542
537
|
try {
|
|
543
538
|
boolValue = FieldTransformer.toDatabase(boolValue, model.__entity[dirtyFields[column]], model.__entity.__name, dirtyFields[column]);
|
|
@@ -555,7 +550,7 @@ class postgresEngine {
|
|
|
555
550
|
break;
|
|
556
551
|
|
|
557
552
|
case "time":
|
|
558
|
-
let timeValue = model[dirtyFields[column]];
|
|
553
|
+
let timeValue = model["_" + dirtyFields[column]];
|
|
559
554
|
// Apply toDatabase transformer
|
|
560
555
|
try {
|
|
561
556
|
timeValue = FieldTransformer.toDatabase(timeValue, model.__entity[dirtyFields[column]], model.__entity.__name, dirtyFields[column]);
|
|
@@ -574,12 +569,12 @@ class postgresEngine {
|
|
|
574
569
|
|
|
575
570
|
case "hasMany":
|
|
576
571
|
sqlParts.push(`${dirtyFields[column]} = $${paramIndex++}`);
|
|
577
|
-
params.push(model[dirtyFields[column]]);
|
|
572
|
+
params.push(model["_" + dirtyFields[column]]);
|
|
578
573
|
break;
|
|
579
574
|
|
|
580
575
|
default:
|
|
581
576
|
sqlParts.push(`${dirtyFields[column]} = $${paramIndex++}`);
|
|
582
|
-
params.push(model[dirtyFields[column]]);
|
|
577
|
+
params.push(model["_" + dirtyFields[column]]);
|
|
583
578
|
}
|
|
584
579
|
}
|
|
585
580
|
|