Skip to content

Commit b60bc9f

Browse files
committed
perf: optimize query memory usage of simple child entity fields without ordering
This is especially important when they are queried alongside a root field TODO this broke a shortcut of quantifier filters TODO this broke logistics/filter-stringmap-in-child-entities TODO this broke root-fields/root-and-parent
1 parent e26912f commit b60bc9f

File tree

69 files changed

+492
-662
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+492
-662
lines changed

spec/regression/collect/tests/nested-field-traversal/aql/childEntitiesInChildEntities.aql

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ LET v_delivery1 = FIRST((
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
1010
"deliveryContents": (
11-
FOR v_deliveryContent1
12-
IN (IS_LIST(v_delivery1.`deliveryContents`) ? v_delivery1.`deliveryContents` : [])
11+
FOR v_item1
12+
IN v_delivery1.`deliveryContents`[*]
1313
RETURN {
1414
"items": (
15-
FOR v_deliveryItem1
16-
IN (IS_LIST(v_deliveryContent1.`items`) ? v_deliveryContent1.`items` : [])
15+
FOR v_item2
16+
IN v_item1.`items`[*]
1717
RETURN {
1818
"subItems": (
19-
FOR v_deliveryItem2
20-
IN (IS_LIST(v_deliveryItem1.`subItems`) ? v_deliveryItem1.`subItems` : [])
21-
SORT (v_deliveryItem2.`itemNumber`) DESC
19+
FOR v_item3
20+
IN v_item2.`subItems`[*]
21+
SORT (v_item3.`itemNumber`) DESC
2222
RETURN {
23-
"itemNumber": v_deliveryItem2.`itemNumber`
23+
"itemNumber": v_item3.`itemNumber`
2424
}
2525
)
2626
}

spec/regression/collect/tests/nested-field-traversal/aql/childEntitiesInCollect.aql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ RETURN {
1212
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
1313
RETURN {
1414
"subItems": (
15-
FOR v_deliveryItem1
16-
IN (IS_LIST(v_item1.`subItems`) ? v_item1.`subItems` : [])
17-
SORT (v_deliveryItem1.`itemNumber`) DESC
15+
FOR v_item2
16+
IN v_item1.`subItems`[*]
17+
SORT (v_item2.`itemNumber`) DESC
1818
RETURN {
19-
"itemNumber": v_deliveryItem1.`itemNumber`
19+
"itemNumber": v_item2.`itemNumber`
2020
}
2121
)
2222
}

spec/regression/collect/tests/nested-field-traversal/aql/collectInChildEntities.aql

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ LET v_delivery1 = FIRST((
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
1010
"deliveryContents": (
11-
FOR v_deliveryContent1
12-
IN (IS_LIST(v_delivery1.`deliveryContents`) ? v_delivery1.`deliveryContents` : [])
11+
FOR v_item1
12+
IN v_delivery1.`deliveryContents`[*]
1313
RETURN {
1414
"items": (
15-
FOR v_deliveryItem1
16-
IN (IS_LIST(v_deliveryContent1.`items`) ? v_deliveryContent1.`items` : [])
15+
FOR v_item2
16+
IN v_item1.`items`[*]
1717
RETURN {
1818
"subSubItems": (
19-
FOR v_item1
20-
IN v_deliveryItem1.`subItems`[*].`subItems`[*][**]
21-
SORT (v_item1.`itemNumber`) DESC
19+
FOR v_item3
20+
IN v_item2.`subItems`[*].`subItems`[*][**]
21+
SORT (v_item3.`itemNumber`) DESC
2222
RETURN {
23-
"itemNumber": v_item1.`itemNumber`
23+
"itemNumber": v_item3.`itemNumber`
2424
}
2525
)
2626
}

spec/regression/logistics/tests/add-child-entity/aql/add.aql

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,12 @@ RETURN (
2424
WITH @@deliveries
2525
LET v_delivery1 = DOCUMENT(@@deliveries, @var1)
2626
RETURN (IS_NULL(v_delivery1) ? null : {
27-
"items": (
28-
FOR v_deliveryItem1
29-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
30-
RETURN {
31-
"itemNumber": v_deliveryItem1.`itemNumber`
32-
}
33-
)
27+
"items": v_delivery1.`items`[* RETURN {
28+
"itemNumber": CURRENT.`itemNumber`
29+
}]
3430
})
3531

36-
// Peak memory usage: 32768 bytes
32+
// Peak memory usage: 0 bytes
3733

3834
// ----------------------------------------------------------------
3935

spec/regression/logistics/tests/add-child-entity/aql/query.aql

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,10 @@ LET v_delivery1 = FIRST((
77
))
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
10-
"items": (
11-
FOR v_deliveryItem1
12-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
13-
RETURN {
14-
"itemNumber": v_deliveryItem1.`itemNumber`
15-
}
16-
)
10+
"items": v_delivery1.`items`[* RETURN {
11+
"itemNumber": CURRENT.`itemNumber`
12+
}]
1713
})
1814
}
1915

20-
// Peak memory usage: 32768 bytes
16+
// Peak memory usage: 0 bytes

spec/regression/logistics/tests/aliases/aql/aliases.aql

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,16 @@ LET v_delivery3 = FIRST((
1515
RETURN {
1616
"aDelivery": (IS_NULL(v_delivery1) ? null : {
1717
"nr": v_delivery1.`deliveryNumber`,
18-
"oneItem": (
19-
FOR v_deliveryItem1
20-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
21-
FILTER (v_deliveryItem1.`itemNumber` == @var5)
22-
RETURN {
23-
"itemNumber": v_deliveryItem1.`itemNumber`
24-
}
25-
),
26-
"items": (
27-
FOR v_deliveryItem2
28-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
29-
RETURN {
30-
"itemNumber": v_deliveryItem2.`itemNumber`
31-
}
32-
)
18+
"oneItem": v_delivery1.`items`[* FILTER (CURRENT.`itemNumber` == @var5) RETURN {
19+
"itemNumber": CURRENT.`itemNumber`
20+
}],
21+
"items": v_delivery1.`items`[* RETURN {
22+
"itemNumber": CURRENT.`itemNumber`
23+
}]
3324
}),
3425
"anotherDelivery": (IS_NULL(v_delivery3) ? null : {
3526
"nr": v_delivery3.`deliveryNumber`
3627
})
3728
}
3829

39-
// Peak memory usage: 131072 bytes
30+
// Peak memory usage: 32768 bytes

spec/regression/logistics/tests/count/aql/count.aql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ RETURN {
1313
@var4: {
1414
"count": FIRST(
1515
FOR v_item1
16-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
16+
IN v_delivery1.`items`[*]
1717
COLLECT WITH COUNT INTO v_count1
1818
RETURN v_count1
1919
)

spec/regression/logistics/tests/create-many/aql/create.aql

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -256,13 +256,9 @@ RETURN (
256256
"notices": (IS_LIST(v_delivery1.`dgInfo`.`notices`) ? v_delivery1.`dgInfo`.`notices` : [])
257257
},
258258
"serialNumbers": (IS_LIST(v_delivery1.`serialNumbers`) ? v_delivery1.`serialNumbers` : []),
259-
"items": (
260-
FOR v_deliveryItem1
261-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
262-
RETURN {
263-
"itemNumber": v_deliveryItem1.`itemNumber`
264-
}
265-
),
259+
"items": v_delivery1.`items`[* RETURN {
260+
"itemNumber": CURRENT.`itemNumber`
261+
}],
266262
"handlingUnits": (
267263
FOR v_handlingUnit1
268264
IN OUTBOUND v_delivery1 @@deliveries_handlingUnits
@@ -275,7 +271,7 @@ RETURN (
275271
}
276272
)
277273

278-
// Peak memory usage: 262144 bytes
274+
// Peak memory usage: 229376 bytes
279275

280276
// ----------------------------------------------------------------
281277

spec/regression/logistics/tests/create-many/aql/query.aql

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,9 @@ RETURN {
5353
"notices": (IS_LIST(v_delivery1.`dgInfo`.`notices`) ? v_delivery1.`dgInfo`.`notices` : [])
5454
},
5555
"serialNumbers": (IS_LIST(v_delivery1.`serialNumbers`) ? v_delivery1.`serialNumbers` : []),
56-
"items": (
57-
FOR v_deliveryItem1
58-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
59-
RETURN {
60-
"itemNumber": v_deliveryItem1.`itemNumber`
61-
}
62-
),
56+
"items": v_delivery1.`items`[* RETURN {
57+
"itemNumber": CURRENT.`itemNumber`
58+
}],
6359
"handlingUnits": (
6460
FOR v_handlingUnit1
6561
IN OUTBOUND v_delivery1 @@deliveries_handlingUnits

spec/regression/logistics/tests/create/aql/create.aql

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,9 @@ RETURN (IS_NULL(v_delivery1) ? null : {
8888
"notices": (IS_LIST(v_delivery1.`dgInfo`.`notices`) ? v_delivery1.`dgInfo`.`notices` : [])
8989
},
9090
"serialNumbers": (IS_LIST(v_delivery1.`serialNumbers`) ? v_delivery1.`serialNumbers` : []),
91-
"items": (
92-
FOR v_deliveryItem1
93-
IN (IS_LIST(v_delivery1.`items`) ? v_delivery1.`items` : [])
94-
RETURN {
95-
"itemNumber": v_deliveryItem1.`itemNumber`
96-
}
97-
)
91+
"items": v_delivery1.`items`[* RETURN {
92+
"itemNumber": CURRENT.`itemNumber`
93+
}]
9894
})
9995

10096
// Peak memory usage: 196608 bytes

0 commit comments

Comments
 (0)