* Benchmark: Query with Include (Nested Pointers with Parallel Leaf Nodes) * Tests the PR's optimization for parallel fetching at each nested level. * Pattern: p1.p2.p3, p1.p2.p4, p1.p2.p5 * After fetching p2, we know the objectIds and can fetch p3, p4, p5 in parallel.
(name)
| 554 | * After fetching p2, we know the objectIds and can fetch p3, p4, p5 in parallel. |
| 555 | */ |
| 556 | async function benchmarkQueryWithIncludeNested(name) { |
| 557 | const Level3AClass = Parse.Object.extend('Level3A'); |
| 558 | const Level3BClass = Parse.Object.extend('Level3B'); |
| 559 | const Level3CClass = Parse.Object.extend('Level3C'); |
| 560 | const Level2Class = Parse.Object.extend('Level2'); |
| 561 | const Level1Class = Parse.Object.extend('Level1'); |
| 562 | const RootClass = Parse.Object.extend('Root'); |
| 563 | |
| 564 | // Create Level3 objects (leaf nodes) |
| 565 | const level3AObjects = []; |
| 566 | for (let i = 0; i < 10; i++) { |
| 567 | const obj = new Level3AClass(); |
| 568 | obj.set('name', `level3A-${i}`); |
| 569 | level3AObjects.push(obj); |
| 570 | } |
| 571 | await Parse.Object.saveAll(level3AObjects); |
| 572 | |
| 573 | const level3BObjects = []; |
| 574 | for (let i = 0; i < 10; i++) { |
| 575 | const obj = new Level3BClass(); |
| 576 | obj.set('name', `level3B-${i}`); |
| 577 | level3BObjects.push(obj); |
| 578 | } |
| 579 | await Parse.Object.saveAll(level3BObjects); |
| 580 | |
| 581 | const level3CObjects = []; |
| 582 | for (let i = 0; i < 10; i++) { |
| 583 | const obj = new Level3CClass(); |
| 584 | obj.set('name', `level3C-${i}`); |
| 585 | level3CObjects.push(obj); |
| 586 | } |
| 587 | await Parse.Object.saveAll(level3CObjects); |
| 588 | |
| 589 | // Create Level2 objects pointing to multiple Level3 objects |
| 590 | const level2Objects = []; |
| 591 | for (let i = 0; i < 10; i++) { |
| 592 | const obj = new Level2Class(); |
| 593 | obj.set('name', `level2-${i}`); |
| 594 | obj.set('level3A', level3AObjects[i % level3AObjects.length]); |
| 595 | obj.set('level3B', level3BObjects[i % level3BObjects.length]); |
| 596 | obj.set('level3C', level3CObjects[i % level3CObjects.length]); |
| 597 | level2Objects.push(obj); |
| 598 | } |
| 599 | await Parse.Object.saveAll(level2Objects); |
| 600 | |
| 601 | // Create Level1 objects pointing to Level2 |
| 602 | const level1Objects = []; |
| 603 | for (let i = 0; i < 10; i++) { |
| 604 | const obj = new Level1Class(); |
| 605 | obj.set('name', `level1-${i}`); |
| 606 | obj.set('level2', level2Objects[i % level2Objects.length]); |
| 607 | level1Objects.push(obj); |
| 608 | } |
| 609 | await Parse.Object.saveAll(level1Objects); |
| 610 | |
| 611 | // Create Root objects pointing to Level1 |
| 612 | const rootObjects = []; |
| 613 | for (let i = 0; i < 10; i++) { |
nothing calls this directly
no test coverage detected