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
|
@@ -20,24 +20,24 @@
|
|
|
20
20
|
</h1>
|
|
21
21
|
<div class='clearfix'>
|
|
22
22
|
<div class='fl pad1y space-right2'>
|
|
23
|
-
<span class="strong">
|
|
23
|
+
<span class="strong">98.88% </span>
|
|
24
24
|
<span class="quiet">Statements</span>
|
|
25
|
-
<span class='fraction'>
|
|
25
|
+
<span class='fraction'>264/267</span>
|
|
26
26
|
</div>
|
|
27
27
|
<div class='fl pad1y space-right2'>
|
|
28
|
-
<span class="strong">
|
|
28
|
+
<span class="strong">91.89% </span>
|
|
29
29
|
<span class="quiet">Branches</span>
|
|
30
|
-
<span class='fraction'>
|
|
30
|
+
<span class='fraction'>102/111</span>
|
|
31
31
|
</div>
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">100% </span>
|
|
34
34
|
<span class="quiet">Functions</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>30/30</span>
|
|
36
36
|
</div>
|
|
37
37
|
<div class='fl pad1y space-right2'>
|
|
38
|
-
<span class="strong">
|
|
38
|
+
<span class="strong">98.8% </span>
|
|
39
39
|
<span class="quiet">Lines</span>
|
|
40
|
-
<span class='fraction'>
|
|
40
|
+
<span class='fraction'>247/250</span>
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
43
43
|
<p class="quiet">
|
|
@@ -567,7 +567,149 @@
|
|
|
567
567
|
<a name='L519'></a><a href='#L519'>519</a>
|
|
568
568
|
<a name='L520'></a><a href='#L520'>520</a>
|
|
569
569
|
<a name='L521'></a><a href='#L521'>521</a>
|
|
570
|
-
<a name='L522'></a><a href='#L522'>522</a
|
|
570
|
+
<a name='L522'></a><a href='#L522'>522</a>
|
|
571
|
+
<a name='L523'></a><a href='#L523'>523</a>
|
|
572
|
+
<a name='L524'></a><a href='#L524'>524</a>
|
|
573
|
+
<a name='L525'></a><a href='#L525'>525</a>
|
|
574
|
+
<a name='L526'></a><a href='#L526'>526</a>
|
|
575
|
+
<a name='L527'></a><a href='#L527'>527</a>
|
|
576
|
+
<a name='L528'></a><a href='#L528'>528</a>
|
|
577
|
+
<a name='L529'></a><a href='#L529'>529</a>
|
|
578
|
+
<a name='L530'></a><a href='#L530'>530</a>
|
|
579
|
+
<a name='L531'></a><a href='#L531'>531</a>
|
|
580
|
+
<a name='L532'></a><a href='#L532'>532</a>
|
|
581
|
+
<a name='L533'></a><a href='#L533'>533</a>
|
|
582
|
+
<a name='L534'></a><a href='#L534'>534</a>
|
|
583
|
+
<a name='L535'></a><a href='#L535'>535</a>
|
|
584
|
+
<a name='L536'></a><a href='#L536'>536</a>
|
|
585
|
+
<a name='L537'></a><a href='#L537'>537</a>
|
|
586
|
+
<a name='L538'></a><a href='#L538'>538</a>
|
|
587
|
+
<a name='L539'></a><a href='#L539'>539</a>
|
|
588
|
+
<a name='L540'></a><a href='#L540'>540</a>
|
|
589
|
+
<a name='L541'></a><a href='#L541'>541</a>
|
|
590
|
+
<a name='L542'></a><a href='#L542'>542</a>
|
|
591
|
+
<a name='L543'></a><a href='#L543'>543</a>
|
|
592
|
+
<a name='L544'></a><a href='#L544'>544</a>
|
|
593
|
+
<a name='L545'></a><a href='#L545'>545</a>
|
|
594
|
+
<a name='L546'></a><a href='#L546'>546</a>
|
|
595
|
+
<a name='L547'></a><a href='#L547'>547</a>
|
|
596
|
+
<a name='L548'></a><a href='#L548'>548</a>
|
|
597
|
+
<a name='L549'></a><a href='#L549'>549</a>
|
|
598
|
+
<a name='L550'></a><a href='#L550'>550</a>
|
|
599
|
+
<a name='L551'></a><a href='#L551'>551</a>
|
|
600
|
+
<a name='L552'></a><a href='#L552'>552</a>
|
|
601
|
+
<a name='L553'></a><a href='#L553'>553</a>
|
|
602
|
+
<a name='L554'></a><a href='#L554'>554</a>
|
|
603
|
+
<a name='L555'></a><a href='#L555'>555</a>
|
|
604
|
+
<a name='L556'></a><a href='#L556'>556</a>
|
|
605
|
+
<a name='L557'></a><a href='#L557'>557</a>
|
|
606
|
+
<a name='L558'></a><a href='#L558'>558</a>
|
|
607
|
+
<a name='L559'></a><a href='#L559'>559</a>
|
|
608
|
+
<a name='L560'></a><a href='#L560'>560</a>
|
|
609
|
+
<a name='L561'></a><a href='#L561'>561</a>
|
|
610
|
+
<a name='L562'></a><a href='#L562'>562</a>
|
|
611
|
+
<a name='L563'></a><a href='#L563'>563</a>
|
|
612
|
+
<a name='L564'></a><a href='#L564'>564</a>
|
|
613
|
+
<a name='L565'></a><a href='#L565'>565</a>
|
|
614
|
+
<a name='L566'></a><a href='#L566'>566</a>
|
|
615
|
+
<a name='L567'></a><a href='#L567'>567</a>
|
|
616
|
+
<a name='L568'></a><a href='#L568'>568</a>
|
|
617
|
+
<a name='L569'></a><a href='#L569'>569</a>
|
|
618
|
+
<a name='L570'></a><a href='#L570'>570</a>
|
|
619
|
+
<a name='L571'></a><a href='#L571'>571</a>
|
|
620
|
+
<a name='L572'></a><a href='#L572'>572</a>
|
|
621
|
+
<a name='L573'></a><a href='#L573'>573</a>
|
|
622
|
+
<a name='L574'></a><a href='#L574'>574</a>
|
|
623
|
+
<a name='L575'></a><a href='#L575'>575</a>
|
|
624
|
+
<a name='L576'></a><a href='#L576'>576</a>
|
|
625
|
+
<a name='L577'></a><a href='#L577'>577</a>
|
|
626
|
+
<a name='L578'></a><a href='#L578'>578</a>
|
|
627
|
+
<a name='L579'></a><a href='#L579'>579</a>
|
|
628
|
+
<a name='L580'></a><a href='#L580'>580</a>
|
|
629
|
+
<a name='L581'></a><a href='#L581'>581</a>
|
|
630
|
+
<a name='L582'></a><a href='#L582'>582</a>
|
|
631
|
+
<a name='L583'></a><a href='#L583'>583</a>
|
|
632
|
+
<a name='L584'></a><a href='#L584'>584</a>
|
|
633
|
+
<a name='L585'></a><a href='#L585'>585</a>
|
|
634
|
+
<a name='L586'></a><a href='#L586'>586</a>
|
|
635
|
+
<a name='L587'></a><a href='#L587'>587</a>
|
|
636
|
+
<a name='L588'></a><a href='#L588'>588</a>
|
|
637
|
+
<a name='L589'></a><a href='#L589'>589</a>
|
|
638
|
+
<a name='L590'></a><a href='#L590'>590</a>
|
|
639
|
+
<a name='L591'></a><a href='#L591'>591</a>
|
|
640
|
+
<a name='L592'></a><a href='#L592'>592</a>
|
|
641
|
+
<a name='L593'></a><a href='#L593'>593</a>
|
|
642
|
+
<a name='L594'></a><a href='#L594'>594</a>
|
|
643
|
+
<a name='L595'></a><a href='#L595'>595</a>
|
|
644
|
+
<a name='L596'></a><a href='#L596'>596</a>
|
|
645
|
+
<a name='L597'></a><a href='#L597'>597</a>
|
|
646
|
+
<a name='L598'></a><a href='#L598'>598</a>
|
|
647
|
+
<a name='L599'></a><a href='#L599'>599</a>
|
|
648
|
+
<a name='L600'></a><a href='#L600'>600</a>
|
|
649
|
+
<a name='L601'></a><a href='#L601'>601</a>
|
|
650
|
+
<a name='L602'></a><a href='#L602'>602</a>
|
|
651
|
+
<a name='L603'></a><a href='#L603'>603</a>
|
|
652
|
+
<a name='L604'></a><a href='#L604'>604</a>
|
|
653
|
+
<a name='L605'></a><a href='#L605'>605</a>
|
|
654
|
+
<a name='L606'></a><a href='#L606'>606</a>
|
|
655
|
+
<a name='L607'></a><a href='#L607'>607</a>
|
|
656
|
+
<a name='L608'></a><a href='#L608'>608</a>
|
|
657
|
+
<a name='L609'></a><a href='#L609'>609</a>
|
|
658
|
+
<a name='L610'></a><a href='#L610'>610</a>
|
|
659
|
+
<a name='L611'></a><a href='#L611'>611</a>
|
|
660
|
+
<a name='L612'></a><a href='#L612'>612</a>
|
|
661
|
+
<a name='L613'></a><a href='#L613'>613</a>
|
|
662
|
+
<a name='L614'></a><a href='#L614'>614</a>
|
|
663
|
+
<a name='L615'></a><a href='#L615'>615</a>
|
|
664
|
+
<a name='L616'></a><a href='#L616'>616</a>
|
|
665
|
+
<a name='L617'></a><a href='#L617'>617</a>
|
|
666
|
+
<a name='L618'></a><a href='#L618'>618</a>
|
|
667
|
+
<a name='L619'></a><a href='#L619'>619</a>
|
|
668
|
+
<a name='L620'></a><a href='#L620'>620</a>
|
|
669
|
+
<a name='L621'></a><a href='#L621'>621</a>
|
|
670
|
+
<a name='L622'></a><a href='#L622'>622</a>
|
|
671
|
+
<a name='L623'></a><a href='#L623'>623</a>
|
|
672
|
+
<a name='L624'></a><a href='#L624'>624</a>
|
|
673
|
+
<a name='L625'></a><a href='#L625'>625</a>
|
|
674
|
+
<a name='L626'></a><a href='#L626'>626</a>
|
|
675
|
+
<a name='L627'></a><a href='#L627'>627</a>
|
|
676
|
+
<a name='L628'></a><a href='#L628'>628</a>
|
|
677
|
+
<a name='L629'></a><a href='#L629'>629</a>
|
|
678
|
+
<a name='L630'></a><a href='#L630'>630</a>
|
|
679
|
+
<a name='L631'></a><a href='#L631'>631</a>
|
|
680
|
+
<a name='L632'></a><a href='#L632'>632</a>
|
|
681
|
+
<a name='L633'></a><a href='#L633'>633</a>
|
|
682
|
+
<a name='L634'></a><a href='#L634'>634</a>
|
|
683
|
+
<a name='L635'></a><a href='#L635'>635</a>
|
|
684
|
+
<a name='L636'></a><a href='#L636'>636</a>
|
|
685
|
+
<a name='L637'></a><a href='#L637'>637</a>
|
|
686
|
+
<a name='L638'></a><a href='#L638'>638</a>
|
|
687
|
+
<a name='L639'></a><a href='#L639'>639</a>
|
|
688
|
+
<a name='L640'></a><a href='#L640'>640</a>
|
|
689
|
+
<a name='L641'></a><a href='#L641'>641</a>
|
|
690
|
+
<a name='L642'></a><a href='#L642'>642</a>
|
|
691
|
+
<a name='L643'></a><a href='#L643'>643</a>
|
|
692
|
+
<a name='L644'></a><a href='#L644'>644</a>
|
|
693
|
+
<a name='L645'></a><a href='#L645'>645</a>
|
|
694
|
+
<a name='L646'></a><a href='#L646'>646</a>
|
|
695
|
+
<a name='L647'></a><a href='#L647'>647</a>
|
|
696
|
+
<a name='L648'></a><a href='#L648'>648</a>
|
|
697
|
+
<a name='L649'></a><a href='#L649'>649</a>
|
|
698
|
+
<a name='L650'></a><a href='#L650'>650</a>
|
|
699
|
+
<a name='L651'></a><a href='#L651'>651</a>
|
|
700
|
+
<a name='L652'></a><a href='#L652'>652</a>
|
|
701
|
+
<a name='L653'></a><a href='#L653'>653</a>
|
|
702
|
+
<a name='L654'></a><a href='#L654'>654</a>
|
|
703
|
+
<a name='L655'></a><a href='#L655'>655</a>
|
|
704
|
+
<a name='L656'></a><a href='#L656'>656</a>
|
|
705
|
+
<a name='L657'></a><a href='#L657'>657</a>
|
|
706
|
+
<a name='L658'></a><a href='#L658'>658</a>
|
|
707
|
+
<a name='L659'></a><a href='#L659'>659</a>
|
|
708
|
+
<a name='L660'></a><a href='#L660'>660</a>
|
|
709
|
+
<a name='L661'></a><a href='#L661'>661</a>
|
|
710
|
+
<a name='L662'></a><a href='#L662'>662</a>
|
|
711
|
+
<a name='L663'></a><a href='#L663'>663</a>
|
|
712
|
+
<a name='L664'></a><a href='#L664'>664</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
571
713
|
<span class="cline-any cline-neutral"> </span>
|
|
572
714
|
<span class="cline-any cline-neutral"> </span>
|
|
573
715
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -664,132 +806,177 @@
|
|
|
664
806
|
<span class="cline-any cline-neutral"> </span>
|
|
665
807
|
<span class="cline-any cline-neutral"> </span>
|
|
666
808
|
<span class="cline-any cline-neutral"> </span>
|
|
809
|
+
<span class="cline-any cline-neutral"> </span>
|
|
810
|
+
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-neutral"> </span>
|
|
812
|
+
<span class="cline-any cline-yes">3x</span>
|
|
813
|
+
<span class="cline-any cline-neutral"> </span>
|
|
814
|
+
<span class="cline-any cline-neutral"> </span>
|
|
815
|
+
<span class="cline-any cline-yes">125x</span>
|
|
816
|
+
<span class="cline-any cline-neutral"> </span>
|
|
817
|
+
<span class="cline-any cline-yes">509x</span>
|
|
818
|
+
<span class="cline-any cline-yes">509x</span>
|
|
819
|
+
<span class="cline-any cline-neutral"> </span>
|
|
820
|
+
<span class="cline-any cline-yes">509x</span>
|
|
821
|
+
<span class="cline-any cline-yes">509x</span>
|
|
822
|
+
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-neutral"> </span>
|
|
824
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
825
|
+
<span class="cline-any cline-yes">4339x</span>
|
|
826
|
+
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-neutral"> </span>
|
|
829
|
+
<span class="cline-any cline-neutral"> </span>
|
|
830
|
+
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-yes">457x</span>
|
|
832
|
+
<span class="cline-any cline-neutral"> </span>
|
|
833
|
+
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-neutral"> </span>
|
|
836
|
+
<span class="cline-any cline-neutral"> </span>
|
|
837
|
+
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-yes">509x</span>
|
|
839
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
840
|
+
<span class="cline-any cline-neutral"> </span>
|
|
841
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
842
|
+
<span class="cline-any cline-yes">509x</span>
|
|
843
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
844
|
+
<span class="cline-any cline-neutral"> </span>
|
|
845
|
+
<span class="cline-any cline-yes">509x</span>
|
|
846
|
+
<span class="cline-any cline-yes">509x</span>
|
|
847
|
+
<span class="cline-any cline-neutral"> </span>
|
|
848
|
+
<span class="cline-any cline-yes">509x</span>
|
|
849
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
850
|
+
<span class="cline-any cline-neutral"> </span>
|
|
851
|
+
<span class="cline-any cline-yes">509x</span>
|
|
852
|
+
<span class="cline-any cline-yes">509x</span>
|
|
853
|
+
<span class="cline-any cline-neutral"> </span>
|
|
854
|
+
<span class="cline-any cline-yes">509x</span>
|
|
855
|
+
<span class="cline-any cline-yes">1x</span>
|
|
856
|
+
<span class="cline-any cline-yes">1x</span>
|
|
857
|
+
<span class="cline-any cline-yes">2x</span>
|
|
858
|
+
<span class="cline-any cline-yes">2x</span>
|
|
667
859
|
<span class="cline-any cline-yes">2x</span>
|
|
668
860
|
<span class="cline-any cline-neutral"> </span>
|
|
669
861
|
<span class="cline-any cline-neutral"> </span>
|
|
670
|
-
<span class="cline-any cline-yes">
|
|
862
|
+
<span class="cline-any cline-yes">1x</span>
|
|
671
863
|
<span class="cline-any cline-neutral"> </span>
|
|
672
|
-
<span class="cline-any cline-yes">227x</span>
|
|
673
|
-
<span class="cline-any cline-yes">227x</span>
|
|
674
864
|
<span class="cline-any cline-neutral"> </span>
|
|
675
|
-
<span class="cline-any cline-yes">
|
|
676
|
-
<span class="cline-any cline-yes">227x</span>
|
|
865
|
+
<span class="cline-any cline-yes">509x</span>
|
|
677
866
|
<span class="cline-any cline-neutral"> </span>
|
|
678
867
|
<span class="cline-any cline-neutral"> </span>
|
|
679
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
680
|
-
<span class="cline-any cline-yes">1580x</span>
|
|
681
868
|
<span class="cline-any cline-neutral"> </span>
|
|
869
|
+
<span class="cline-any cline-yes">509x</span>
|
|
870
|
+
<span class="cline-any cline-yes">509x</span>
|
|
871
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
872
|
+
<span class="cline-any cline-yes">392x</span>
|
|
873
|
+
<span class="cline-any cline-yes">392x</span>
|
|
682
874
|
<span class="cline-any cline-neutral"> </span>
|
|
683
875
|
<span class="cline-any cline-neutral"> </span>
|
|
684
876
|
<span class="cline-any cline-neutral"> </span>
|
|
685
877
|
<span class="cline-any cline-neutral"> </span>
|
|
686
|
-
<span class="cline-any cline-yes">213x</span>
|
|
687
878
|
<span class="cline-any cline-neutral"> </span>
|
|
688
879
|
<span class="cline-any cline-neutral"> </span>
|
|
880
|
+
<span class="cline-any cline-yes">509x</span>
|
|
881
|
+
<span class="cline-any cline-yes">509x</span>
|
|
882
|
+
<span class="cline-any cline-yes">509x</span>
|
|
883
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
884
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
689
885
|
<span class="cline-any cline-neutral"> </span>
|
|
690
886
|
<span class="cline-any cline-neutral"> </span>
|
|
887
|
+
<span class="cline-any cline-yes">509x</span>
|
|
691
888
|
<span class="cline-any cline-neutral"> </span>
|
|
692
889
|
<span class="cline-any cline-neutral"> </span>
|
|
693
|
-
<span class="cline-any cline-yes">
|
|
694
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
890
|
+
<span class="cline-any cline-yes">4796x</span>
|
|
695
891
|
<span class="cline-any cline-neutral"> </span>
|
|
696
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
697
|
-
<span class="cline-any cline-yes">227x</span>
|
|
698
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
699
892
|
<span class="cline-any cline-neutral"> </span>
|
|
700
|
-
<span class="cline-any cline-yes">227x</span>
|
|
701
|
-
<span class="cline-any cline-yes">227x</span>
|
|
702
893
|
<span class="cline-any cline-neutral"> </span>
|
|
703
|
-
<span class="cline-any cline-yes">
|
|
704
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
894
|
+
<span class="cline-any cline-yes">509x</span>
|
|
705
895
|
<span class="cline-any cline-neutral"> </span>
|
|
706
|
-
<span class="cline-any cline-yes">227x</span>
|
|
707
|
-
<span class="cline-any cline-yes">227x</span>
|
|
708
896
|
<span class="cline-any cline-neutral"> </span>
|
|
709
897
|
<span class="cline-any cline-neutral"> </span>
|
|
710
|
-
<span class="cline-any cline-yes">227x</span>
|
|
711
|
-
<span class="cline-any cline-yes">3611x</span>
|
|
712
|
-
<span class="cline-any cline-yes">3611x</span>
|
|
713
898
|
<span class="cline-any cline-neutral"> </span>
|
|
714
899
|
<span class="cline-any cline-neutral"> </span>
|
|
715
900
|
<span class="cline-any cline-neutral"> </span>
|
|
716
|
-
<span class="cline-any cline-yes">227x</span>
|
|
717
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
718
901
|
<span class="cline-any cline-neutral"> </span>
|
|
719
902
|
<span class="cline-any cline-neutral"> </span>
|
|
720
|
-
<span class="cline-any cline-yes">201x</span>
|
|
721
903
|
<span class="cline-any cline-neutral"> </span>
|
|
722
904
|
<span class="cline-any cline-neutral"> </span>
|
|
723
905
|
<span class="cline-any cline-neutral"> </span>
|
|
724
906
|
<span class="cline-any cline-neutral"> </span>
|
|
725
907
|
<span class="cline-any cline-neutral"> </span>
|
|
726
|
-
<span class="cline-any cline-yes">227x</span>
|
|
727
908
|
<span class="cline-any cline-neutral"> </span>
|
|
728
909
|
<span class="cline-any cline-neutral"> </span>
|
|
729
|
-
<span class="cline-any cline-yes">1793x</span>
|
|
730
910
|
<span class="cline-any cline-neutral"> </span>
|
|
731
911
|
<span class="cline-any cline-neutral"> </span>
|
|
732
912
|
<span class="cline-any cline-neutral"> </span>
|
|
733
|
-
<span class="cline-any cline-yes">227x</span>
|
|
734
913
|
<span class="cline-any cline-neutral"> </span>
|
|
735
914
|
<span class="cline-any cline-neutral"> </span>
|
|
915
|
+
<span class="cline-any cline-yes">125x</span>
|
|
736
916
|
<span class="cline-any cline-neutral"> </span>
|
|
737
917
|
<span class="cline-any cline-neutral"> </span>
|
|
738
918
|
<span class="cline-any cline-neutral"> </span>
|
|
739
919
|
<span class="cline-any cline-neutral"> </span>
|
|
920
|
+
<span class="cline-any cline-yes">509x</span>
|
|
921
|
+
<span class="cline-any cline-yes">509x</span>
|
|
740
922
|
<span class="cline-any cline-neutral"> </span>
|
|
741
923
|
<span class="cline-any cline-neutral"> </span>
|
|
742
924
|
<span class="cline-any cline-neutral"> </span>
|
|
743
925
|
<span class="cline-any cline-neutral"> </span>
|
|
926
|
+
<span class="cline-any cline-yes">125x</span>
|
|
927
|
+
<span class="cline-any cline-yes">164x</span>
|
|
928
|
+
<span class="cline-any cline-yes">164x</span>
|
|
929
|
+
<span class="cline-any cline-yes">1x</span>
|
|
744
930
|
<span class="cline-any cline-neutral"> </span>
|
|
931
|
+
<span class="cline-any cline-yes">163x</span>
|
|
745
932
|
<span class="cline-any cline-neutral"> </span>
|
|
746
933
|
<span class="cline-any cline-neutral"> </span>
|
|
934
|
+
<span class="cline-any cline-yes">125x</span>
|
|
747
935
|
<span class="cline-any cline-neutral"> </span>
|
|
748
936
|
<span class="cline-any cline-neutral"> </span>
|
|
749
937
|
<span class="cline-any cline-neutral"> </span>
|
|
750
938
|
<span class="cline-any cline-neutral"> </span>
|
|
751
|
-
<span class="cline-any cline-yes">
|
|
939
|
+
<span class="cline-any cline-yes">509x</span>
|
|
940
|
+
<span class="cline-any cline-yes">509x</span>
|
|
752
941
|
<span class="cline-any cline-neutral"> </span>
|
|
753
942
|
<span class="cline-any cline-neutral"> </span>
|
|
754
943
|
<span class="cline-any cline-neutral"> </span>
|
|
755
944
|
<span class="cline-any cline-neutral"> </span>
|
|
756
|
-
<span class="cline-any cline-yes">
|
|
757
|
-
<span class="cline-any cline-yes">227x</span>
|
|
945
|
+
<span class="cline-any cline-yes">125x</span>
|
|
758
946
|
<span class="cline-any cline-neutral"> </span>
|
|
759
947
|
<span class="cline-any cline-neutral"> </span>
|
|
948
|
+
<span class="cline-any cline-yes">495x</span>
|
|
949
|
+
<span class="cline-any cline-yes">495x</span>
|
|
950
|
+
<span class="cline-any cline-yes">1x</span>
|
|
760
951
|
<span class="cline-any cline-neutral"> </span>
|
|
952
|
+
<span class="cline-any cline-yes">494x</span>
|
|
761
953
|
<span class="cline-any cline-neutral"> </span>
|
|
762
|
-
<span class="cline-any cline-yes">34x</span>
|
|
763
|
-
<span class="cline-any cline-yes">1435x</span>
|
|
764
|
-
<span class="cline-any cline-yes">1435x</span>
|
|
765
|
-
<span class="cline-any cline-no"> </span>
|
|
766
954
|
<span class="cline-any cline-neutral"> </span>
|
|
767
|
-
<span class="cline-any cline-yes">
|
|
955
|
+
<span class="cline-any cline-yes">125x</span>
|
|
956
|
+
<span class="cline-any cline-yes">102x</span>
|
|
768
957
|
<span class="cline-any cline-neutral"> </span>
|
|
769
958
|
<span class="cline-any cline-neutral"> </span>
|
|
770
|
-
<span class="cline-any cline-yes">
|
|
959
|
+
<span class="cline-any cline-yes">125x</span>
|
|
771
960
|
<span class="cline-any cline-neutral"> </span>
|
|
772
961
|
<span class="cline-any cline-neutral"> </span>
|
|
773
962
|
<span class="cline-any cline-neutral"> </span>
|
|
963
|
+
<span class="cline-any cline-yes">125x</span>
|
|
964
|
+
<span class="cline-any cline-yes">509x</span>
|
|
965
|
+
<span class="cline-any cline-yes">509x</span>
|
|
774
966
|
<span class="cline-any cline-neutral"> </span>
|
|
775
|
-
<span class="cline-any cline-yes">227x</span>
|
|
776
|
-
<span class="cline-any cline-yes">227x</span>
|
|
777
967
|
<span class="cline-any cline-neutral"> </span>
|
|
778
968
|
<span class="cline-any cline-neutral"> </span>
|
|
969
|
+
<span class="cline-any cline-yes">509x</span>
|
|
970
|
+
<span class="cline-any cline-yes">392x</span>
|
|
971
|
+
<span class="cline-any cline-yes">392x</span>
|
|
779
972
|
<span class="cline-any cline-neutral"> </span>
|
|
780
973
|
<span class="cline-any cline-neutral"> </span>
|
|
781
|
-
<span class="cline-any cline-yes">34x</span>
|
|
782
974
|
<span class="cline-any cline-neutral"> </span>
|
|
783
975
|
<span class="cline-any cline-neutral"> </span>
|
|
784
|
-
<span class="cline-any cline-yes">
|
|
785
|
-
<span class="cline-any cline-yes">42896x</span>
|
|
786
|
-
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-yes">509x</span>
|
|
787
977
|
<span class="cline-any cline-neutral"> </span>
|
|
788
|
-
<span class="cline-any cline-yes">42896x</span>
|
|
789
978
|
<span class="cline-any cline-neutral"> </span>
|
|
790
979
|
<span class="cline-any cline-neutral"> </span>
|
|
791
|
-
<span class="cline-any cline-yes">34x</span>
|
|
792
|
-
<span class="cline-any cline-yes">42895x</span>
|
|
793
980
|
<span class="cline-any cline-neutral"> </span>
|
|
794
981
|
<span class="cline-any cline-neutral"> </span>
|
|
795
982
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -799,150 +986,175 @@
|
|
|
799
986
|
<span class="cline-any cline-neutral"> </span>
|
|
800
987
|
<span class="cline-any cline-neutral"> </span>
|
|
801
988
|
<span class="cline-any cline-neutral"> </span>
|
|
989
|
+
<span class="cline-any cline-yes">125x</span>
|
|
802
990
|
<span class="cline-any cline-neutral"> </span>
|
|
803
991
|
<span class="cline-any cline-neutral"> </span>
|
|
804
|
-
<span class="cline-any cline-yes">34x</span>
|
|
805
|
-
<span class="cline-any cline-yes">188x</span>
|
|
806
|
-
<span class="cline-any cline-yes">39x</span>
|
|
807
|
-
<span class="cline-any cline-yes">39x</span>
|
|
808
|
-
<span class="cline-any cline-yes">1434x</span>
|
|
809
992
|
<span class="cline-any cline-neutral"> </span>
|
|
810
|
-
<span class="cline-any cline-yes">
|
|
993
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
994
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
995
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
996
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
997
|
+
<span class="cline-any cline-yes">1291x</span>
|
|
811
998
|
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-yes">39x</span>
|
|
813
999
|
<span class="cline-any cline-neutral"> </span>
|
|
1000
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
814
1001
|
<span class="cline-any cline-neutral"> </span>
|
|
815
|
-
<span class="cline-any cline-yes">39x</span>
|
|
816
|
-
<span class="cline-any cline-yes">188x</span>
|
|
817
|
-
<span class="cline-any cline-yes">1246x</span>
|
|
818
1002
|
<span class="cline-any cline-neutral"> </span>
|
|
819
|
-
<span class="cline-any cline-yes">
|
|
1003
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1004
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">926x</span>
|
|
1008
|
+
<span class="cline-any cline-no"> </span>
|
|
820
1009
|
<span class="cline-any cline-neutral"> </span>
|
|
1010
|
+
<span class="cline-any cline-yes">926x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">926x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">1x</span>
|
|
821
1013
|
<span class="cline-any cline-neutral"> </span>
|
|
1014
|
+
<span class="cline-any cline-yes">925x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">925x</span>
|
|
822
1016
|
<span class="cline-any cline-neutral"> </span>
|
|
823
|
-
<span class="cline-any cline-yes">
|
|
824
|
-
<span class="cline-any cline-yes">
|
|
825
|
-
<span class="cline-any cline-yes">
|
|
826
|
-
<span class="cline-any cline-yes">
|
|
1017
|
+
<span class="cline-any cline-yes">925x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">925x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">148x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">148x</span>
|
|
1021
|
+
<span class="cline-any cline-yes">148x</span>
|
|
827
1022
|
<span class="cline-any cline-neutral"> </span>
|
|
828
|
-
<span class="cline-any cline-yes">
|
|
1023
|
+
<span class="cline-any cline-yes">148x</span>
|
|
829
1024
|
<span class="cline-any cline-neutral"> </span>
|
|
830
|
-
<span class="cline-any cline-yes">28144x</span>
|
|
831
|
-
<span class="cline-any cline-yes">29445x</span>
|
|
832
|
-
<span class="cline-any cline-yes">28597x</span>
|
|
833
1025
|
<span class="cline-any cline-neutral"> </span>
|
|
834
|
-
<span class="cline-any cline-yes">848x</span>
|
|
835
|
-
<span class="cline-any cline-yes">849x</span>
|
|
836
1026
|
<span class="cline-any cline-neutral"> </span>
|
|
837
1027
|
<span class="cline-any cline-neutral"> </span>
|
|
838
|
-
<span class="cline-any cline-yes">
|
|
839
|
-
<span class="cline-any cline-yes">
|
|
1028
|
+
<span class="cline-any cline-yes">148x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">148x</span>
|
|
840
1030
|
<span class="cline-any cline-neutral"> </span>
|
|
841
1031
|
<span class="cline-any cline-neutral"> </span>
|
|
842
|
-
<span class="cline-any cline-yes">
|
|
1032
|
+
<span class="cline-any cline-yes">925x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">925x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">1x</span>
|
|
843
1036
|
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
+
<span class="cline-any cline-yes">1x</span>
|
|
844
1038
|
<span class="cline-any cline-neutral"> </span>
|
|
845
1039
|
<span class="cline-any cline-neutral"> </span>
|
|
846
1040
|
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-yes">1246x</span>
|
|
848
|
-
<span class="cline-any cline-yes">12590x</span>
|
|
849
|
-
<span class="cline-any cline-yes">10448x</span>
|
|
850
1041
|
<span class="cline-any cline-neutral"> </span>
|
|
851
|
-
<span class="cline-any cline-yes">
|
|
852
|
-
<span class="cline-any cline-yes">49133x</span>
|
|
1042
|
+
<span class="cline-any cline-yes">924x</span>
|
|
853
1043
|
<span class="cline-any cline-neutral"> </span>
|
|
854
|
-
<span class="cline-any cline-yes">2142x</span>
|
|
855
|
-
<span class="cline-any cline-yes">1203x</span>
|
|
856
1044
|
<span class="cline-any cline-neutral"> </span>
|
|
857
|
-
<span class="cline-any cline-yes">939x</span>
|
|
858
1045
|
<span class="cline-any cline-neutral"> </span>
|
|
859
|
-
<span class="cline-any cline-yes">1246x</span>
|
|
860
1046
|
<span class="cline-any cline-neutral"> </span>
|
|
861
1047
|
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1049
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1050
|
+
<span class="cline-any cline-yes">147x</span>
|
|
862
1051
|
<span class="cline-any cline-neutral"> </span>
|
|
863
|
-
<span class="cline-any cline-yes">
|
|
864
|
-
<span class="cline-any cline-yes">6559x</span>
|
|
1052
|
+
<span class="cline-any cline-yes">42x</span>
|
|
865
1053
|
<span class="cline-any cline-neutral"> </span>
|
|
866
|
-
<span class="cline-any cline-yes">2788x</span>
|
|
867
1054
|
<span class="cline-any cline-neutral"> </span>
|
|
868
|
-
<span class="cline-any cline-yes">
|
|
869
|
-
<span class="cline-any cline-yes">6559x</span>
|
|
870
|
-
<span class="cline-any cline-yes">6150x</span>
|
|
1055
|
+
<span class="cline-any cline-yes">125x</span>
|
|
871
1056
|
<span class="cline-any cline-neutral"> </span>
|
|
872
|
-
<span class="cline-any cline-yes">409x</span>
|
|
873
|
-
<span class="cline-any cline-yes">410x</span>
|
|
874
1057
|
<span class="cline-any cline-neutral"> </span>
|
|
875
1058
|
<span class="cline-any cline-neutral"> </span>
|
|
876
|
-
<span class="cline-any cline-yes">410x</span>
|
|
877
|
-
<span class="cline-any cline-yes">355x</span>
|
|
878
1059
|
<span class="cline-any cline-neutral"> </span>
|
|
879
1060
|
<span class="cline-any cline-neutral"> </span>
|
|
880
|
-
<span class="cline-any cline-yes">54x</span>
|
|
881
1061
|
<span class="cline-any cline-neutral"> </span>
|
|
882
|
-
<span class="cline-any cline-yes">1246x</span>
|
|
883
|
-
<span class="cline-any cline-yes">614x</span>
|
|
884
|
-
<span class="cline-any cline-yes">75x</span>
|
|
885
|
-
<span class="cline-any cline-yes">75x</span>
|
|
886
1062
|
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1064
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1065
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
1066
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
1067
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
1068
|
+
<span class="cline-any cline-yes">1459x</span>
|
|
1069
|
+
<span class="cline-any cline-yes">1291x</span>
|
|
1070
|
+
<span class="cline-any cline-yes">1291x</span>
|
|
1071
|
+
<span class="cline-any cline-yes">276x</span>
|
|
1072
|
+
<span class="cline-any cline-yes">276x</span>
|
|
887
1073
|
<span class="cline-any cline-neutral"> </span>
|
|
1074
|
+
<span class="cline-any cline-yes">1015x</span>
|
|
1075
|
+
<span class="cline-any cline-yes">1015x</span>
|
|
1076
|
+
<span class="cline-any cline-yes">726x</span>
|
|
1077
|
+
<span class="cline-any cline-yes">726x</span>
|
|
888
1078
|
<span class="cline-any cline-neutral"> </span>
|
|
889
1079
|
<span class="cline-any cline-neutral"> </span>
|
|
1080
|
+
<span class="cline-any cline-yes">168x</span>
|
|
890
1081
|
<span class="cline-any cline-neutral"> </span>
|
|
891
1082
|
<span class="cline-any cline-neutral"> </span>
|
|
892
|
-
<span class="cline-any cline-yes">
|
|
1083
|
+
<span class="cline-any cline-yes">168x</span>
|
|
1084
|
+
<span class="cline-any cline-yes">168x</span>
|
|
893
1085
|
<span class="cline-any cline-neutral"> </span>
|
|
894
|
-
<span class="cline-any cline-yes">
|
|
1086
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1087
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1088
|
+
<span class="cline-any cline-yes">2768x</span>
|
|
1089
|
+
<span class="cline-any cline-yes">2768x</span>
|
|
895
1090
|
<span class="cline-any cline-neutral"> </span>
|
|
1091
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1092
|
+
<span class="cline-any cline-yes">565x</span>
|
|
896
1093
|
<span class="cline-any cline-neutral"> </span>
|
|
1094
|
+
<span class="cline-any cline-yes">565x</span>
|
|
897
1095
|
<span class="cline-any cline-neutral"> </span>
|
|
898
|
-
<span class="cline-any cline-yes">539x</span>
|
|
899
|
-
<span class="cline-any cline-yes">61x</span>
|
|
900
|
-
<span class="cline-any cline-yes">61x</span>
|
|
901
1096
|
<span class="cline-any cline-neutral"> </span>
|
|
902
1097
|
<span class="cline-any cline-neutral"> </span>
|
|
1098
|
+
<span class="cline-any cline-yes">565x</span>
|
|
903
1099
|
<span class="cline-any cline-neutral"> </span>
|
|
904
|
-
<span class="cline-any cline-yes">
|
|
905
|
-
<span class="cline-any cline-yes">761x</span>
|
|
906
|
-
<span class="cline-any cline-yes">349x</span>
|
|
1100
|
+
<span class="cline-any cline-yes">565x</span>
|
|
907
1101
|
<span class="cline-any cline-neutral"> </span>
|
|
908
|
-
<span class="cline-any cline-yes">
|
|
909
|
-
<span class="cline-any cline-yes">228x</span>
|
|
910
|
-
<span class="cline-any cline-yes">149x</span>
|
|
1102
|
+
<span class="cline-any cline-yes">213x</span>
|
|
911
1103
|
<span class="cline-any cline-neutral"> </span>
|
|
912
|
-
<span class="cline-any cline-yes">79x</span>
|
|
913
|
-
<span class="cline-any cline-yes">79x</span>
|
|
914
1104
|
<span class="cline-any cline-neutral"> </span>
|
|
915
1105
|
<span class="cline-any cline-neutral"> </span>
|
|
916
1106
|
<span class="cline-any cline-neutral"> </span>
|
|
917
1107
|
<span class="cline-any cline-neutral"> </span>
|
|
918
1108
|
<span class="cline-any cline-neutral"> </span>
|
|
919
|
-
<span class="cline-any cline-yes">121x</span>
|
|
920
1109
|
<span class="cline-any cline-neutral"> </span>
|
|
921
|
-
<span class="cline-any cline-yes">121x</span>
|
|
922
1110
|
<span class="cline-any cline-neutral"> </span>
|
|
1111
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1112
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1114
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1115
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1116
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1117
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1118
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1119
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1120
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1121
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1122
|
+
<span class="cline-any cline-yes">213x</span>
|
|
923
1123
|
<span class="cline-any cline-no"> </span>
|
|
924
1124
|
<span class="cline-any cline-neutral"> </span>
|
|
1125
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1126
|
+
<span class="cline-any cline-yes">213x</span>
|
|
925
1127
|
<span class="cline-any cline-neutral"> </span>
|
|
1128
|
+
<span class="cline-any cline-yes">213x</span>
|
|
926
1129
|
<span class="cline-any cline-neutral"> </span>
|
|
927
1130
|
<span class="cline-any cline-neutral"> </span>
|
|
1131
|
+
<span class="cline-any cline-yes">125x</span>
|
|
928
1132
|
<span class="cline-any cline-neutral"> </span>
|
|
929
|
-
<span class="cline-any cline-yes">989x</span>
|
|
930
1133
|
<span class="cline-any cline-neutral"> </span>
|
|
931
1134
|
<span class="cline-any cline-neutral"> </span>
|
|
1135
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1136
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1137
|
+
<span class="cline-any cline-yes">64x</span>
|
|
932
1138
|
<span class="cline-any cline-neutral"> </span>
|
|
933
|
-
<span class="cline-any cline-yes">39x</span>
|
|
934
1139
|
<span class="cline-any cline-neutral"> </span>
|
|
1140
|
+
<span class="cline-any cline-yes">64x</span>
|
|
935
1141
|
<span class="cline-any cline-neutral"> </span>
|
|
1142
|
+
<span class="cline-any cline-yes">64x</span>
|
|
936
1143
|
<span class="cline-any cline-neutral"> </span>
|
|
937
1144
|
<span class="cline-any cline-neutral"> </span>
|
|
1145
|
+
<span class="cline-any cline-yes">125x</span>
|
|
938
1146
|
<span class="cline-any cline-neutral"> </span>
|
|
939
1147
|
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1149
|
+
<span class="cline-any cline-yes">37x</span>
|
|
940
1150
|
<span class="cline-any cline-neutral"> </span>
|
|
941
1151
|
<span class="cline-any cline-neutral"> </span>
|
|
942
1152
|
<span class="cline-any cline-neutral"> </span>
|
|
943
1153
|
<span class="cline-any cline-neutral"> </span>
|
|
1154
|
+
<span class="cline-any cline-yes">540x</span>
|
|
944
1155
|
<span class="cline-any cline-neutral"> </span>
|
|
945
1156
|
<span class="cline-any cline-neutral"> </span>
|
|
1157
|
+
<span class="cline-any cline-yes">125x</span>
|
|
946
1158
|
<span class="cline-any cline-neutral"> </span>
|
|
947
1159
|
<span class="cline-any cline-neutral"> </span>
|
|
948
1160
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -952,50 +1164,44 @@
|
|
|
952
1164
|
<span class="cline-any cline-neutral"> </span>
|
|
953
1165
|
<span class="cline-any cline-neutral"> </span>
|
|
954
1166
|
<span class="cline-any cline-neutral"> </span>
|
|
955
|
-
<span class="cline-any cline-yes">34x</span>
|
|
956
1167
|
<span class="cline-any cline-neutral"> </span>
|
|
957
1168
|
<span class="cline-any cline-neutral"> </span>
|
|
958
|
-
<span class="cline-any cline-yes">22x</span>
|
|
959
|
-
<span class="cline-any cline-yes">22x</span>
|
|
960
|
-
<span class="cline-any cline-yes">22x</span>
|
|
961
|
-
<span class="cline-any cline-yes">188x</span>
|
|
962
1169
|
<span class="cline-any cline-neutral"> </span>
|
|
963
1170
|
<span class="cline-any cline-neutral"> </span>
|
|
964
|
-
<span class="cline-any cline-yes">188x</span>
|
|
965
1171
|
<span class="cline-any cline-neutral"> </span>
|
|
966
1172
|
<span class="cline-any cline-neutral"> </span>
|
|
967
|
-
<span class="cline-any cline-yes">188x</span>
|
|
968
|
-
<span class="cline-any cline-yes">149x</span>
|
|
969
1173
|
<span class="cline-any cline-neutral"> </span>
|
|
970
|
-
<span class="cline-any cline-yes">39x</span>
|
|
971
1174
|
<span class="cline-any cline-neutral"> </span>
|
|
972
|
-
<span class="cline-any cline-yes">
|
|
1175
|
+
<span class="cline-any cline-yes">540x</span>
|
|
973
1176
|
<span class="cline-any cline-neutral"> </span>
|
|
974
|
-
<span class="cline-any cline-yes">22x</span>
|
|
975
1177
|
<span class="cline-any cline-neutral"> </span>
|
|
976
1178
|
<span class="cline-any cline-neutral"> </span>
|
|
977
|
-
<span class="cline-any cline-yes">
|
|
978
|
-
<span class="cline-any cline-yes">188x</span>
|
|
979
|
-
<span class="cline-any cline-yes">1434x</span>
|
|
980
|
-
<span class="cline-any cline-yes">1434x</span>
|
|
1179
|
+
<span class="cline-any cline-yes">540x</span>
|
|
981
1180
|
<span class="cline-any cline-neutral"> </span>
|
|
982
1181
|
<span class="cline-any cline-neutral"> </span>
|
|
983
|
-
<span class="cline-any cline-yes">
|
|
984
|
-
<span class="cline-any cline-yes">
|
|
985
|
-
<span class="cline-any cline-
|
|
986
|
-
<span class="cline-any cline-
|
|
1182
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1183
|
+
<span class="cline-any cline-yes">355x</span>
|
|
1184
|
+
<span class="cline-any cline-yes">355x</span>
|
|
1185
|
+
<span class="cline-any cline-yes">355x</span>
|
|
987
1186
|
<span class="cline-any cline-neutral"> </span>
|
|
988
|
-
<span class="cline-any cline-no"> </span>
|
|
989
1187
|
<span class="cline-any cline-neutral"> </span>
|
|
990
1188
|
<span class="cline-any cline-neutral"> </span>
|
|
991
1189
|
<span class="cline-any cline-neutral"> </span>
|
|
1190
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1191
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1192
|
+
<span class="cline-any cline-yes">321x</span>
|
|
1193
|
+
<span class="cline-any cline-yes">321x</span>
|
|
992
1194
|
<span class="cline-any cline-neutral"> </span>
|
|
993
|
-
<span class="cline-any cline-yes">
|
|
994
|
-
<span class="cline-any cline-yes">
|
|
1195
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1196
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1197
|
+
<span class="cline-any cline-yes">355x</span>
|
|
1198
|
+
<span class="cline-any cline-yes">355x</span>
|
|
995
1199
|
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1201
|
+
<span class="cline-any cline-yes">538x</span>
|
|
1202
|
+
<span class="cline-any cline-yes">538x</span>
|
|
996
1203
|
<span class="cline-any cline-neutral"> </span>
|
|
997
1204
|
<span class="cline-any cline-neutral"> </span>
|
|
998
|
-
<span class="cline-any cline-yes">1434x</span>
|
|
999
1205
|
<span class="cline-any cline-neutral"> </span>
|
|
1000
1206
|
<span class="cline-any cline-neutral"> </span>
|
|
1001
1207
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1003,76 +1209,154 @@
|
|
|
1003
1209
|
<span class="cline-any cline-neutral"> </span>
|
|
1004
1210
|
<span class="cline-any cline-neutral"> </span>
|
|
1005
1211
|
<span class="cline-any cline-neutral"> </span>
|
|
1006
|
-
<span class="cline-any cline-yes">34x</span>
|
|
1007
|
-
<span class="cline-any cline-yes">188x</span>
|
|
1008
|
-
<span class="cline-any cline-yes">6747x</span>
|
|
1009
|
-
<span class="cline-any cline-yes">6747x</span>
|
|
1010
|
-
<span class="cline-any cline-yes">6747x</span>
|
|
1011
|
-
<span class="cline-any cline-no"> </span>
|
|
1012
1212
|
<span class="cline-any cline-neutral"> </span>
|
|
1013
|
-
<span class="cline-any cline-yes">6747x</span>
|
|
1014
|
-
<span class="cline-any cline-yes">6747x</span>
|
|
1015
|
-
<span class="cline-any cline-yes">6747x</span>
|
|
1016
1213
|
<span class="cline-any cline-neutral"> </span>
|
|
1214
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1215
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1216
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1217
|
+
<span class="cline-any cline-yes">44x</span>
|
|
1218
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1219
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1220
|
+
<span class="cline-any cline-yes">147x</span>
|
|
1221
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1222
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1223
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1224
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1226
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1227
|
+
<span class="cline-any cline-yes">147x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">147x</span>
|
|
1229
|
+
<span class="cline-any cline-yes">147x</span>
|
|
1230
|
+
<span class="cline-any cline-yes">121x</span>
|
|
1231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
+
<span class="cline-any cline-yes">147x</span>
|
|
1233
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1234
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1235
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1236
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1237
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1238
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1239
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1240
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1241
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1242
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1243
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1244
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1245
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1246
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1247
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1248
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1249
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1250
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1251
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1252
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1253
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1254
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1255
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1256
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1257
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1258
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1259
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1261
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1262
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1263
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1266
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1267
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1268
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1269
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1271
|
+
<span class="cline-any cline-yes">213x</span>
|
|
1272
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1273
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1274
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1275
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1276
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1277
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1278
|
+
<span class="cline-any cline-yes">565x</span>
|
|
1279
|
+
<span class="cline-any cline-yes">258x</span>
|
|
1280
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1281
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1282
|
+
<span class="cline-any cline-yes">307x</span>
|
|
1283
|
+
<span class="cline-any cline-yes">562x</span>
|
|
1284
|
+
<span class="cline-any cline-yes">562x</span>
|
|
1285
|
+
<span class="cline-any cline-yes">562x</span>
|
|
1286
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
+
<span class="cline-any cline-yes">551x</span>
|
|
1289
|
+
<span class="cline-any cline-yes">551x</span>
|
|
1290
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1291
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1292
|
+
<span class="cline-any cline-yes">551x</span>
|
|
1293
|
+
<span class="cline-any cline-yes">540x</span>
|
|
1017
1294
|
<span class="cline-any cline-neutral"> </span>
|
|
1018
1295
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
|
-
<span class="cline-any cline-yes">34x</span>
|
|
1020
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1021
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1022
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1023
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1024
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1025
|
-
<span class="cline-any cline-yes">39x</span>
|
|
1026
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1027
|
-
<span class="cline-any cline-yes">22x</span>
|
|
1028
1296
|
<span class="cline-any cline-neutral"> </span>
|
|
1029
1297
|
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
-
<span class="cline-any cline-yes">34x</span>
|
|
1031
1298
|
<span class="cline-any cline-neutral"> </span>
|
|
1032
1299
|
<span class="cline-any cline-neutral"> </span>
|
|
1033
1300
|
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
-
<span class="cline-any cline-yes">4x</span>
|
|
1035
1301
|
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1037
1302
|
<span class="cline-any cline-neutral"> </span>
|
|
1038
1303
|
<span class="cline-any cline-neutral"> </span>
|
|
1039
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1040
1304
|
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1042
1305
|
<span class="cline-any cline-neutral"> </span>
|
|
1306
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1307
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1308
|
+
<span class="cline-any cline-yes">64x</span>
|
|
1309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1310
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1311
|
+
<span class="cline-any cline-yes">42x</span>
|
|
1312
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1314
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1043
1319
|
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
-
<span class="cline-any cline-yes">34x</span>
|
|
1045
1320
|
<span class="cline-any cline-yes">5x</span>
|
|
1046
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1047
1321
|
<span class="cline-any cline-neutral"> </span>
|
|
1048
|
-
<span class="cline-any cline-
|
|
1049
|
-
<span class="cline-any cline-yes">
|
|
1322
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1324
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1326
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1327
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1329
|
+
<span class="cline-any cline-yes">17x</span>
|
|
1330
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1331
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1333
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1050
1334
|
<span class="cline-any cline-no"> </span>
|
|
1335
|
+
<span class="cline-any cline-yes">15x</span>
|
|
1051
1336
|
<span class="cline-any cline-yes">4x</span>
|
|
1052
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1053
1337
|
<span class="cline-any cline-neutral"> </span>
|
|
1054
|
-
<span class="cline-any cline-yes">
|
|
1338
|
+
<span class="cline-any cline-yes">11x</span>
|
|
1055
1339
|
<span class="cline-any cline-neutral"> </span>
|
|
1056
1340
|
<span class="cline-any cline-neutral"> </span>
|
|
1057
|
-
<span class="cline-any cline-yes">
|
|
1341
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1058
1342
|
<span class="cline-any cline-neutral"> </span>
|
|
1059
1343
|
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
+
<span class="cline-any cline-yes">8x</span>
|
|
1060
1345
|
<span class="cline-any cline-yes">3x</span>
|
|
1061
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1062
1346
|
<span class="cline-any cline-neutral"> </span>
|
|
1063
|
-
<span class="cline-any cline-yes">
|
|
1347
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1064
1348
|
<span class="cline-any cline-neutral"> </span>
|
|
1065
1349
|
<span class="cline-any cline-neutral"> </span>
|
|
1066
|
-
<span class="cline-any cline-yes">
|
|
1350
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1067
1351
|
<span class="cline-any cline-neutral"> </span>
|
|
1068
1352
|
<span class="cline-any cline-neutral"> </span>
|
|
1353
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1069
1354
|
<span class="cline-any cline-yes">3x</span>
|
|
1070
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1071
1355
|
<span class="cline-any cline-neutral"> </span>
|
|
1072
|
-
<span class="cline-any cline-yes">
|
|
1356
|
+
<span class="cline-any cline-yes">6x</span>
|
|
1073
1357
|
<span class="cline-any cline-neutral"> </span>
|
|
1074
1358
|
<span class="cline-any cline-neutral"> </span>
|
|
1075
|
-
<span class="cline-any cline-yes">
|
|
1359
|
+
<span class="cline-any cline-yes">125x</span>
|
|
1076
1360
|
<span class="cline-any cline-neutral"> </span>
|
|
1077
1361
|
<span class="cline-any cline-neutral"> </span>
|
|
1078
1362
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1081,10 +1365,10 @@
|
|
|
1081
1365
|
<span class="cline-any cline-neutral"> </span>
|
|
1082
1366
|
<span class="cline-any cline-neutral"> </span>
|
|
1083
1367
|
<span class="cline-any cline-neutral"> </span>
|
|
1084
|
-
<span class="cline-any cline-yes">
|
|
1368
|
+
<span class="cline-any cline-yes">509x</span>
|
|
1085
1369
|
<span class="cline-any cline-neutral"> </span>
|
|
1086
1370
|
<span class="cline-any cline-neutral"> </span>
|
|
1087
|
-
<span class="cline-any cline-yes">
|
|
1371
|
+
<span class="cline-any cline-yes">509x</span>
|
|
1088
1372
|
<span class="cline-any cline-neutral"> </span>
|
|
1089
1373
|
<span class="cline-any cline-neutral"> </span>
|
|
1090
1374
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1141,6 +1425,9 @@ export interface IEntityInternal<T extends IModel> {
|
|
|
1141
1425
|
references: object;
|
|
1142
1426
|
selectColumnsClause: string;
|
|
1143
1427
|
getPkId: (model: IModel) => string;
|
|
1428
|
+
columnToPropertyMap: Map<string, string>;
|
|
1429
|
+
propertyToColumnMap: Map<string, string>;
|
|
1430
|
+
referencesEntries: Array<{ property: string; ModelClass: IModelClass }>;
|
|
1144
1431
|
}
|
|
1145
1432
|
export type IEntitiesInternal<T extends IModel> = Array<IEntityInternal<T>>;
|
|
1146
1433
|
|
|
@@ -1195,7 +1482,7 @@ export const createCore = ({
|
|
|
1195
1482
|
const collectionDisplayName =
|
|
1196
1483
|
d.collectionDisplayName || `${displayName}s`;
|
|
1197
1484
|
const columns = (
|
|
1198
|
-
typeof d.columns === 'function' ?
|
|
1485
|
+
typeof d.columns === 'function' ? d.columns() : d.columns
|
|
1199
1486
|
).map((d: IColumn) => {
|
|
1200
1487
|
if (typeof d === 'string') {
|
|
1201
1488
|
return {
|
|
@@ -1224,25 +1511,41 @@ export const createCore = ({
|
|
|
1224
1511
|
const pkColumnsData = columns.filter(
|
|
1225
1512
|
(x: IColumnInternal) => x.primaryKey
|
|
1226
1513
|
);
|
|
1227
|
-
const _primaryKeys = pkColumnsData.map(
|
|
1228
|
-
const primaryKeys = _primaryKeys.length > 0 ?
|
|
1514
|
+
const _primaryKeys = pkColumnsData.map((x: IColumnInternal) => x.column);
|
|
1515
|
+
const primaryKeys = _primaryKeys.length > 0 ? _primaryKeys : ['id'];
|
|
1229
1516
|
|
|
1230
|
-
// Returns unique identifier of model (the values of the primary keys)
|
|
1231
1517
|
const getPkId = (model: IModel): string => {
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1518
|
+
let id = '';
|
|
1519
|
+
for (let i = 0; i < primaryKeys.length; i++) {
|
|
1520
|
+
const part = model[primaryKeys[i] as keyof typeof model];
|
|
1521
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (part !== void 0 && part !== null) {
|
|
1522
|
+
id += String(part);
|
|
1523
|
+
}
|
|
1524
|
+
}
|
|
1525
|
+
return id;
|
|
1235
1526
|
};
|
|
1236
1527
|
|
|
1237
|
-
const references =
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1528
|
+
const references: any = {};
|
|
1529
|
+
const referencesEntries: Array<{
|
|
1530
|
+
property: string;
|
|
1531
|
+
ModelClass: IModelClass;
|
|
1532
|
+
}> = [];
|
|
1533
|
+
for (const col of columns) {
|
|
1534
|
+
if (col.references) {
|
|
1535
|
+
references[col.property] = col.references;
|
|
1536
|
+
referencesEntries.push({
|
|
1537
|
+
property: col.property,
|
|
1538
|
+
ModelClass: col.references
|
|
1539
|
+
});
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
const columnToPropertyMap = new Map<string, string>();
|
|
1544
|
+
const propertyToColumnMap = new Map<string, string>();
|
|
1545
|
+
for (let i = 0; i < columnNames.length; i++) {
|
|
1546
|
+
columnToPropertyMap.set(columnNames[i], propertyNames[i]);
|
|
1547
|
+
propertyToColumnMap.set(propertyNames[i], columnNames[i]);
|
|
1548
|
+
}
|
|
1246
1549
|
|
|
1247
1550
|
const selectColumnsClause = prefixedColumnNames
|
|
1248
1551
|
.map(
|
|
@@ -1264,7 +1567,10 @@ export const createCore = ({
|
|
|
1264
1567
|
primaryKeys,
|
|
1265
1568
|
references,
|
|
1266
1569
|
selectColumnsClause,
|
|
1267
|
-
getPkId
|
|
1570
|
+
getPkId,
|
|
1571
|
+
columnToPropertyMap,
|
|
1572
|
+
propertyToColumnMap,
|
|
1573
|
+
referencesEntries
|
|
1268
1574
|
};
|
|
1269
1575
|
}
|
|
1270
1576
|
);
|
|
@@ -1282,8 +1588,8 @@ export const createCore = ({
|
|
|
1282
1588
|
|
|
1283
1589
|
const getEntityByTableName = (tableName: string): IEntityInternal<IModel> => {
|
|
1284
1590
|
const entity = tableNameToEntityMap.get(tableName);
|
|
1285
|
-
|
|
1286
|
-
|
|
1591
|
+
if (!entity) {
|
|
1592
|
+
throw new Error(`Could not find entity for table ${tableName}`);
|
|
1287
1593
|
}
|
|
1288
1594
|
return entity;
|
|
1289
1595
|
};
|
|
@@ -1303,8 +1609,8 @@ export const createCore = ({
|
|
|
1303
1609
|
Model: IModelClass
|
|
1304
1610
|
): IEntityInternal<IModel> => {
|
|
1305
1611
|
const entity = modelToEntityMap.get(Model);
|
|
1306
|
-
|
|
1307
|
-
|
|
1612
|
+
if (!entity) {
|
|
1613
|
+
throw new Error(`Could not find entity for class ${Model}`);
|
|
1308
1614
|
}
|
|
1309
1615
|
return entity;
|
|
1310
1616
|
};
|
|
@@ -1313,237 +1619,357 @@ export const createCore = ({
|
|
|
1313
1619
|
return getEntityByModelClass(model.constructor as IModelClass);
|
|
1314
1620
|
};
|
|
1315
1621
|
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1622
|
+
const entityReferencePlans = new Map<
|
|
1623
|
+
IEntityInternal<IModel>,
|
|
1624
|
+
Array<{ property: string; targetEntity: IEntityInternal<IModel> }>
|
|
1625
|
+
>();
|
|
1626
|
+
for (let i = 0; i < entities.length; i++) {
|
|
1627
|
+
const entity = entities[i];
|
|
1628
|
+
const plans = new Array<{
|
|
1629
|
+
property: string;
|
|
1630
|
+
targetEntity: IEntityInternal<IModel>;
|
|
1631
|
+
}>(entity.referencesEntries.length);
|
|
1632
|
+
for (let j = 0; j < entity.referencesEntries.length; j++) {
|
|
1633
|
+
const ref = entity.referencesEntries[j];
|
|
1634
|
+
plans[j] = {
|
|
1635
|
+
property: ref.property,
|
|
1636
|
+
targetEntity: getEntityByModelClass(ref.ModelClass)
|
|
1637
|
+
};
|
|
1638
|
+
}
|
|
1639
|
+
entityReferencePlans.set(entity, plans);
|
|
1640
|
+
}
|
|
1332
1641
|
|
|
1333
|
-
|
|
1642
|
+
interface IRowColumnPlan {
|
|
1643
|
+
rowKey: string;
|
|
1644
|
+
propertyName: string;
|
|
1645
|
+
}
|
|
1646
|
+
interface IEntityRowPlan {
|
|
1647
|
+
entity: IEntityInternal<IModel>;
|
|
1648
|
+
columnPlans: Array<IRowColumnPlan>;
|
|
1649
|
+
primaryKeyRowKeys: Array<string>;
|
|
1650
|
+
}
|
|
1334
1651
|
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1652
|
+
const getPkIdFromRow = (
|
|
1653
|
+
row: any,
|
|
1654
|
+
primaryKeyRowKeys: Array<string>
|
|
1655
|
+
): string => {
|
|
1656
|
+
let id = '';
|
|
1657
|
+
for (let i = 0; i < primaryKeyRowKeys.length; i++) {
|
|
1658
|
+
const part = row[primaryKeyRowKeys[i]];
|
|
1659
|
+
if (part !== void 0 && part !== null) {
|
|
1660
|
+
id += String(part);
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
return id;
|
|
1664
|
+
};
|
|
1665
|
+
|
|
1666
|
+
const buildEntityRowPlans = (sampleRow: any): Array<IEntityRowPlan> => {
|
|
1667
|
+
const plansByTable = new Map<string, IEntityRowPlan>();
|
|
1668
|
+
const tableOrder: Array<string> = [];
|
|
1669
|
+
for (const text in sampleRow) {
|
|
1670
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!Object.prototype.hasOwnProperty.call(sampleRow, text)) {
|
|
1671
|
+
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1672
|
+
}
|
|
1673
|
+
const hashIndex = text.indexOf('#');
|
|
1674
|
+
if (hashIndex === -1) {
|
|
1675
|
+
throw new Error('Column names must be namespaced to table');
|
|
1676
|
+
}
|
|
1677
|
+
const tableName = text.substring(0, hashIndex);
|
|
1678
|
+
const column = text.substring(hashIndex + 1);
|
|
1679
|
+
|
|
1680
|
+
let plan = plansByTable.get(tableName);
|
|
1681
|
+
if (!plan) {
|
|
1682
|
+
const entity = getEntityByTableName(tableName);
|
|
1683
|
+
const primaryKeyRowKeys = entity.primaryKeys.map(
|
|
1684
|
+
(pk: string) => `${tableName}#${pk}`
|
|
1343
1685
|
);
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
index
|
|
1358
|
-
];
|
|
1359
|
-
if (node[property] === model.id) {
|
|
1360
|
-
return true;
|
|
1361
|
-
}
|
|
1362
|
-
}
|
|
1363
|
-
return false;
|
|
1364
|
-
});
|
|
1365
|
-
// For first obj type which is has an instance in nodes array,
|
|
1366
|
-
// get its index in nodes array
|
|
1367
|
-
const indexOfOldestParent =
|
|
1368
|
-
array.reduce((answer: number | null, obj: IModel) => {
|
|
1369
|
-
if (answer != null) {
|
|
1370
|
-
return answer;
|
|
1371
|
-
}
|
|
1372
|
-
const index = nodes.findIndex(
|
|
1373
|
-
(n) => n.constructor === obj.constructor
|
|
1374
|
-
);
|
|
1375
|
-
if (index !== -1) {
|
|
1376
|
-
return index;
|
|
1377
|
-
}
|
|
1378
|
-
return null;
|
|
1379
|
-
}, null) || 0;
|
|
1380
|
-
const parentHeirarchy = [
|
|
1381
|
-
root,
|
|
1382
|
-
...nodes.slice(0, indexOfOldestParent + 1).reverse()
|
|
1383
|
-
];
|
|
1384
|
-
const nodeItPointsTo = parentHeirarchy.find((parent) => {
|
|
1385
|
-
const indexes = Object.values(getEntityByModel(model).references)
|
|
1386
|
-
.map((x: IModelClass, i: number) =>
|
|
1387
|
-
x === parent.constructor ? i : null
|
|
1388
|
-
)
|
|
1389
|
-
.filter((x: number | null, i) => x != null) as Array<number>;
|
|
1390
|
-
if (!indexes.length) {
|
|
1391
|
-
return false;
|
|
1392
|
-
}
|
|
1393
|
-
for (const index of indexes) {
|
|
1394
|
-
const property = Object.keys(getEntityByModel(model).references)[
|
|
1395
|
-
index
|
|
1396
|
-
];
|
|
1397
|
-
if (model[property] === parent.id) {
|
|
1398
|
-
return true;
|
|
1399
|
-
}
|
|
1400
|
-
}
|
|
1401
|
-
return false;
|
|
1402
|
-
});
|
|
1403
|
-
if (isNodeAlreadySeen) {
|
|
1404
|
-
if (nodeItPointsTo && !nodePointingToIt) {
|
|
1405
|
-
nodes = [model, ...nodes];
|
|
1406
|
-
return;
|
|
1407
|
-
}
|
|
1408
|
-
// If the nodePointingToIt (eg, parcel_event) is part of an
|
|
1409
|
-
// existing collection on this node (eg, parcel) which is a
|
|
1410
|
-
// nodeAlreadySeen, early return so we don't create it (parcel) on
|
|
1411
|
-
// the nodePointingToIt (parcel_event), since it (parcel) has been
|
|
1412
|
-
// shown to be the parent (of parcel_events).
|
|
1413
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (nodePointingToIt) {
|
|
1414
|
-
const ec =
|
|
1415
|
-
model[
|
|
1416
|
-
getEntityByModel(nodePointingToIt)
|
|
1417
|
-
.collectionDisplayName as keyof typeof model
|
|
1418
|
-
];
|
|
1419
|
-
if (ec && ec.models.find((m: IModel) => m === nodePointingToIt)) {
|
|
1420
|
-
nodes = [model, ...nodes];
|
|
1421
|
-
return;
|
|
1422
|
-
}
|
|
1423
|
-
}
|
|
1424
|
-
}
|
|
1425
|
-
if (nodePointingToIt) {
|
|
1426
|
-
nodePointingToIt[getEntityByModel(model).displayName] = model;
|
|
1427
|
-
} else if (nodeItPointsTo) {
|
|
1428
|
-
let collection =
|
|
1429
|
-
nodeItPointsTo[getEntityByModel(model).collectionDisplayName];
|
|
1430
|
-
if (collection) {
|
|
1431
|
-
collection.models.push(model);
|
|
1432
|
-
} else {
|
|
1433
|
-
const Collection = getEntityByModel(model).Collection;
|
|
1434
|
-
nodeItPointsTo[getEntityByModel(model).collectionDisplayName] =
|
|
1435
|
-
new Collection({
|
|
1436
|
-
models: [model]
|
|
1437
|
-
});
|
|
1438
|
-
}
|
|
1686
|
+
plan = {
|
|
1687
|
+
entity,
|
|
1688
|
+
columnPlans: [],
|
|
1689
|
+
primaryKeyRowKeys
|
|
1690
|
+
};
|
|
1691
|
+
plansByTable.set(tableName, plan);
|
|
1692
|
+
tableOrder.push(tableName);
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1695
|
+
let propertyName = plan.entity.columnToPropertyMap.get(column);
|
|
1696
|
+
if (!propertyName) {
|
|
1697
|
+
if (column.startsWith('meta_')) {
|
|
1698
|
+
propertyName = camelCase(column);
|
|
1439
1699
|
} else {
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
return;
|
|
1443
|
-
}
|
|
1444
|
-
<span class="cstat-no" title="statement not covered" > throw Error(</span>
|
|
1445
|
-
`Could not find how this BO fits: ${JSON.stringify(model)} ${
|
|
1446
|
-
getEntityByModel(model).tableName
|
|
1447
|
-
}`
|
|
1700
|
+
throw Error(
|
|
1701
|
+
`No property name for "${column}" in business object "${plan.entity.displayName}". Non-spec'd columns must begin with "meta_".`
|
|
1448
1702
|
);
|
|
1449
1703
|
}
|
|
1450
|
-
|
|
1704
|
+
}
|
|
1705
|
+
plan.columnPlans.push({
|
|
1706
|
+
rowKey: text,
|
|
1707
|
+
propertyName
|
|
1451
1708
|
});
|
|
1452
|
-
}
|
|
1709
|
+
}
|
|
1453
1710
|
|
|
1454
|
-
|
|
1711
|
+
const orderedPlans = new Array<IEntityRowPlan>(tableOrder.length);
|
|
1712
|
+
for (let i = 0; i < tableOrder.length; i++) {
|
|
1713
|
+
orderedPlans[i] = plansByTable.get(tableOrder[i]) as IEntityRowPlan;
|
|
1714
|
+
}
|
|
1715
|
+
return orderedPlans;
|
|
1455
1716
|
};
|
|
1456
1717
|
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
.
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
.join('@');
|
|
1488
|
-
if (accum.has(id)) {
|
|
1489
|
-
accum.set(id, [...accum.get(id), item]);
|
|
1490
|
-
} else {
|
|
1491
|
-
accum.set(id, [item]);
|
|
1718
|
+
const materializeModelsFromRow = (
|
|
1719
|
+
row: any,
|
|
1720
|
+
entityRowPlans: Array<IEntityRowPlan>,
|
|
1721
|
+
rootScopedModelsByEntity: IModelsByEntity,
|
|
1722
|
+
rowModels: Array<IModel | void>,
|
|
1723
|
+
rowModelPkIds: Array<string>,
|
|
1724
|
+
rowCreatedWithPkIndexes: Array<number>
|
|
1725
|
+
): IModel => {
|
|
1726
|
+
rowCreatedWithPkIndexes.length = 0;
|
|
1727
|
+
for (let i = 0; i < entityRowPlans.length; i++) {
|
|
1728
|
+
const plan = entityRowPlans[i];
|
|
1729
|
+
const pkId = getPkIdFromRow(row, plan.primaryKeyRowKeys);
|
|
1730
|
+
rowModelPkIds[i] = pkId;
|
|
1731
|
+
if (pkId) {
|
|
1732
|
+
let modelsForEntity = rootScopedModelsByEntity.get(plan.entity);
|
|
1733
|
+
if (!modelsForEntity) {
|
|
1734
|
+
modelsForEntity = new Map<string, IModel>();
|
|
1735
|
+
rootScopedModelsByEntity.set(plan.entity, modelsForEntity);
|
|
1736
|
+
} else {
|
|
1737
|
+
const existing = modelsForEntity.get(pkId);
|
|
1738
|
+
if (existing) {
|
|
1739
|
+
rowModels[i] = existing;
|
|
1740
|
+
continue;
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1743
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>if (i !== 0) {
|
|
1744
|
+
// No primary key means this is typically an outer-joined null row.
|
|
1745
|
+
// Skip model construction for non-root entities since it cannot link.
|
|
1746
|
+
rowModels[i] = void 0;
|
|
1747
|
+
continue;
|
|
1492
1748
|
}
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1749
|
+
const props: any = {};
|
|
1750
|
+
for (let j = 0; j < plan.columnPlans.length; j++) {
|
|
1751
|
+
const columnPlan = plan.columnPlans[j];
|
|
1752
|
+
props[columnPlan.propertyName] = row[columnPlan.rowKey];
|
|
1753
|
+
}
|
|
1754
|
+
const model = new plan.entity.Model(props);
|
|
1755
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (pkId) {
|
|
1756
|
+
// modelsForEntity is guaranteed to be initialized above for pk rows.
|
|
1757
|
+
(rootScopedModelsByEntity.get(plan.entity) as Map<string, IModel>).set(
|
|
1758
|
+
pkId,
|
|
1759
|
+
model
|
|
1760
|
+
);
|
|
1761
|
+
rowCreatedWithPkIndexes.push(i);
|
|
1762
|
+
}
|
|
1763
|
+
rowModels[i] = model;
|
|
1764
|
+
}
|
|
1765
|
+
return rowModels[0] as IModel;
|
|
1496
1766
|
};
|
|
1497
1767
|
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
}
|
|
1768
|
+
type IModelsByEntity = Map<IEntityInternal<IModel>, Map<string, IModel>>;
|
|
1769
|
+
interface IRootScopeState {
|
|
1770
|
+
modelsByEntity: IModelsByEntity;
|
|
1771
|
+
collectionMembership?: WeakMap<
|
|
1772
|
+
IModel,
|
|
1773
|
+
Map<IEntityInternal<IModel>, Set<string>>
|
|
1774
|
+
>;
|
|
1775
|
+
}
|
|
1776
|
+
type IRootScopeStateByKey = Map<string, IRootScopeState>;
|
|
1777
|
+
|
|
1778
|
+
const getRootScopeKey = (
|
|
1779
|
+
row: any,
|
|
1780
|
+
rootEntity: IEntityInternal<IModel>,
|
|
1781
|
+
rootPrimaryKeys: Array<string>
|
|
1782
|
+
): string => {
|
|
1783
|
+
let rootScopeKey = '';
|
|
1784
|
+
for (let i = 0; i < rootPrimaryKeys.length; i++) {
|
|
1785
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (i > 0) {
|
|
1786
|
+
<span class="cstat-no" title="statement not covered" > rootScopeKey += '@';</span>
|
|
1787
|
+
}
|
|
1788
|
+
const value = row[`${rootEntity.tableName}#${rootPrimaryKeys[i]}`];
|
|
1789
|
+
rootScopeKey += value === void 0 || value === null ? <span class="branch-0 cbranch-no" title="branch not covered" >'' </span>: String(value);
|
|
1790
|
+
}
|
|
1791
|
+
return rootScopeKey;
|
|
1792
|
+
};
|
|
1793
|
+
|
|
1794
|
+
const ensureRootScopeState = (
|
|
1795
|
+
rootScopeKey: string,
|
|
1796
|
+
rootScopeStateByKey: IRootScopeStateByKey
|
|
1797
|
+
): IRootScopeState => {
|
|
1798
|
+
let state = rootScopeStateByKey.get(rootScopeKey);
|
|
1799
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!state) {
|
|
1800
|
+
state = {
|
|
1801
|
+
modelsByEntity: new Map<IEntityInternal<IModel>, Map<string, IModel>>()
|
|
1802
|
+
};
|
|
1803
|
+
rootScopeStateByKey.set(rootScopeKey, state);
|
|
1804
|
+
}
|
|
1805
|
+
return state;
|
|
1806
|
+
};
|
|
1807
|
+
|
|
1808
|
+
const ensureCollectionMembership = (
|
|
1809
|
+
rootScopeState: IRootScopeState
|
|
1810
|
+
): WeakMap<IModel, Map<IEntityInternal<IModel>, Set<string>>> => {
|
|
1811
|
+
if (!rootScopeState.collectionMembership) {
|
|
1812
|
+
rootScopeState.collectionMembership = new WeakMap<
|
|
1813
|
+
IModel,
|
|
1814
|
+
Map<IEntityInternal<IModel>, Set<string>>
|
|
1815
|
+
>();
|
|
1816
|
+
}
|
|
1817
|
+
return rootScopeState.collectionMembership;
|
|
1818
|
+
};
|
|
1819
|
+
|
|
1820
|
+
const linkSourceToTarget = ({
|
|
1821
|
+
sourceEntity,
|
|
1822
|
+
sourceModel,
|
|
1823
|
+
sourceModelPkId,
|
|
1824
|
+
targetEntity,
|
|
1825
|
+
targetModel,
|
|
1826
|
+
collectionMembership
|
|
1827
|
+
}: {
|
|
1828
|
+
sourceEntity: IEntityInternal<IModel>;
|
|
1829
|
+
sourceModel: IModel;
|
|
1830
|
+
sourceModelPkId: string;
|
|
1831
|
+
targetEntity: IEntityInternal<IModel>;
|
|
1832
|
+
targetModel: IModel;
|
|
1833
|
+
collectionMembership: WeakMap<
|
|
1834
|
+
IModel,
|
|
1835
|
+
Map<IEntityInternal<IModel>, Set<string>>
|
|
1836
|
+
>;
|
|
1837
|
+
}) => {
|
|
1838
|
+
sourceModel[targetEntity.displayName as keyof typeof sourceModel] =
|
|
1839
|
+
targetModel;
|
|
1840
|
+
|
|
1841
|
+
let collection =
|
|
1842
|
+
targetModel[
|
|
1843
|
+
sourceEntity.collectionDisplayName as keyof typeof targetModel
|
|
1844
|
+
];
|
|
1845
|
+
if (!collection) {
|
|
1846
|
+
const Collection = sourceEntity.Collection;
|
|
1847
|
+
collection = new Collection({ models: [] });
|
|
1848
|
+
targetModel[
|
|
1849
|
+
sourceEntity.collectionDisplayName as keyof typeof targetModel
|
|
1850
|
+
] = collection;
|
|
1851
|
+
}
|
|
1852
|
+
|
|
1853
|
+
let byCollection = collectionMembership.get(targetModel);
|
|
1854
|
+
if (!byCollection) {
|
|
1855
|
+
byCollection = new Map<IEntityInternal<IModel>, Set<string>>();
|
|
1856
|
+
collectionMembership.set(targetModel, byCollection);
|
|
1857
|
+
}
|
|
1858
|
+
let memberIds = byCollection.get(sourceEntity);
|
|
1859
|
+
if (!memberIds) {
|
|
1860
|
+
memberIds = new Set<string>();
|
|
1861
|
+
byCollection.set(sourceEntity, memberIds);
|
|
1862
|
+
}
|
|
1863
|
+
if (!memberIds.has(sourceModelPkId)) {
|
|
1864
|
+
collection.models.push(sourceModel);
|
|
1865
|
+
memberIds.add(sourceModelPkId);
|
|
1866
|
+
}
|
|
1521
1867
|
};
|
|
1522
1868
|
|
|
1523
1869
|
/*
|
|
1524
|
-
*
|
|
1525
|
-
*
|
|
1870
|
+
* createFromDatabase architecture:
|
|
1871
|
+
* 1) Compile row plans once (column -> property mapping per entity/table).
|
|
1872
|
+
* 2) Materialize models per row with scoped de-duplication by root scope key.
|
|
1873
|
+
* 3) Index models by root scope + entity + entity primary key.
|
|
1874
|
+
* 4) Link refs incrementally as new models appear.
|
|
1875
|
+
* 5) Return root models in first-seen root scope order.
|
|
1526
1876
|
*/
|
|
1527
|
-
const
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1877
|
+
const createFromDatabase = <T extends ICollection<IModel>>(rows: any): T => {
|
|
1878
|
+
const result = Array.isArray(rows) ? rows : [rows];
|
|
1879
|
+
const len = result.length;
|
|
1880
|
+
const entityRowPlans = buildEntityRowPlans(result[0]);
|
|
1881
|
+
const selectedEntities = new Set<IEntityInternal<IModel>>();
|
|
1882
|
+
for (let i = 0; i < entityRowPlans.length; i++) {
|
|
1883
|
+
selectedEntities.add(entityRowPlans[i].entity);
|
|
1884
|
+
}
|
|
1885
|
+
const applicableRefPlans = new Map<
|
|
1886
|
+
IEntityInternal<IModel>,
|
|
1887
|
+
Array<{ property: string; targetEntity: IEntityInternal<IModel> }>
|
|
1888
|
+
>();
|
|
1889
|
+
for (let i = 0; i < entityRowPlans.length; i++) {
|
|
1890
|
+
const entity = entityRowPlans[i].entity;
|
|
1891
|
+
const refs = entityReferencePlans.get(entity) || <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
|
|
1892
|
+
const filteredRefs = refs.filter((ref) =>
|
|
1893
|
+
selectedEntities.has(ref.targetEntity)
|
|
1894
|
+
);
|
|
1895
|
+
applicableRefPlans.set(entity, filteredRefs);
|
|
1896
|
+
}
|
|
1897
|
+
const rootEntity = entityRowPlans[0].entity;
|
|
1898
|
+
const rootPrimaryKeys = rootEntity.primaryKeys;
|
|
1899
|
+
const rootScopeOrder: Array<string> = [];
|
|
1900
|
+
const rootModelsByScopeKey = new Map<string, IModel>();
|
|
1901
|
+
const rootScopeStateByKey: IRootScopeStateByKey = new Map();
|
|
1902
|
+
let currentRootScopeKey: string | void = void 0;
|
|
1903
|
+
let currentRootScopeState: IRootScopeState | void = void 0;
|
|
1904
|
+
const rowModels = new Array<IModel | void>(entityRowPlans.length);
|
|
1905
|
+
const rowModelPkIds = new Array<string>(entityRowPlans.length);
|
|
1906
|
+
const rowCreatedWithPkIndexes: Array<number> = [];
|
|
1907
|
+
|
|
1908
|
+
// Phase 1: materialize and index model instances by root scope + entity.
|
|
1909
|
+
for (let i = 0; i < len; i++) {
|
|
1910
|
+
const row = result[i];
|
|
1911
|
+
const rootScopeKey = getRootScopeKey(row, rootEntity, rootPrimaryKeys);
|
|
1912
|
+
let rootScopeState: IRootScopeState | void = currentRootScopeState;
|
|
1913
|
+
if (!rootScopeState || rootScopeKey !== currentRootScopeKey) {
|
|
1914
|
+
rootScopeState = ensureRootScopeState(
|
|
1915
|
+
rootScopeKey,
|
|
1916
|
+
rootScopeStateByKey
|
|
1917
|
+
);
|
|
1918
|
+
currentRootScopeKey = rootScopeKey;
|
|
1919
|
+
currentRootScopeState = rootScopeState;
|
|
1920
|
+
}
|
|
1921
|
+
const rootModel = materializeModelsFromRow(
|
|
1922
|
+
row,
|
|
1923
|
+
entityRowPlans,
|
|
1924
|
+
rootScopeState.modelsByEntity,
|
|
1925
|
+
rowModels,
|
|
1926
|
+
rowModelPkIds,
|
|
1927
|
+
rowCreatedWithPkIndexes
|
|
1928
|
+
);
|
|
1929
|
+
if (!rootModelsByScopeKey.has(rootScopeKey)) {
|
|
1930
|
+
rootScopeOrder.push(rootScopeKey);
|
|
1931
|
+
rootModelsByScopeKey.set(rootScopeKey, rootModel);
|
|
1533
1932
|
}
|
|
1534
|
-
obj[tableName] = obj[tableName] || {};
|
|
1535
|
-
obj[tableName][column] = result[text as keyof typeof result];
|
|
1536
|
-
return obj;
|
|
1537
|
-
}, {});
|
|
1538
|
-
};
|
|
1539
1933
|
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1934
|
+
for (let c = 0; c < rowCreatedWithPkIndexes.length; c++) {
|
|
1935
|
+
const j = rowCreatedWithPkIndexes[c];
|
|
1936
|
+
const sourceModel = rowModels[j] as IModel;
|
|
1937
|
+
const sourceModelPkId = rowModelPkIds[j];
|
|
1938
|
+
const sourceEntity = entityRowPlans[j].entity;
|
|
1939
|
+
|
|
1940
|
+
const refs = applicableRefPlans.get(sourceEntity);
|
|
1941
|
+
if (!refs || refs.length === 0) {
|
|
1942
|
+
continue;
|
|
1943
|
+
}
|
|
1944
|
+
|
|
1945
|
+
for (let r = 0; r < refs.length; r++) {
|
|
1946
|
+
const ref = refs[r];
|
|
1947
|
+
const refId = sourceModel[ref.property as keyof typeof sourceModel];
|
|
1948
|
+
if (refId == null) {
|
|
1949
|
+
continue;
|
|
1950
|
+
}
|
|
1951
|
+
const targetPkId = String(refId);
|
|
1952
|
+
const target = rootScopeState.modelsByEntity
|
|
1953
|
+
.get(ref.targetEntity)
|
|
1954
|
+
?.get(targetPkId);
|
|
1955
|
+
if (target) {
|
|
1956
|
+
linkSourceToTarget({
|
|
1957
|
+
sourceEntity,
|
|
1958
|
+
sourceModel,
|
|
1959
|
+
sourceModelPkId,
|
|
1960
|
+
targetEntity: ref.targetEntity,
|
|
1961
|
+
targetModel: target,
|
|
1962
|
+
collectionMembership: ensureCollectionMembership(rootScopeState)
|
|
1963
|
+
});
|
|
1964
|
+
}
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1968
|
+
|
|
1969
|
+
const models = new Array<IModel>(rootScopeOrder.length);
|
|
1970
|
+
for (let i = 0; i < rootScopeOrder.length; i++) {
|
|
1971
|
+
models[i] = rootModelsByScopeKey.get(rootScopeOrder[i]) as IModel;
|
|
1972
|
+
}
|
|
1547
1973
|
const Collection = getEntityByModel(models[0]).Collection;
|
|
1548
1974
|
return <T>new Collection({ models });
|
|
1549
1975
|
};
|
|
@@ -1615,7 +2041,7 @@ export const createCore = ({
|
|
|
1615
2041
|
</div><!-- /wrapper -->
|
|
1616
2042
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1617
2043
|
Code coverage
|
|
1618
|
-
generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at
|
|
2044
|
+
generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Sun Mar 01 2026 17:10:47 GMT-0500 (Eastern Standard Time)
|
|
1619
2045
|
</div>
|
|
1620
2046
|
</div>
|
|
1621
2047
|
<script src="../prettify.js"></script>
|