Skip to content

Commit b528924

Browse files
committed
wip: test: add test that aggregations like NONE_NULL also work on two 1-to-1 relations in a row in a path
WIP: see if this failed on main. If yes, fix it before the refactor. If not, integrate this in the regular add-tests commit.
1 parent 1e88628 commit b528924

File tree

5 files changed

+115
-34
lines changed

5 files changed

+115
-34
lines changed

spec/regression/collect/model/model.graphqls

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,12 @@ type Shipment @rootEntity {
1818
itemCount: Int @collect(path: "allItems", aggregate: COUNT)
1919
deliveryCount: Int @collect(path: "deliveries", aggregate: COUNT)
2020
allDeliveriesHaveOrders: Boolean @collect(path: "deliveries.order", aggregate: NONE_NULL)
21+
allDeliveriesHaveOriginalOrders: Boolean
22+
@collect(path: "deliveries.order.originalOrder", aggregate: NONE_NULL)
2123
allDeliveriesArePayed: Boolean @collect(path: "deliveries.order.payedAt", aggregate: NONE_NULL)
2224
numberOfDeliveriesWithoutOrder: Int @collect(path: "deliveries.order", aggregate: COUNT_NULL)
25+
numberOfDeliveriesWithoutOriginalOrder: Int
26+
@collect(path: "deliveries.order.originalOrder", aggregate: COUNT_NULL)
2327
numberOfDeliveriesWithoutPayedOrder: Int
2428
@collect(path: "deliveries.order.payedAt", aggregate: COUNT_NULL)
2529
#numberOfUnpayedOrders: Int @collect(path: "allOrders.payedAt", aggregate: COUNT_NULL) # waiting for DISTINCT aggregations to be supported in collect paths
@@ -104,7 +108,7 @@ type Order @rootEntity {
104108
accessGroup: String
105109
location: Location @accessField
106110
payedAt: DateTime
107-
111+
originalOrder: Order @relation # so we can have two 1-to-1 relations in a row
108112
delivery: Delivery @relation(inverseOf: "order")
109113

110114
allOuterHandlingUnits: [HandlingUnit] @collect(path: "delivery.handlingUnits")

spec/regression/collect/tests/relation-and-field-aggregation/aql/createEdges.aql

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,52 @@ RETURN (IS_NULL(v_delivery1) ? null : {
170170

171171
// --------------------------------
172172

173+
WITH @@deliveries, @@shipments, @@orders
174+
RETURN (
175+
FOR v_currentEntity1
176+
IN (
177+
FOR v_order1
178+
IN @@orders
179+
FILTER (v_order1._key == @var1)
180+
LIMIT @var2
181+
RETURN v_order1
182+
)
183+
UPDATE v_currentEntity1
184+
WITH {}
185+
IN @@orders
186+
OPTIONS { mergeObjects: false }
187+
RETURN NEW._key
188+
)
189+
190+
// --------------------------------
191+
192+
WITH @@deliveries, @@shipments, @@orders
193+
RETURN DOCUMENT(@@orders, @var1)
194+
195+
// --------------------------------
196+
197+
WITH @@deliveries, @@shipments, @@orders
198+
RETURN (
199+
UPSERT {_from: CONCAT(@var1, FIRST(@v_updatedIds1))}
200+
INSERT {_from: CONCAT(@var2, FIRST(@v_updatedIds1)), _to: @var3}
201+
UPDATE {_from: CONCAT(@var4, FIRST(@v_updatedIds1)), _to: @var5}
202+
IN @@orders_originalOrder
203+
)
204+
205+
// --------------------------------
206+
207+
WITH @@deliveries, @@shipments, @@orders
208+
LET v_order1 = DOCUMENT(@@orders, @var1)
209+
RETURN (IS_NULL(v_order1) ? null : {
210+
"orderNumber": v_order1.`orderNumber`
211+
})
212+
213+
// --------------------------------
214+
173215
WITH @@deliveries, @@shipments, @@orders
174216
RETURN {
175217
"updateShipment": @v_updateShipment1,
176218
"d1": @v_updateDelivery1,
177-
"d2": @v_updateDelivery2
219+
"d2": @v_updateDelivery2,
220+
"o1": @v_updateOrder1
178221
}

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

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -50,79 +50,102 @@ RETURN {
5050
COLLECT AGGREGATE v_none_null1 = MAX(v_item4 == null)
5151
RETURN v_none_null1 < true
5252
),
53-
"allDeliveriesArePayed": FIRST(
53+
"allDeliveriesHaveOriginalOrders": FIRST(
5454
FOR v_item5
5555
IN (
5656
FOR v_node6, v_edge6, v_path6 IN @var13..@var14 OUTBOUND v_shipment1 @@shipments_deliveries
5757
LET v_nullableNode2 = FIRST(FOR v_node7, v_edge7, v_path7 IN @var15..@var16 OUTBOUND v_node6 @@deliveries_order FILTER v_node7 != null RETURN v_node7)
58-
RETURN v_nullableNode2.`payedAt`
58+
LET v_nullableNode3 = FIRST(FOR v_node8, v_edge8, v_path8 IN @var17..@var18 OUTBOUND v_nullableNode2 @@orders_originalOrder FILTER v_node8 != null RETURN v_node8)
59+
RETURN v_nullableNode3
5960
)
6061
COLLECT AGGREGATE v_none_null2 = MAX(v_item5 == null)
6162
RETURN v_none_null2 < true
6263
),
63-
"numberOfDeliveriesWithoutOrder": FIRST(
64+
"allDeliveriesArePayed": FIRST(
6465
FOR v_item6
6566
IN (
66-
FOR v_node8, v_edge8, v_path8 IN @var17..@var18 OUTBOUND v_shipment1 @@shipments_deliveries
67-
LET v_nullableNode3 = FIRST(FOR v_node9, v_edge9, v_path9 IN @var19..@var20 OUTBOUND v_node8 @@deliveries_order FILTER v_node9 != null RETURN v_node9)
68-
RETURN v_nullableNode3
67+
FOR v_node9, v_edge9, v_path9 IN @var19..@var20 OUTBOUND v_shipment1 @@shipments_deliveries
68+
LET v_nullableNode4 = FIRST(FOR v_node10, v_edge10, v_path10 IN @var21..@var22 OUTBOUND v_node9 @@deliveries_order FILTER v_node10 != null RETURN v_node10)
69+
RETURN v_nullableNode4.`payedAt`
6970
)
70-
FILTER v_item6 == null
71-
COLLECT AGGREGATE v_count_null1 = COUNT(v_item6)
72-
RETURN v_count_null1
71+
COLLECT AGGREGATE v_none_null3 = MAX(v_item6 == null)
72+
RETURN v_none_null3 < true
7373
),
74-
"numberOfDeliveriesWithoutPayedOrder": FIRST(
74+
"numberOfDeliveriesWithoutOrder": FIRST(
7575
FOR v_item7
7676
IN (
77-
FOR v_node10, v_edge10, v_path10 IN @var21..@var22 OUTBOUND v_shipment1 @@shipments_deliveries
78-
LET v_nullableNode4 = FIRST(FOR v_node11, v_edge11, v_path11 IN @var23..@var24 OUTBOUND v_node10 @@deliveries_order FILTER v_node11 != null RETURN v_node11)
79-
RETURN v_nullableNode4.`payedAt`
77+
FOR v_node11, v_edge11, v_path11 IN @var23..@var24 OUTBOUND v_shipment1 @@shipments_deliveries
78+
LET v_nullableNode5 = FIRST(FOR v_node12, v_edge12, v_path12 IN @var25..@var26 OUTBOUND v_node11 @@deliveries_order FILTER v_node12 != null RETURN v_node12)
79+
RETURN v_nullableNode5
8080
)
8181
FILTER v_item7 == null
82-
COLLECT AGGREGATE v_count_null2 = COUNT(v_item7)
82+
COLLECT AGGREGATE v_count_null1 = COUNT(v_item7)
83+
RETURN v_count_null1
84+
),
85+
"numberOfDeliveriesWithoutOriginalOrder": FIRST(
86+
FOR v_item8
87+
IN (
88+
FOR v_node13, v_edge13, v_path13 IN @var27..@var28 OUTBOUND v_shipment1 @@shipments_deliveries
89+
LET v_nullableNode6 = FIRST(FOR v_node14, v_edge14, v_path14 IN @var29..@var30 OUTBOUND v_node13 @@deliveries_order FILTER v_node14 != null RETURN v_node14)
90+
LET v_nullableNode7 = FIRST(FOR v_node15, v_edge15, v_path15 IN @var31..@var32 OUTBOUND v_nullableNode6 @@orders_originalOrder FILTER v_node15 != null RETURN v_node15)
91+
RETURN v_nullableNode7
92+
)
93+
FILTER v_item8 == null
94+
COLLECT AGGREGATE v_count_null2 = COUNT(v_item8)
8395
RETURN v_count_null2
8496
),
97+
"numberOfDeliveriesWithoutPayedOrder": FIRST(
98+
FOR v_item9
99+
IN (
100+
FOR v_node16, v_edge16, v_path16 IN @var33..@var34 OUTBOUND v_shipment1 @@shipments_deliveries
101+
LET v_nullableNode8 = FIRST(FOR v_node17, v_edge17, v_path17 IN @var35..@var36 OUTBOUND v_node16 @@deliveries_order FILTER v_node17 != null RETURN v_node17)
102+
RETURN v_nullableNode8.`payedAt`
103+
)
104+
FILTER v_item9 == null
105+
COLLECT AGGREGATE v_count_null3 = COUNT(v_item9)
106+
RETURN v_count_null3
107+
),
85108
"startedDispatchingAt": FIRST(
86-
FOR v_item8
109+
FOR v_item10
87110
IN (
88111
FOR v_offsetDateTime1
89112
IN (
90-
FOR v_node12, v_edge12, v_path12 IN @var25..@var26 OUTBOUND v_shipment1 @@shipments_deliveries
91-
FILTER v_node12._key != null
92-
RETURN v_node12.`dispatchedAt`
113+
FOR v_node18, v_edge18, v_path18 IN @var37..@var38 OUTBOUND v_shipment1 @@shipments_deliveries
114+
FILTER v_node18._key != null
115+
RETURN v_node18.`dispatchedAt`
93116
)
94117
RETURN v_offsetDateTime1.`timestamp`
95118
)
96-
FILTER v_item8 != null
97-
COLLECT AGGREGATE v_min1 = MIN(v_item8)
119+
FILTER v_item10 != null
120+
COLLECT AGGREGATE v_min1 = MIN(v_item10)
98121
RETURN v_min1
99122
),
100123
"fullyDispatchedAt": FIRST(
101-
FOR v_item9
124+
FOR v_item11
102125
IN (
103126
FOR v_offsetDateTime2
104127
IN (
105-
FOR v_node13, v_edge13, v_path13 IN @var27..@var28 OUTBOUND v_shipment1 @@shipments_deliveries
106-
FILTER v_node13._key != null
107-
RETURN v_node13.`dispatchedAt`
128+
FOR v_node19, v_edge19, v_path19 IN @var39..@var40 OUTBOUND v_shipment1 @@shipments_deliveries
129+
FILTER v_node19._key != null
130+
RETURN v_node19.`dispatchedAt`
108131
)
109132
RETURN v_offsetDateTime2.`timestamp`
110133
)
111-
FILTER v_item9 != null
112-
COLLECT AGGREGATE v_max2 = MAX(v_item9)
134+
FILTER v_item11 != null
135+
COLLECT AGGREGATE v_max2 = MAX(v_item11)
113136
RETURN v_max2
114137
),
115138
"allOrders": (
116139
FOR v_order1
117140
IN (
118-
FOR v_item10
141+
FOR v_item12
119142
IN (
120-
FOR v_node14, v_edge14, v_path14 IN @var29..@var30 OUTBOUND v_shipment1 @@shipments_deliveries
121-
LET v_nullableNode5 = FIRST(FOR v_node15, v_edge15, v_path15 IN @var31..@var32 OUTBOUND v_node14 @@deliveries_order FILTER v_node15 != null RETURN v_node15)
122-
RETURN v_nullableNode5
143+
FOR v_node20, v_edge20, v_path20 IN @var41..@var42 OUTBOUND v_shipment1 @@shipments_deliveries
144+
LET v_nullableNode9 = FIRST(FOR v_node21, v_edge21, v_path21 IN @var43..@var44 OUTBOUND v_node20 @@deliveries_order FILTER v_node21 != null RETURN v_node21)
145+
RETURN v_nullableNode9
123146
)
124-
FILTER v_item10 != null
125-
COLLECT v_distinct1 = v_item10
147+
FILTER v_item12 != null
148+
COLLECT v_distinct1 = v_item12
126149
RETURN v_distinct1
127150
)
128151
SORT (v_order1.`orderNumber`)

spec/regression/collect/tests/relation-and-field-aggregation/result.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
},
1010
"d2": {
1111
"deliveryNumber": "D2"
12+
},
13+
"o1": {
14+
"orderNumber": "O1"
1215
}
1316
}
1417
},
@@ -19,8 +22,10 @@
1922
"maxPriority": 3,
2023
"itemCount": 8,
2124
"allDeliveriesHaveOrders": false,
25+
"allDeliveriesHaveOriginalOrders": false,
2226
"allDeliveriesArePayed": false,
2327
"numberOfDeliveriesWithoutOrder": 2,
28+
"numberOfDeliveriesWithoutOriginalOrder": 3,
2429
"numberOfDeliveriesWithoutPayedOrder": 3,
2530
"startedDispatchingAt": "2020-01-30T08:00:00Z",
2631
"fullyDispatchedAt": "2020-01-30T09:00:00Z",

spec/regression/collect/tests/relation-and-field-aggregation/test.graphql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,21 @@ mutation createEdges {
1818
d2: updateDelivery(input: { id: "@{ids/Delivery/2}", order: "@{ids/Order/2}" }) {
1919
deliveryNumber
2020
}
21+
o1: updateOrder(input: { id: "@{ids/Order/1}", originalOrder: "@{ids/Order/2}" }) {
22+
orderNumber
23+
}
2124
}
2225
query fields {
2326
Shipment(shipmentNumber: "S1") {
2427
totalWeightInKg
2528
maxPriority
2629
itemCount
2730
allDeliveriesHaveOrders
31+
allDeliveriesHaveOriginalOrders
2832
allDeliveriesArePayed
2933
numberOfDeliveriesWithoutOrder
34+
# TODO NXT-7991 make sure this fails on main because we did not account for two to-1 relations in a row
35+
numberOfDeliveriesWithoutOriginalOrder
3036
numberOfDeliveriesWithoutPayedOrder
3137
startedDispatchingAt
3238
fullyDispatchedAt

0 commit comments

Comments
 (0)