orange-orm 4.3.0-beta.3 → 4.3.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/src/getManyDto.js CHANGED
@@ -28,7 +28,7 @@ function newCreateRow(span) {
28
28
  const c = {};
29
29
  c.visitJoin = () => { };
30
30
  c.visitOne = () => { };
31
- c.visitMany = function (leg) {
31
+ c.visitMany = function(leg) {
32
32
  manyNames.push(leg.name);
33
33
  };
34
34
 
@@ -58,11 +58,11 @@ function createProto(columns, span) {
58
58
  }
59
59
  const c = {};
60
60
 
61
- c.visitJoin = function (leg) {
61
+ c.visitJoin = function(leg) {
62
62
  obj[leg.name] = null;
63
63
  };
64
64
  c.visitOne = c.visitJoin;
65
- c.visitMany = function (leg) {
65
+ c.visitMany = function(leg) {
66
66
  obj[leg.name] = null;
67
67
  };
68
68
 
@@ -80,7 +80,7 @@ function hasManyRelations(span) {
80
80
  const c = {};
81
81
  c.visitJoin = () => { };
82
82
  c.visitOne = c.visitJoin;
83
- c.visitMany = function () {
83
+ c.visitMany = function() {
84
84
  result = true;
85
85
  };
86
86
 
@@ -108,52 +108,35 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
108
108
  const outRows = new Array(rowsLength);
109
109
  const createRow = newCreateRow(span);
110
110
  const shouldCreateMap = hasManyRelations(span);
111
- let all = [];;
112
-
113
111
  for (let i = 0; i < rowsLength; i++) {
114
112
  const row = rows[i];
115
113
  let outRow = createRow();
116
114
  let pkWithNullCount = 0;
117
- for (let j = 0; j < primaryColumnsLength; j++) {
118
- if (row[keys[j]] === null)
119
- pkWithNullCount++;
120
- if (pkWithNullCount === primaryColumnsLength) {
121
- outRow = null;
122
- break;
115
+ for (let j = 0; j < columnsLength; j++) {
116
+ if (j < primaryColumnsLength) {
117
+ if (row[keys[j]] === null)
118
+ pkWithNullCount++;
119
+ if (pkWithNullCount === primaryColumnsLength) {
120
+ outRow = null;
121
+ break;
122
+ }
123
123
  }
124
124
  const column = columns[j];
125
125
  outRow[column.alias] = column.decode(row[keys[j]]);
126
+ }
126
127
 
128
+ for (let j = 0; j < aggregateKeys.length; j++) {
129
+ const key = aggregateKeys[j];
130
+ const parse = span.aggregates[key].column?.decode || Number.parseFloat;
131
+ outRow[key] = parse(row[keys[j + columnsLength]]);
127
132
  }
128
133
 
129
- if (shouldCreateMap && outRow) {
134
+ outRows[i] = outRow;
135
+ if (shouldCreateMap) {
130
136
  fkIds[i] = getIds(outRow);
131
137
  addToMap(rowsMap, primaryColumns, outRow);
132
138
  }
133
- outRows[i] = outRow;
134
139
  }
135
-
136
- all.push(new Promise((resolve) => {
137
- setImmediate(async () => {
138
- for (let i = 0; i < rowsLength; i++) {
139
- const currentOutRow = outRows[i];
140
- const currentRow = rows[i];
141
- for (let j = primaryColumnsLength; j < columnsLength; j++) {
142
- const column = columns[j];
143
- currentOutRow[column.alias] = column.decode(currentRow[keys[j]]);
144
- }
145
-
146
- for (let j = 0; j < aggregateKeys.length; j++) {
147
- const key = aggregateKeys[j];
148
- const parse = span.aggregates[key].column?.decode || Number.parseFloat;
149
- currentOutRow[key] = parse(currentRow[keys[j + columnsLength]]);
150
- }
151
- }
152
- resolve();
153
- });
154
- }));
155
-
156
-
157
140
  span._rowsMap = rowsMap;
158
141
  span._ids = fkIds;
159
142
 
@@ -161,107 +144,15 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
161
144
  if (span.legs.toArray().length === 0)
162
145
  return outRows;
163
146
 
164
- //alt 1
165
- // 3.1 sec
166
- // await new Promise((resolve, reject) => {
167
- // setTimeout(() => {
168
- // if (shouldCreateMap)
169
- // decodeManyRelations(strategy, span, rows, outRows, keys)
170
- // .then(() => decodeRelations2(strategy, span, rows, outRows, keys))
171
- // .then(resolve)
172
- // .catch(reject);
173
- // else
174
- // decodeRelations2(strategy, span, rows, outRows, keys)
175
- // .then(resolve)
176
- // .catch(reject);
177
- // }, 0);
178
- // });
179
-
180
-
181
- //alt 1
182
- // 3.2 sec
183
- // await new Promise((resolve, reject) => {
184
- // setTimeout(() => {
185
- // const all = [];
186
- // if (shouldCreateMap)
187
- // all.push(decodeManyRelations(strategy, span, rows, outRows, keys))
188
-
189
- // all.push(new Promise((resolve, reject) => {
190
- // setTimeout(async () => {
191
- // await decodeRelations2(strategy, span, rows, outRows, keys);
192
- // resolve();
193
-
194
- // }, 0);
195
- // }));
196
- // // const p2 = decodeRelations2(strategy, span, rows, outRows, keys);
197
- // Promise.all(all).then(resolve, reject);
198
- // }, 0);
199
- // });
200
-
201
-
202
- // let all = [];;
203
- // if(shouldCreateMap) {
204
-
205
- // await decodeManyRelations(strategy, span, rows, outRows, keys).then(() => decodeRelations2(strategy, span, rows, outRows, keys));
206
- // }
207
- // else
208
- // await decodeRelations2(strategy, span, rows, outRows, keys);
209
-
210
- // await Promise.all(all);
211
-
212
-
213
-
214
- //alt 3
215
- // 3.05 sec
216
-
217
- if (shouldCreateMap) {
218
- // all.push( decodeRelations2(strategy, span, rows, outRows, keys).then(() => decodeManyRelations(strategy, span)));
219
- all.push(decodeManyRelations(strategy, span));
220
- all.push(decodeRelations2(strategy, span, rows, outRows, keys));
221
- // all.push( decodeManyRelations(strategy, span).then(() => decodeRelations2(strategy, span, rows, outRows, keys)));
222
- // all.push( decodeManyRelations(strategy, span));
223
- // all.push(decodeRelations2(strategy, span, rows, outRows, keys));
224
- // all.push( decodeRelations2(strategy, span, rows, outRows, keys) );
225
- }
147
+ const all = [];
148
+
149
+ if (shouldCreateMap)
150
+ all.push(decodeManyRelations(strategy, span).then(() => decodeRelations2(strategy, span, rows, outRows, keys)));
226
151
  else
227
152
  all.push(decodeRelations2(strategy, span, rows, outRows, keys));
228
153
 
229
-
230
154
  await Promise.all(all);
231
155
 
232
- //alt 4
233
- // 3.02 sec
234
- // const all = [];
235
- // if (shouldCreateMap)
236
- // // all.push(new Promise((resolve, reject) => {
237
- // // setTimeout(async () => {
238
- // // await decodeManyRelations(strategy, span);
239
- // // resolve();
240
-
241
- // // }, 0)
242
- // // }));
243
- // all.push(decodeManyRelations(strategy, span));
244
- // all.push(new Promise((resolve, reject) => {
245
- // setTimeout(async () => {
246
- // await decodeRelations2(strategy, span, rows, outRows, keys);
247
- // resolve();
248
-
249
- // }, 0);
250
- // }));
251
- // await Promise.all(all);
252
-
253
- // all.push(decodeRelations2(strategy, span, rows, outRows, keys));
254
-
255
- //alt 4
256
- // 3.3 sec
257
- // if(shouldCreateMap)
258
- // await decodeRelations(strategy, span, rows, outRows, keys);
259
- // else
260
- // await decodeRelations2(strategy, span, rows, outRows, keys);
261
-
262
- // await decodeRelationsNext(strategy, span, rows, outRows, keys);
263
- // await decodeRelations(strategy, span, rows, outRows, keys);
264
-
265
156
  return outRows;
266
157
 
267
158
 
@@ -283,79 +174,14 @@ async function decode(strategy, span, rows, keys = rows.length > 0 ? Object.keys
283
174
  }
284
175
 
285
176
  }
286
- async function decodeRelations2(strategy, span, rawRows, resultRows, keys) {
287
- const legs = span.legs.toArray();
288
- if (legs.length === 0)
289
- return;
290
- const promises = [];
291
- const c = {};
292
- c.visitJoin = function (leg) {
293
- const name = leg.name;
294
- const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
295
- for (let i = 0; i < rows.length; i++) {
296
- resultRows[i][name] = rows[i];
297
- }
298
- });
299
- promises.push(p);
300
- };
301
-
302
- c.visitOne = c.visitJoin;
303
-
304
- c.visitMany = () => { };
305
-
306
- function processLegs(index) {
307
- if (index >= legs.length) {
308
- return;
309
- }
310
- const leg = legs[index];
311
- leg.accept(c);
312
- Promise.all(promises).then(() => {
313
- setImmediate(() => {
314
- processLegs(index + 1);
315
- });
316
- });
317
- }
318
-
319
- processLegs(0);
320
-
321
- await Promise.all(promises);
322
- }
323
177
 
324
- async function decodeRelations3(strategy, span, rawRows, resultRows, keys) {
325
- const promises = [];
326
- const c = {};
327
- c.visitJoin = function (leg) {
328
- const name = leg.name;
329
- const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
330
- for (let i = 0; i < rows.length; i++) {
331
- resultRows[i][name] = rows[i];
332
- }
333
- });
334
- promises.push(p);
335
- };
336
-
337
- c.visitOne = c.visitJoin;
338
-
339
- c.visitMany = () => { };
340
-
341
-
342
- span.legs.forEach(onEachLeg);
343
-
344
- function onEachLeg(leg) {
345
- leg.accept(c);
346
- }
347
-
348
- await Promise.all(promises);
349
- }
350
-
351
-
352
- async function decodeManyRelations(strategy, span, rawRows, resultRows, keys) {
178
+ async function decodeManyRelations(strategy, span) {
353
179
  const promises = [];
354
180
  const c = {};
355
181
  c.visitJoin = () => { };
356
182
  c.visitOne = c.visitJoin;
357
183
 
358
- c.visitMany = function (leg) {
184
+ c.visitMany = function(leg) {
359
185
  const name = leg.name;
360
186
  const table = span.table;
361
187
  const relation = table._relations[name];
@@ -377,134 +203,13 @@ async function decodeManyRelations(strategy, span, rawRows, resultRows, keys) {
377
203
  leg.accept(c);
378
204
  }
379
205
 
380
- // await Promise.all(promises);
381
- // }
382
-
383
- // async function decodeRelations2(strategy, span, rawRows, resultRows, keys) {
384
- // const promises = [];
385
- // const c = {};
386
- // c.visitJoin = function (leg) {
387
- // const name = leg.name;
388
- // //todo avoid traverse twice noMany relations below
389
- // const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
390
- // for (let i = 0; i < rows.length; i++) {
391
- // resultRows[i][name] = rows[i];
392
- // }
393
- // });
394
- // promises.push(p);
395
- // };
396
-
397
- // c.visitOne = c.visitJoin;
398
-
399
- // c.visitMany = () => { };
400
-
401
- // span.legs.forEach(onEachLeg);
402
-
403
- // function onEachLeg(leg) {
404
- // leg.accept(c);
405
- // }
406
-
407
206
  await Promise.all(promises);
408
207
  }
409
208
 
410
- async function decodeRelations3(strategy, span, rawRows, resultRows, keys) {
411
-
412
- let previous = new Promise((resolve) => setImmediate(() => resolve()));
413
- const c = {};
414
-
415
- c.visitJoin = function (leg) {
416
- const name = leg.name;
417
- const p = new Promise((resolve) => {
418
- setImmediate(() => {
419
- decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
420
- for (let i = 0; i < rows.length; i++) {
421
- resultRows[i][name] = rows[i];
422
- }
423
- resolve();
424
- });
425
- });
426
- });
427
- previous = previous.then(() => p);
428
- };
429
-
430
- c.visitOne = c.visitJoin;
431
-
432
- c.visitMany = () => { };
433
-
434
- span.legs.forEach(onEachLeg);
435
-
436
- function onEachLeg(leg) {
437
- leg.accept(c);
438
- }
439
-
440
- await previous;
441
-
442
- }
443
-
444
-
445
- async function decodeRelationsNext(strategy, span, rawRows, resultRows, keys) {
446
- // const promises = [];
447
- let previous = new Promise((resolve) => setImmediate(() => resolve()));
448
- const c = {};
449
-
450
- c.visitJoin = function (leg) {
451
- const name = leg.name;
452
- const p = new Promise((resolve) => {
453
- setImmediate(() => {
454
- decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
455
- for (let i = 0; i < rows.length; i++) {
456
- resultRows[i][name] = rows[i];
457
- }
458
- resolve();
459
- });
460
- });
461
- });
462
- previous = previous.then(() => p);
463
- };
464
-
465
- c.visitOne = c.visitJoin;
466
-
467
- c.visitMany = function (leg) {
468
- const p = new Promise((resolve, reject) => {
469
- setImmediate(() => {
470
-
471
- const name = leg.name;
472
- const table = span.table;
473
- const relation = table._relations[name];
474
- const filter = createOneFilter(relation, span._ids);
475
- const rowsMap = span._rowsMap;
476
-
477
- getManyDto(relation.childTable, filter, strategy[name], leg.span).then(subRows => {
478
- for (let i = 0; i < subRows.length; i++) {
479
- const key = leg.columns.map(column => subRows[i][column.alias]);
480
- const parentRow = getFromMap(rowsMap, table._primaryColumns, key);
481
- parentRow[name].push(subRows[i]);
482
- }
483
- }).then(() => resolve(), reject);
484
-
485
-
486
- });
487
- });
488
-
489
-
490
- previous = previous.then(() => p);
491
- // promises.push(p);
492
- };
493
-
494
- span.legs.forEach(onEachLeg);
495
-
496
- function onEachLeg(leg) {
497
- leg.accept(c);
498
- }
499
-
500
- await previous
501
- }
502
-
503
-
504
- async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
209
+ async function decodeRelations2(strategy, span, rawRows, resultRows, keys) {
505
210
  const promises = [];
506
211
  const c = {};
507
- c.visitJoin = function (leg) {
212
+ c.visitJoin = function(leg) {
508
213
  const name = leg.name;
509
214
  const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
510
215
  for (let i = 0; i < rows.length; i++) {
@@ -516,21 +221,7 @@ async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
516
221
 
517
222
  c.visitOne = c.visitJoin;
518
223
 
519
- c.visitMany = function (leg) {
520
- const name = leg.name;
521
- const table = span.table;
522
- const relation = table._relations[name];
523
- const filter = createOneFilter(relation, span._ids);
524
- const rowsMap = span._rowsMap;
525
- const p = getManyDto(relation.childTable, filter, strategy[name], leg.span).then(subRows => {
526
- for (let i = 0; i < subRows.length; i++) {
527
- const key = leg.columns.map(column => subRows[i][column.alias]);
528
- const parentRow = getFromMap(rowsMap, table._primaryColumns, key);
529
- parentRow[name].push(subRows[i]);
530
- }
531
- });
532
- promises.push(p);
533
- };
224
+ c.visitMany = () => { };
534
225
 
535
226
 
536
227
  span.legs.forEach(onEachLeg);
@@ -542,6 +233,47 @@ async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
542
233
  await Promise.all(promises);
543
234
  }
544
235
 
236
+
237
+ // async function decodeRelations(strategy, span, rawRows, resultRows, keys) {
238
+ // const promises = [];
239
+ // const c = {};
240
+ // c.visitJoin = function (leg) {
241
+ // const name = leg.name;
242
+ // const p = decode(strategy[name], leg.span, rawRows, keys).then((rows) => {
243
+ // for (let i = 0; i < rows.length; i++) {
244
+ // resultRows[i][name] = rows[i];
245
+ // }
246
+ // });
247
+ // promises.push(p);
248
+ // };
249
+
250
+ // c.visitOne = c.visitJoin;
251
+
252
+ // c.visitMany = function (leg) {
253
+ // const name = leg.name;
254
+ // const table = span.table;
255
+ // const relation = table._relations[name];
256
+ // const filter = createOneFilter(relation, span._ids);
257
+ // const rowsMap = span._rowsMap;
258
+ // const p = getManyDto(relation.childTable, filter, strategy[name], leg.span).then(subRows => {
259
+ // for (let i = 0; i < subRows.length; i++) {
260
+ // const key = leg.columns.map(column => subRows[i][column.alias]);
261
+ // const parentRow = getFromMap(rowsMap, table._primaryColumns, key);
262
+ // parentRow[name].push(subRows[i]);
263
+ // }
264
+ // });
265
+ // promises.push(p);
266
+ // };
267
+
268
+ // span.legs.forEach(onEachLeg);
269
+
270
+ // function onEachLeg(leg) {
271
+ // leg.accept(c);
272
+ // }
273
+
274
+ // await Promise.all(promises);
275
+ // }
276
+
545
277
  function createOneFilter(relation, ids) {
546
278
  const columns = relation.joinRelation.columns;
547
279