Skip to content

Commit ad8f739

Browse files
committed
wip: perf: improve query memory usage of collect fields
Instead of collecting { root, obj } pairs in a list, we now generate the whole collect result including field selection in one subquery. WIP: InMemoryAdapter (do this last when we're sure about the query tree API)
1 parent 59c7ab7 commit ad8f739

File tree

80 files changed

+2339
-1316
lines changed

Some content is hidden

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

80 files changed

+2339
-1316
lines changed

spec/regression/collect/tests/collect-edge-count-access-group/aql/count.aql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ RETURN {
3232
IN (
3333
FOR v_node1, v_edge1, v_path1 IN @var6..@var7 OUTBOUND v_shipment1 @@shipments_deliveries
3434
FILTER (v_node1.`accessGroup` IN @var8)
35-
FILTER v_node1._key != null
3635
RETURN v_node1
3736
)
3837
COLLECT WITH COUNT INTO v_count2

spec/regression/collect/tests/collect-edge-count/aql/countAfter.aql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ RETURN {
2525
FOR v_item2
2626
IN (
2727
FOR v_node2, v_edge1, v_path1 IN @var4..@var5 OUTBOUND v_shipment1 @@shipments_deliveries
28-
FILTER v_node2._key != null
2928
RETURN v_node2
3029
)
3130
COLLECT WITH COUNT INTO v_count2

spec/regression/collect/tests/collect-edge-count/aql/countBefore.aql

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ RETURN {
2525
FOR v_item2
2626
IN (
2727
FOR v_node2, v_edge1, v_path1 IN @var4..@var5 OUTBOUND v_shipment1 @@shipments_deliveries
28-
FILTER v_node2._key != null
2928
RETURN v_node2
3029
)
3130
COLLECT WITH COUNT INTO v_count2

spec/regression/collect/tests/distinct-aggregation/aql/distinct.aql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ RETURN {
1313
IN (
1414
FOR v_item1
1515
IN (
16-
FOR v_node1, v_edge1, v_path1 IN @var3..@var4 OUTBOUND v_delivery1 @@deliveries_handlingUnits
17-
FILTER v_node1._key != null
18-
RETURN v_node1.`warehouseSlot`
16+
FOR v_root1, v_edge1, v_path1 IN @var3..@var4 OUTBOUND v_delivery1 @@deliveries_handlingUnits
17+
FILTER v_root1._key != null
18+
RETURN v_root1.`warehouseSlot`
1919
)
2020
FILTER v_item1 != null
2121
COLLECT v_distinct1 = v_item1

spec/regression/collect/tests/field-aggregation/aql/fields.aql

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,35 @@ RETURN {
77
"deliveryNumber": v_delivery1.`deliveryNumber`,
88
"totalWeightInKg": FIRST(
99
FOR v_item1
10-
IN v_delivery1.`deliveryContents`[*].`items`[*].`weightInKg`[**]
10+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`weightInKg`
1111
FILTER v_item1 != null
1212
COLLECT AGGREGATE v_sum1 = SUM(v_item1)
1313
RETURN v_sum1 != null ? v_sum1 : 0
1414
),
1515
"averageWeightInKg": FIRST(
1616
FOR v_item2
17-
IN v_delivery1.`deliveryContents`[*].`items`[*].`weightInKg`[**]
17+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`weightInKg`
1818
FILTER v_item2 != null
1919
COLLECT AGGREGATE v_average1 = AVERAGE(v_item2)
2020
RETURN v_average1
2121
),
2222
"minWeightInKg": FIRST(
2323
FOR v_item3
24-
IN v_delivery1.`deliveryContents`[*].`items`[*].`weightInKg`[**]
24+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`weightInKg`
2525
FILTER v_item3 != null
2626
COLLECT AGGREGATE v_min1 = MIN(v_item3)
2727
RETURN v_min1
2828
),
2929
"maxWeightInKg": FIRST(
3030
FOR v_item4
31-
IN v_delivery1.`deliveryContents`[*].`items`[*].`weightInKg`[**]
31+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`weightInKg`
3232
FILTER v_item4 != null
3333
COLLECT AGGREGATE v_max1 = MAX(v_item4)
3434
RETURN v_max1
3535
),
3636
"allItemNumbers": (
3737
FOR v_item5
38-
IN v_delivery1.`deliveryContents`[*].`items`[*].`itemNumber`[**]
38+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`itemNumber`
3939
FILTER v_item5 != null
4040
SORT v_item5
4141
COLLECT v_distinct1 = v_item5
@@ -61,76 +61,76 @@ RETURN {
6161
),
6262
"hasDangerousGoods": FIRST(
6363
FOR v_item9
64-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
64+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
6565
COLLECT AGGREGATE v_some_true1 = MAX(v_item9)
6666
RETURN v_some_true1 >= true
6767
),
6868
"hasNonDangerousGoods": FIRST(
6969
FOR v_item10
70-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
70+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
7171
COLLECT AGGREGATE v_some_not_true1 = MAX(!v_item10)
7272
RETURN v_some_not_true1 >= true
7373
),
7474
"hasOnlyDangerousGoods": FIRST(
7575
FOR v_item11
76-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
76+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
7777
COLLECT AGGREGATE v_every_true1 = MAX(!v_item11)
7878
RETURN v_every_true1 < true
7979
),
8080
"hasNoDangerousGoods": FIRST(
8181
FOR v_item12
82-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
82+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
8383
COLLECT AGGREGATE v_none_true1 = MAX(v_item12)
8484
RETURN v_none_true1 < true
8585
),
8686
"dangerousItemCount": FIRST(
8787
FOR v_item13
88-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
88+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
8989
FILTER v_item13 >= true
9090
COLLECT AGGREGATE v_count_true1 = COUNT(v_item13)
9191
RETURN v_count_true1
9292
),
9393
"nonDangerousItemCount": FIRST(
9494
FOR v_item14
95-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
95+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
9696
FILTER v_item14 < true
9797
COLLECT AGGREGATE v_count_not_true1 = COUNT(v_item14)
9898
RETURN v_count_not_true1
9999
),
100100
"hasMissingDangerousGoodsFlag": FIRST(
101101
FOR v_item15
102-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
102+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
103103
COLLECT AGGREGATE v_some_null1 = MAX(v_item15 == null)
104104
RETURN v_some_null1 >= true
105105
),
106106
"hasSomeDangerousGoodsFlag": FIRST(
107107
FOR v_item16
108-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
108+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
109109
COLLECT AGGREGATE v_some_not_null1 = MAX(v_item16 != null)
110110
RETURN v_some_not_null1 >= true
111111
),
112112
"hasAllDangerousGoodsFlags": FIRST(
113113
FOR v_item17
114-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
114+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
115115
COLLECT AGGREGATE v_none_null1 = MAX(v_item17 == null)
116116
RETURN v_none_null1 < true
117117
),
118118
"hasNoDangerousGoodsFlag": FIRST(
119119
FOR v_item18
120-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
120+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
121121
COLLECT AGGREGATE v_every_null1 = MAX(v_item18 != null)
122122
RETURN v_every_null1 < true
123123
),
124124
"missingDangerousGoodsFlagCount": FIRST(
125125
FOR v_item19
126-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
126+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
127127
FILTER v_item19 == null
128128
COLLECT AGGREGATE v_count_null1 = COUNT(v_item19)
129129
RETURN v_count_null1
130130
),
131131
"setDangerousGoodsFlagCount": FIRST(
132132
FOR v_item20
133-
IN v_delivery1.`deliveryContents`[*].`items`[*].`isDangerousGoods`[**]
133+
IN v_delivery1.`deliveryContents`[*].`items`[*][**].`isDangerousGoods`
134134
FILTER v_item20 != null
135135
COLLECT AGGREGATE v_count_not_null1 = COUNT(v_item20)
136136
RETURN v_count_not_null1

spec/regression/collect/tests/field-traversal/aql/fieldsToN.aql

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

spec/regression/collect/tests/field-traversal/aql/fieldsToN_filter.aql

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,8 @@ LET v_delivery1 = FIRST((
77
))
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
10-
"allItems": (
11-
FOR v_deliveryItem1
12-
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13-
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14-
RETURN {
15-
"itemNumber": v_deliveryItem1.`itemNumber`
16-
}
17-
)
10+
"allItems": v_delivery1.`deliveryContents`[*].`items`[*][** FILTER (RIGHT(CURRENT.`itemNumber`, LENGTH(@var3)) == @var4) RETURN {
11+
"itemNumber": CURRENT.`itemNumber`
12+
}]
1813
})
1914
}

spec/regression/collect/tests/field-traversal/aql/fieldsToN_filter_order.aql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ LET v_delivery1 = FIRST((
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
1010
"allItems": (
11-
FOR v_deliveryItem1
11+
FOR v_item1
1212
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13-
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14-
SORT (v_deliveryItem1.`itemNumber`) DESC
13+
FILTER (RIGHT(v_item1.`itemNumber`, LENGTH(@var3)) == @var4)
14+
SORT (v_item1.`itemNumber`) DESC
1515
RETURN {
16-
"itemNumber": v_deliveryItem1.`itemNumber`
16+
"itemNumber": v_item1.`itemNumber`
1717
}
1818
)
1919
})

spec/regression/collect/tests/field-traversal/aql/fieldsToN_filter_order_pagination.aql

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ LET v_delivery1 = FIRST((
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
1010
"allItems": (
11-
FOR v_deliveryItem1
11+
FOR v_item1
1212
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13-
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14-
SORT (v_deliveryItem1.`itemNumber`) DESC
13+
FILTER (RIGHT(v_item1.`itemNumber`, LENGTH(@var3)) == @var4)
14+
SORT (v_item1.`itemNumber`) DESC
1515
LIMIT @var5, @var6
1616
RETURN {
17-
"itemNumber": v_deliveryItem1.`itemNumber`
17+
"itemNumber": v_item1.`itemNumber`
1818
}
1919
)
2020
})

spec/regression/collect/tests/field-traversal/aql/fieldsToN_filter_pagination.aql

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,8 @@ LET v_delivery1 = FIRST((
77
))
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
10-
"allItems": (
11-
FOR v_deliveryItem1
12-
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
13-
FILTER (RIGHT(v_deliveryItem1.`itemNumber`, LENGTH(@var3)) == @var4)
14-
LIMIT @var5, @var6
15-
RETURN {
16-
"itemNumber": v_deliveryItem1.`itemNumber`
17-
}
18-
)
10+
"allItems": v_delivery1.`deliveryContents`[*].`items`[*][** FILTER (RIGHT(CURRENT.`itemNumber`, LENGTH(@var3)) == @var4) LIMIT @var5, @var6 RETURN {
11+
"itemNumber": CURRENT.`itemNumber`
12+
}]
1913
})
2014
}

0 commit comments

Comments
 (0)