pure-orm 4.0.2 → 4.1.4
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/.benchmarks/bench-core-baseline.json +303 -0
- package/.eslintrc.json +20 -10
- package/README.md +0 -7
- package/coverage/clover.xml +1493 -1232
- package/coverage/coverage-final.json +103 -103
- package/coverage/lcov-report/dist/src/core.js.html +590 -383
- package/coverage/lcov-report/dist/src/driver-integrations/index.html +20 -20
- package/coverage/lcov-report/dist/src/driver-integrations/pgp.js.html +52 -52
- package/coverage/lcov-report/dist/src/index.html +28 -28
- package/coverage/lcov-report/dist/src/index.js.html +2 -2
- package/coverage/lcov-report/dist/src/orm.js.html +392 -209
- package/coverage/lcov-report/dist/test-utils/blog/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/blog/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/blog/models/article.js.html +15 -15
- package/coverage/lcov-report/dist/test-utils/blog/models/article_tag.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/blog/models/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/blog/models/person.js.html +13 -13
- package/coverage/lcov-report/dist/test-utils/blog/models/tag.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/five/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/five/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/five/models/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/five/models/line-item.js.html +4 -4
- package/coverage/lcov-report/dist/test-utils/five/models/order.js.html +3 -3
- package/coverage/lcov-report/dist/test-utils/five/models/parcel-event.js.html +6 -6
- package/coverage/lcov-report/dist/test-utils/five/models/parcel-line-item.js.html +7 -7
- package/coverage/lcov-report/dist/test-utils/five/models/parcel.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/fourteen/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/fourteen/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/fourteen/models/customer.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/fourteen/models/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/fourteen/models/person.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/nine/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/nine/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/nine/models/feature-switch.js.html +6 -6
- package/coverage/lcov-report/dist/test-utils/nine/models/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/order/entities.js.html +9 -9
- package/coverage/lcov-report/dist/test-utils/order/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/order/models/index.html +14 -14
- package/coverage/lcov-report/dist/test-utils/order/models/line-item.js.html +11 -11
- package/coverage/lcov-report/dist/test-utils/order/models/order.js.html +41 -41
- package/coverage/lcov-report/dist/test-utils/order/models/product-variant.js.html +18 -18
- package/coverage/lcov-report/dist/test-utils/order/models/product.js.html +17 -17
- package/coverage/lcov-report/dist/test-utils/order/models/utm-source.js.html +12 -12
- package/coverage/lcov-report/dist/test-utils/order-more/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/order-more/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/order-more/models/actual-product-variant.js.html +3 -3
- package/coverage/lcov-report/dist/test-utils/order-more/models/color.js.html +6 -6
- package/coverage/lcov-report/dist/test-utils/order-more/models/customer.js.html +3 -3
- package/coverage/lcov-report/dist/test-utils/order-more/models/gender.js.html +4 -4
- package/coverage/lcov-report/dist/test-utils/order-more/models/index.html +23 -23
- package/coverage/lcov-report/dist/test-utils/order-more/models/inventory-level.js.html +11 -11
- package/coverage/lcov-report/dist/test-utils/order-more/models/line-item.js.html +15 -15
- package/coverage/lcov-report/dist/test-utils/order-more/models/order.js.html +39 -39
- package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-event.js.html +6 -6
- package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-line-item.js.html +7 -7
- package/coverage/lcov-report/dist/test-utils/order-more/models/parcel.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/order-more/models/physical-address.js.html +12 -12
- package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant-image.js.html +7 -7
- package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant.js.html +22 -22
- package/coverage/lcov-report/dist/test-utils/order-more/models/product.js.html +11 -11
- package/coverage/lcov-report/dist/test-utils/order-more/models/refund.js.html +11 -11
- package/coverage/lcov-report/dist/test-utils/order-more/models/shipment-actual-product-variant.js.html +9 -9
- package/coverage/lcov-report/dist/test-utils/order-more/models/shipment.js.html +4 -4
- package/coverage/lcov-report/dist/test-utils/order-more/models/size.js.html +4 -4
- package/coverage/lcov-report/dist/test-utils/order-more/models/utm-medium.js.html +15 -15
- package/coverage/lcov-report/dist/test-utils/order-more/models/utm-source.js.html +17 -17
- package/coverage/lcov-report/dist/test-utils/six/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/six/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/six/models/customer.js.html +3 -3
- package/coverage/lcov-report/dist/test-utils/six/models/index.html +21 -21
- package/coverage/lcov-report/dist/test-utils/six/models/line-item.js.html +10 -10
- package/coverage/lcov-report/dist/test-utils/six/models/order.js.html +13 -13
- package/coverage/lcov-report/dist/test-utils/six/models/parcel-line-item.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/six/models/parcel.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/thirteen/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/thirteen/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/thirteen/models/audience.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/thirteen/models/brand.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/thirteen/models/category.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/thirteen/models/index.html +14 -14
- package/coverage/lcov-report/dist/test-utils/thirteen/models/member.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/thirteen/models/passion.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/thirteen/models/product.js.html +10 -10
- package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation-audience.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/three/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/three/results.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/twelve/entities.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/twelve/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/twelve/models/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/twelve/models/member.js.html +1 -1
- package/coverage/lcov-report/dist/test-utils/twelve/models/prompt.js.html +2 -2
- package/coverage/lcov-report/dist/test-utils/two/index.html +1 -1
- package/coverage/lcov-report/dist/test-utils/two/results.js.html +1 -1
- package/coverage/lcov-report/index.html +103 -103
- package/coverage/lcov-report/src/core.ts.html +841 -415
- package/coverage/lcov-report/src/driver-integrations/index.html +20 -20
- package/coverage/lcov-report/src/driver-integrations/pgp.ts.html +63 -63
- package/coverage/lcov-report/src/index.html +28 -28
- package/coverage/lcov-report/src/index.ts.html +1 -1
- package/coverage/lcov-report/src/orm.ts.html +388 -298
- package/coverage/lcov-report/test-utils/blog/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/blog/index.html +1 -1
- package/coverage/lcov-report/test-utils/blog/models/article.ts.html +15 -15
- package/coverage/lcov-report/test-utils/blog/models/article_tag.ts.html +2 -2
- package/coverage/lcov-report/test-utils/blog/models/index.html +1 -1
- package/coverage/lcov-report/test-utils/blog/models/person.ts.html +13 -13
- package/coverage/lcov-report/test-utils/blog/models/tag.ts.html +1 -1
- package/coverage/lcov-report/test-utils/five/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/five/index.html +1 -1
- package/coverage/lcov-report/test-utils/five/models/index.html +1 -1
- package/coverage/lcov-report/test-utils/five/models/line-item.ts.html +4 -4
- package/coverage/lcov-report/test-utils/five/models/order.ts.html +3 -3
- package/coverage/lcov-report/test-utils/five/models/parcel-event.ts.html +6 -6
- package/coverage/lcov-report/test-utils/five/models/parcel-line-item.ts.html +7 -7
- package/coverage/lcov-report/test-utils/five/models/parcel.ts.html +2 -2
- package/coverage/lcov-report/test-utils/fourteen/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/fourteen/index.html +1 -1
- package/coverage/lcov-report/test-utils/fourteen/models/customer.ts.html +1 -1
- package/coverage/lcov-report/test-utils/fourteen/models/index.html +1 -1
- package/coverage/lcov-report/test-utils/fourteen/models/person.ts.html +1 -1
- package/coverage/lcov-report/test-utils/nine/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/nine/index.html +1 -1
- package/coverage/lcov-report/test-utils/nine/models/feature-switch.ts.html +8 -8
- package/coverage/lcov-report/test-utils/nine/models/index.html +1 -1
- package/coverage/lcov-report/test-utils/order/entities.ts.html +2 -2
- package/coverage/lcov-report/test-utils/order/index.html +1 -1
- package/coverage/lcov-report/test-utils/order/models/index.html +14 -14
- package/coverage/lcov-report/test-utils/order/models/line-item.ts.html +5 -5
- package/coverage/lcov-report/test-utils/order/models/order.ts.html +36 -36
- package/coverage/lcov-report/test-utils/order/models/product-variant.ts.html +13 -13
- package/coverage/lcov-report/test-utils/order/models/product.ts.html +13 -13
- package/coverage/lcov-report/test-utils/order/models/utm-source.ts.html +8 -8
- package/coverage/lcov-report/test-utils/order-more/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/order-more/index.html +1 -1
- package/coverage/lcov-report/test-utils/order-more/models/actual-product-variant.ts.html +3 -3
- package/coverage/lcov-report/test-utils/order-more/models/color.ts.html +6 -6
- package/coverage/lcov-report/test-utils/order-more/models/customer.ts.html +3 -3
- package/coverage/lcov-report/test-utils/order-more/models/gender.ts.html +4 -4
- package/coverage/lcov-report/test-utils/order-more/models/index.html +23 -23
- package/coverage/lcov-report/test-utils/order-more/models/inventory-level.ts.html +11 -11
- package/coverage/lcov-report/test-utils/order-more/models/line-item.ts.html +15 -15
- package/coverage/lcov-report/test-utils/order-more/models/order.ts.html +45 -45
- package/coverage/lcov-report/test-utils/order-more/models/parcel-event.ts.html +6 -6
- package/coverage/lcov-report/test-utils/order-more/models/parcel-line-item.ts.html +7 -7
- package/coverage/lcov-report/test-utils/order-more/models/parcel.ts.html +2 -2
- package/coverage/lcov-report/test-utils/order-more/models/physical-address.ts.html +12 -12
- package/coverage/lcov-report/test-utils/order-more/models/product-variant-image.ts.html +7 -7
- package/coverage/lcov-report/test-utils/order-more/models/product-variant.ts.html +22 -22
- package/coverage/lcov-report/test-utils/order-more/models/product.ts.html +11 -11
- package/coverage/lcov-report/test-utils/order-more/models/refund.ts.html +11 -11
- package/coverage/lcov-report/test-utils/order-more/models/shipment-actual-product-variant.ts.html +9 -9
- package/coverage/lcov-report/test-utils/order-more/models/shipment.ts.html +4 -4
- package/coverage/lcov-report/test-utils/order-more/models/size.ts.html +4 -4
- package/coverage/lcov-report/test-utils/order-more/models/utm-medium.ts.html +15 -15
- package/coverage/lcov-report/test-utils/order-more/models/utm-source.ts.html +17 -17
- package/coverage/lcov-report/test-utils/six/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/six/index.html +1 -1
- package/coverage/lcov-report/test-utils/six/models/customer.ts.html +3 -3
- package/coverage/lcov-report/test-utils/six/models/index.html +21 -21
- package/coverage/lcov-report/test-utils/six/models/line-item.ts.html +10 -10
- package/coverage/lcov-report/test-utils/six/models/order.ts.html +13 -13
- package/coverage/lcov-report/test-utils/six/models/parcel-line-item.ts.html +2 -2
- package/coverage/lcov-report/test-utils/six/models/parcel.ts.html +2 -2
- package/coverage/lcov-report/test-utils/thirteen/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/thirteen/index.html +1 -1
- package/coverage/lcov-report/test-utils/thirteen/models/audience.ts.html +2 -2
- package/coverage/lcov-report/test-utils/thirteen/models/brand.ts.html +2 -2
- package/coverage/lcov-report/test-utils/thirteen/models/category.ts.html +1 -1
- package/coverage/lcov-report/test-utils/thirteen/models/index.html +14 -14
- package/coverage/lcov-report/test-utils/thirteen/models/member.ts.html +2 -2
- package/coverage/lcov-report/test-utils/thirteen/models/passion.ts.html +2 -2
- package/coverage/lcov-report/test-utils/thirteen/models/product.ts.html +10 -10
- package/coverage/lcov-report/test-utils/thirteen/models/recommendation-audience.ts.html +2 -2
- package/coverage/lcov-report/test-utils/thirteen/models/recommendation.ts.html +2 -2
- package/coverage/lcov-report/test-utils/three/index.html +1 -1
- package/coverage/lcov-report/test-utils/three/results.js.html +1 -1
- package/coverage/lcov-report/test-utils/twelve/entities.ts.html +1 -1
- package/coverage/lcov-report/test-utils/twelve/index.html +1 -1
- package/coverage/lcov-report/test-utils/twelve/models/index.html +1 -1
- package/coverage/lcov-report/test-utils/twelve/models/member.ts.html +1 -1
- package/coverage/lcov-report/test-utils/twelve/models/prompt.ts.html +2 -2
- package/coverage/lcov-report/test-utils/two/index.html +1 -1
- package/coverage/lcov-report/test-utils/two/results.js.html +1 -1
- package/coverage/lcov.info +2136 -1991
- package/dist/example/data-access/person.d.ts +1 -1
- package/dist/src/core.d.ts +13 -7
- package/dist/src/core.js +258 -189
- package/dist/src/core.spec.js +413 -0
- package/dist/src/driver-integrations/index.d.ts +5 -5
- package/dist/src/driver-integrations/pgp.spec.d.ts +1 -0
- package/dist/src/driver-integrations/pgp.spec.js +376 -0
- package/dist/src/orm.d.ts +9 -9
- package/dist/src/orm.js +137 -76
- package/dist/src/orm.spec.js +535 -85
- package/dist/test-utils/nine/models/feature-switch.d.ts +2 -2
- package/dist/test-utils/nine/models/feature-switch.ts +2 -2
- package/example/data-access/person.ts +1 -1
- package/package.json +9 -6
- package/scripts/bench-core.js +636 -0
- package/scripts/check-bench-scenarios.js +47 -0
- package/src/core.spec.ts +485 -2
- package/src/core.ts +369 -227
- package/src/driver-integrations/index.ts +5 -5
- package/src/driver-integrations/pgp.spec.ts +444 -0
- package/src/driver-integrations/pgp.ts +5 -5
- package/src/orm.spec.ts +592 -88
- package/src/orm.ts +173 -143
- package/test-utils/nine/models/feature-switch.ts +2 -2
package/dist/src/orm.js
CHANGED
|
@@ -12,161 +12,222 @@ const create = ({ entities: externalEntities, db, logError }) => {
|
|
|
12
12
|
else {
|
|
13
13
|
throw new Error(`You're database driver is not yet supported. You can make a PR to add it, or use the \`createCore\` export which doesn't try to abstract over the database driver, and instead you pass the results of the database driver queries to it.`);
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const helperPlanByEntity = new Map();
|
|
16
|
+
const getHelperPlan = (entity) => {
|
|
17
|
+
let plan = helperPlanByEntity.get(entity);
|
|
18
|
+
if (!plan) {
|
|
19
|
+
const quotedColumns = new Array(entity.columnNames.length);
|
|
20
|
+
const updateClausePrefixes = new Array(entity.columnNames.length);
|
|
21
|
+
const wherePositionalPrefixes = new Array(entity.columnNames.length);
|
|
22
|
+
const whereNamedPrefixes = new Array(entity.columnNames.length);
|
|
23
|
+
for (let i = 0; i < entity.columnNames.length; i++) {
|
|
24
|
+
const column = entity.columnNames[i];
|
|
25
|
+
quotedColumns[i] = `"${column}"`;
|
|
26
|
+
updateClausePrefixes[i] = `"${column}" = $`;
|
|
27
|
+
wherePositionalPrefixes[i] = `"${entity.tableName}"."${column}" = $`;
|
|
28
|
+
whereNamedPrefixes[i] = `"${entity.tableName}"."${column}" = $(`;
|
|
29
|
+
}
|
|
30
|
+
plan = {
|
|
31
|
+
quotedColumns,
|
|
32
|
+
updateClausePrefixes,
|
|
33
|
+
wherePositionalPrefixes,
|
|
34
|
+
whereNamedPrefixes
|
|
35
|
+
};
|
|
36
|
+
helperPlanByEntity.set(entity, plan);
|
|
37
|
+
}
|
|
38
|
+
return plan;
|
|
39
|
+
};
|
|
18
40
|
const getSqlInsertParts = (model) => {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
const entity = orm.getEntityByModel(model);
|
|
42
|
+
const { columnNames, propertyNames } = entity;
|
|
43
|
+
const helperPlan = getHelperPlan(entity);
|
|
44
|
+
let columns = '';
|
|
45
|
+
const values = [];
|
|
46
|
+
const valuesVar = [];
|
|
47
|
+
let paramIndex = 1;
|
|
48
|
+
for (let i = 0; i < columnNames.length; i++) {
|
|
49
|
+
const val = model[propertyNames[i]];
|
|
50
|
+
if (val !== void 0) {
|
|
51
|
+
if (columns) {
|
|
52
|
+
columns += ', ';
|
|
53
|
+
}
|
|
54
|
+
columns += helperPlan.quotedColumns[i];
|
|
55
|
+
values.push(val);
|
|
56
|
+
valuesVar.push(`$${paramIndex}`);
|
|
57
|
+
paramIndex++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
29
60
|
return { columns, values, valuesVar };
|
|
30
61
|
};
|
|
31
62
|
const getSqlUpdateParts = (model, on = 'id') => {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
63
|
+
const entity = orm.getEntityByModel(model);
|
|
64
|
+
const { columnNames, propertyNames } = entity;
|
|
65
|
+
const helperPlan = getHelperPlan(entity);
|
|
66
|
+
let clause = '';
|
|
67
|
+
const values = [];
|
|
68
|
+
let paramIndex = 1;
|
|
69
|
+
for (let i = 0; i < columnNames.length; i++) {
|
|
70
|
+
const val = model[propertyNames[i]];
|
|
71
|
+
if (val !== void 0) {
|
|
72
|
+
if (clause) {
|
|
73
|
+
clause += ', ';
|
|
74
|
+
}
|
|
75
|
+
clause += helperPlan.updateClausePrefixes[i] + paramIndex;
|
|
76
|
+
values.push(val);
|
|
77
|
+
paramIndex++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const idVar = `$${paramIndex}`;
|
|
81
|
+
values.push(model[on]);
|
|
43
82
|
return { clause, idVar, values };
|
|
44
83
|
};
|
|
45
84
|
const getMatchingParts = (model) => {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
85
|
+
const entity = orm.getEntityByModel(model);
|
|
86
|
+
const { propertyNames, columnNames } = entity;
|
|
87
|
+
const helperPlan = getHelperPlan(entity);
|
|
88
|
+
const values = [];
|
|
89
|
+
let paramIndex = 1;
|
|
90
|
+
let whereClause = '';
|
|
91
|
+
for (let i = 0; i < propertyNames.length; i++) {
|
|
92
|
+
const val = model[propertyNames[i]];
|
|
93
|
+
if (val != null) {
|
|
94
|
+
if (whereClause) {
|
|
95
|
+
whereClause += ' AND ';
|
|
96
|
+
}
|
|
97
|
+
whereClause += helperPlan.wherePositionalPrefixes[i] + paramIndex;
|
|
98
|
+
values.push(val);
|
|
99
|
+
paramIndex++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
60
102
|
return { whereClause, values };
|
|
61
103
|
};
|
|
62
104
|
// This one returns an object, which allows it to be more versatile.
|
|
63
105
|
// To-do: make this one even better and use it instead of the one above.
|
|
64
106
|
const getMatchingPartsObject = (model) => {
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
107
|
+
const entity = orm.getEntityByModel(model);
|
|
108
|
+
const { propertyNames, columnNames } = entity;
|
|
109
|
+
const helperPlan = getHelperPlan(entity);
|
|
110
|
+
const values = {};
|
|
111
|
+
let paramIndex = 1;
|
|
112
|
+
let whereClause = '';
|
|
113
|
+
for (let i = 0; i < propertyNames.length; i++) {
|
|
114
|
+
const val = model[propertyNames[i]];
|
|
115
|
+
if (val != null) {
|
|
116
|
+
if (whereClause) {
|
|
117
|
+
whereClause += ' AND ';
|
|
118
|
+
}
|
|
119
|
+
whereClause += helperPlan.whereNamedPrefixes[i] + paramIndex + ')';
|
|
120
|
+
values[paramIndex] = val;
|
|
121
|
+
paramIndex++;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
80
124
|
return { whereClause, values };
|
|
81
125
|
};
|
|
82
126
|
const getNewWith = (model, sqlColumns, values) => {
|
|
83
127
|
const Constructor = model.constructor;
|
|
84
|
-
const
|
|
85
|
-
const modelData =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
128
|
+
const entity = orm.getEntityByModel(model);
|
|
129
|
+
const modelData = {};
|
|
130
|
+
for (let i = 0; i < sqlColumns.length; i++) {
|
|
131
|
+
const propertyName = entity.columnToPropertyMap.get(sqlColumns[i]);
|
|
132
|
+
if (propertyName) {
|
|
133
|
+
modelData[propertyName] = values[i];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
89
136
|
return new Constructor(modelData);
|
|
90
137
|
};
|
|
91
138
|
const getValueBySqlColumn = (model, sqlColumn) => {
|
|
92
|
-
|
|
139
|
+
const entity = orm.getEntityByModel(model);
|
|
140
|
+
const propertyName = entity.columnToPropertyMap.get(sqlColumn);
|
|
141
|
+
return propertyName
|
|
142
|
+
? model[propertyName]
|
|
143
|
+
: undefined;
|
|
93
144
|
};
|
|
94
145
|
const getSqlColumnForPropertyName = (model, propertyName) => {
|
|
95
|
-
|
|
146
|
+
const entity = orm.getEntityByModel(model);
|
|
147
|
+
const column = entity.propertyToColumnMap.get(propertyName);
|
|
148
|
+
return column;
|
|
96
149
|
};
|
|
97
150
|
/* ------------------------------------------------------------------------*/
|
|
98
151
|
/* Built-in basic CRUD functions ------------------------------------------*/
|
|
99
152
|
/* ------------------------------------------------------------------------*/
|
|
100
153
|
// Standard create
|
|
101
154
|
const create = (model) => {
|
|
155
|
+
const entity = orm.getEntityByModel(model);
|
|
102
156
|
const { columns, values, valuesVar } = getSqlInsertParts(model);
|
|
103
157
|
const query = `
|
|
104
|
-
INSERT INTO "${
|
|
158
|
+
INSERT INTO "${entity.tableName}" ( ${columns} )
|
|
105
159
|
VALUES ( ${valuesVar} )
|
|
106
|
-
RETURNING ${
|
|
160
|
+
RETURNING ${entity.selectColumnsClause};
|
|
107
161
|
`;
|
|
108
162
|
return orm.one(query, values);
|
|
109
163
|
};
|
|
110
164
|
// Standard update
|
|
111
165
|
const update = (model, { on = 'id' } = {}) => {
|
|
166
|
+
const entity = orm.getEntityByModel(model);
|
|
112
167
|
const { clause, idVar, values } = getSqlUpdateParts(model, on);
|
|
113
168
|
const query = `
|
|
114
|
-
UPDATE "${
|
|
169
|
+
UPDATE "${entity.tableName}"
|
|
115
170
|
SET ${clause}
|
|
116
|
-
WHERE "${
|
|
117
|
-
RETURNING ${
|
|
171
|
+
WHERE "${entity.tableName}".${getSqlColumnForPropertyName(model, on)} = ${idVar}
|
|
172
|
+
RETURNING ${entity.selectColumnsClause};
|
|
118
173
|
`;
|
|
119
174
|
return orm.one(query, values);
|
|
120
175
|
};
|
|
121
176
|
// Standard delete
|
|
122
177
|
const _delete = (model) => {
|
|
178
|
+
const entity = orm.getEntityByModel(model);
|
|
123
179
|
const id = model.id;
|
|
124
180
|
const query = `
|
|
125
|
-
DELETE FROM "${
|
|
126
|
-
WHERE "${
|
|
181
|
+
DELETE FROM "${entity.tableName}"
|
|
182
|
+
WHERE "${entity.tableName}".id = $(id)
|
|
127
183
|
`;
|
|
128
184
|
return orm.none(query, { id });
|
|
129
185
|
};
|
|
130
186
|
const deleteMatching = (model) => {
|
|
187
|
+
const entity = orm.getEntityByModel(model);
|
|
131
188
|
const { whereClause, values } = getMatchingParts(model);
|
|
132
189
|
const query = `
|
|
133
|
-
DELETE FROM "${
|
|
190
|
+
DELETE FROM "${entity.tableName}"
|
|
134
191
|
WHERE ${whereClause};
|
|
135
192
|
`;
|
|
136
193
|
return orm.none(query, values);
|
|
137
194
|
};
|
|
138
195
|
const getMatching = (model) => {
|
|
196
|
+
const entity = orm.getEntityByModel(model);
|
|
139
197
|
const { whereClause, values } = getMatchingParts(model);
|
|
140
198
|
const query = `
|
|
141
|
-
SELECT ${
|
|
142
|
-
FROM "${
|
|
199
|
+
SELECT ${entity.selectColumnsClause}
|
|
200
|
+
FROM "${entity.tableName}"
|
|
143
201
|
WHERE ${whereClause};
|
|
144
202
|
`;
|
|
145
203
|
return orm.one(query, values);
|
|
146
204
|
};
|
|
147
205
|
const getOneOrNoneMatching = (model) => {
|
|
206
|
+
const entity = orm.getEntityByModel(model);
|
|
148
207
|
const { whereClause, values } = getMatchingParts(model);
|
|
149
208
|
const query = `
|
|
150
|
-
SELECT ${
|
|
151
|
-
FROM "${
|
|
209
|
+
SELECT ${entity.selectColumnsClause}
|
|
210
|
+
FROM "${entity.tableName}"
|
|
152
211
|
WHERE ${whereClause};
|
|
153
212
|
`;
|
|
154
213
|
return orm.oneOrNone(query, values);
|
|
155
214
|
};
|
|
156
215
|
const getAnyMatching = (model) => {
|
|
216
|
+
const entity = orm.getEntityByModel(model);
|
|
157
217
|
const { whereClause, values } = getMatchingParts(model);
|
|
158
218
|
const query = `
|
|
159
|
-
SELECT ${
|
|
160
|
-
FROM "${
|
|
219
|
+
SELECT ${entity.selectColumnsClause}
|
|
220
|
+
FROM "${entity.tableName}"
|
|
161
221
|
WHERE ${whereClause};
|
|
162
222
|
`;
|
|
163
223
|
return orm.any(query, values);
|
|
164
224
|
};
|
|
165
225
|
const getAllMatching = (model) => {
|
|
226
|
+
const entity = orm.getEntityByModel(model);
|
|
166
227
|
const { whereClause, values } = getMatchingParts(model);
|
|
167
228
|
const query = `
|
|
168
|
-
SELECT ${
|
|
169
|
-
FROM "${
|
|
229
|
+
SELECT ${entity.selectColumnsClause}
|
|
230
|
+
FROM "${entity.tableName}"
|
|
170
231
|
WHERE ${whereClause};
|
|
171
232
|
`;
|
|
172
233
|
return orm.many(query, values);
|