Skip to content

Commit db1f075

Browse files
committed
wip: skip/maxCount in traversal + refactoring of flattening
very experimental and not finished yet
1 parent 557f198 commit db1f075

File tree

47 files changed

+1243
-1414
lines changed

Some content is hidden

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

47 files changed

+1243
-1414
lines changed

spec/regression/collect/tests/collect-edge-count/test.graphql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# make sure that counting edges does not include dangling edges
22
# obviously, there should be no dangling edges because we should delete them properly, but this test is probably still
33
# a good idea
4+
# TODO this does not actually test if dangling edges are filtered because deleteDelivery deletes the edges
5+
# if we want to test that, we need an test-data.ts that uses AQL directly
46

57
mutation createEdges {
68
updateShipment(

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

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,130 +7,130 @@ 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
4242
RETURN v_distinct1
4343
),
4444
"itemCount": FIRST(
4545
FOR v_item6
46-
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
46+
IN v_delivery1.`deliveryContents`[*].`items`[**]
4747
COLLECT WITH COUNT INTO v_count1
4848
RETURN v_count1
4949
),
5050
"hasItems": FIRST(
5151
FOR v_item7
52-
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
52+
IN v_delivery1.`deliveryContents`[*].`items`[**]
5353
COLLECT AGGREGATE v_some1 = COUNT(v_item7)
5454
RETURN v_some1 > 0
5555
),
5656
"hasNoItems": FIRST(
5757
FOR v_item8
58-
IN v_delivery1.`deliveryContents`[*].`items`[*][**]
58+
IN v_delivery1.`deliveryContents`[*].`items`[**]
5959
COLLECT AGGREGATE v_none1 = COUNT(v_item8)
6060
RETURN v_none1 == 0
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-aggregation/result.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,20 +101,20 @@
101101
"minWeightInKg": null,
102102
"maxWeightInKg": null,
103103
"allItemNumbers": [],
104-
"itemCount": 0,
105-
"hasItems": false,
106-
"hasNoItems": true,
104+
"itemCount": 1,
105+
"hasItems": true,
106+
"hasNoItems": false,
107107
"hasDangerousGoods": false,
108-
"hasNonDangerousGoods": false,
109-
"hasOnlyDangerousGoods": true,
108+
"hasNonDangerousGoods": true,
109+
"hasOnlyDangerousGoods": false,
110110
"hasNoDangerousGoods": true,
111111
"dangerousItemCount": 0,
112-
"nonDangerousItemCount": 0,
113-
"hasMissingDangerousGoodsFlag": false,
112+
"nonDangerousItemCount": 1,
113+
"hasMissingDangerousGoodsFlag": true,
114114
"hasSomeDangerousGoodsFlag": false,
115-
"hasAllDangerousGoodsFlags": true,
115+
"hasAllDangerousGoodsFlags": false,
116116
"hasNoDangerousGoodsFlag": true,
117-
"missingDangerousGoodsFlagCount": 0,
117+
"missingDangerousGoodsFlagCount": 1,
118118
"setDangerousGoodsFlagCount": 0
119119
},
120120
{
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
LET v_delivery1 = FIRST((
2+
FOR v_delivery2
3+
IN @@deliveries
4+
FILTER (v_delivery2.`deliveryNumber` == @var1)
5+
LIMIT @var2
6+
RETURN v_delivery2
7+
))
8+
RETURN {
9+
"Delivery": (IS_NULL(v_delivery1) ? null : {
10+
"allItems": (
11+
FOR v_item1 IN (
12+
v_delivery1.`deliveryContents`[*].`items`[** RETURN {
13+
"itemNumber": CURRENT.`itemNumber`
14+
}]
15+
)
16+
SORT (v_item1.`itemNumber`) DESC
17+
LIMIT @var3, @var4
18+
RETURN v_item1
19+
)
20+
})
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
LET v_delivery1 = FIRST((
2+
FOR v_delivery2
3+
IN @@deliveries
4+
FILTER (v_delivery2.`deliveryNumber` == @var1)
5+
LIMIT @var2
6+
RETURN v_delivery2
7+
))
8+
RETURN {
9+
"Delivery": (IS_NULL(v_delivery1) ? null : {
10+
"allItems": v_delivery1.`deliveryContents`[*].`items`[** LIMIT @var3, @var4 RETURN {
11+
"itemNumber": CURRENT.`itemNumber`
12+
}]
13+
})
14+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"unordered": {
3+
"data": {
4+
"Delivery": {
5+
"allItems": [
6+
{
7+
"itemNumber": "DI1.1.2"
8+
}
9+
]
10+
}
11+
}
12+
},
13+
"ordered": {
14+
"data": {
15+
"Delivery": {
16+
"allItems": [
17+
{
18+
"itemNumber": "DI1.2.1"
19+
}
20+
]
21+
}
22+
}
23+
}
24+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
query unordered {
2+
Delivery(deliveryNumber: "D1") {
3+
allItems(skip: 1, first: 1) {
4+
itemNumber
5+
}
6+
}
7+
}
8+
9+
query ordered {
10+
Delivery(deliveryNumber: "D1") {
11+
allItems(orderBy: itemNumber_DESC, skip: 1, first: 1) {
12+
itemNumber
13+
}
14+
}
15+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
LET v_delivery1 = FIRST((
2+
FOR v_delivery2
3+
IN @@deliveries
4+
FILTER (v_delivery2.`deliveryNumber` == @var1)
5+
LIMIT @var2
6+
RETURN v_delivery2
7+
))
8+
RETURN {
9+
"Delivery": (IS_NULL(v_delivery1) ? null : {
10+
"allItems": (
11+
FOR v_item1 IN (
12+
v_delivery1.`deliveryContents`[*].`items`[** RETURN {
13+
"itemNumber": CURRENT.`itemNumber`
14+
}]
15+
)
16+
SORT (v_item1.`itemNumber`) DESC
17+
RETURN v_item1
18+
)
19+
})
20+
}

spec/regression/collect/tests/field-traversal/aql/fields.aql renamed to spec/regression/collect/tests/field-traversal/aql/unordered.aql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ LET v_delivery1 = FIRST((
77
))
88
RETURN {
99
"Delivery": (IS_NULL(v_delivery1) ? null : {
10-
"allItems": v_delivery1.`deliveryContents`[*].`items`[* RETURN {
10+
"allItems": v_delivery1.`deliveryContents`[*].`items`[** RETURN {
1111
"itemNumber": CURRENT.`itemNumber`
12-
}][**]
12+
}]
1313
})
1414
}

spec/regression/collect/tests/field-traversal/result.json

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"fields": {
2+
"unordered": {
33
"data": {
44
"Delivery": {
55
"allItems": [
@@ -18,5 +18,25 @@
1818
]
1919
}
2020
}
21+
},
22+
"ordered": {
23+
"data": {
24+
"Delivery": {
25+
"allItems": [
26+
{
27+
"itemNumber": "DI1.2.2"
28+
},
29+
{
30+
"itemNumber": "DI1.2.1"
31+
},
32+
{
33+
"itemNumber": "DI1.1.2"
34+
},
35+
{
36+
"itemNumber": "DI1.1.1"
37+
}
38+
]
39+
}
40+
}
2141
}
2242
}

0 commit comments

Comments
 (0)