@@ -320,43 +320,51 @@ def test_load_time_series() -> None:
320320 # group_by=[] --> no group by any value
321321 q , bv = load_time_series ("ts" , "foo" , now - (24 * one_hour ), now , one_hour , group_by = [])
322322 assert (
323- q == "FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 "
323+ q == "LET m1 = ( FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 "
324324 "LET m0 = (FLOOR(d.at / @b3) * @b3) + @b4 "
325- "COLLECT group_slot=m0 INTO group "
326- "SORT group_slot "
327- "RETURN {at: group_slot, v: avg(group[*].d.v)}"
325+ "COLLECT group_slot=m0, complete_group=d.group "
326+ "AGGREGATE slot_avg = AVG(d.v) "
327+ "RETURN {at: group_slot, group: complete_group, v: slot_avg} )\n "
328+ "FOR d in m1 COLLECT group_slot=d.at AGGREGATE agg_val=avg(d.v) "
329+ "SORT group_slot RETURN {at: group_slot, v: agg_val}"
328330 )
329331 assert bv == {"b0" : "foo" , "b1" : 1699913600 , "b2" : 1700000000 , "b3" : 3600 , "b4" : 800 }
330332 # no group by defined --> group by all values
331333 q , bv = load_time_series ("ts" , "foo" , now - (24 * one_hour ), now , one_hour )
332334 assert (
333335 q == "FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 "
334336 "LET m0 = (FLOOR(d.at / @b3) * @b3) + @b4 "
335- "COLLECT group_slot=m0, complete_group=d.group INTO group "
336- "SORT group_slot "
337- "RETURN {at: group_slot, group: complete_group, v: avg(group[*].d.v) }"
337+ "COLLECT group_slot=m0, complete_group=d.group "
338+ "AGGREGATE slot_avg = AVG(d.v) "
339+ "RETURN {at: group_slot, group: complete_group, v: slot_avg }"
338340 )
339341 assert bv == {"b0" : "foo" , "b1" : 1699913600 , "b2" : 1700000000 , "b3" : 3600 , "b4" : 800 }
340342 # group by specific group variables
341343 q , bv = load_time_series ("ts" , "foo" , now - (24 * one_hour ), now , one_hour , group_by = ["a" , "b" ])
342344 assert (
343- q == "FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 "
345+ q == "LET m1 = ( FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 "
344346 "LET m0 = (FLOOR(d.at / @b3) * @b3) + @b4 "
345- "COLLECT group_slot=m0, group_a=d.group.a, group_b=d.group.b INTO group "
346- "SORT group_slot "
347- "RETURN {at: group_slot, group: { a: group_a, b: group_b }, v: avg(group[*].d.v)}"
347+ "COLLECT group_slot=m0, complete_group=d.group "
348+ "AGGREGATE slot_avg = AVG(d.v) "
349+ "RETURN {at: group_slot, group: complete_group, v: slot_avg} )\n "
350+ "FOR d in m1 "
351+ "COLLECT group_slot=d.at, group_a=d.group.a, group_b=d.group.b "
352+ "AGGREGATE agg_val=avg(d.v) "
353+ "SORT group_slot RETURN {at: group_slot,group: { a: group_a, b: group_b }, v: agg_val}"
348354 )
349355 assert bv == {"b0" : "foo" , "b1" : 1699913600 , "b2" : 1700000000 , "b3" : 3600 , "b4" : 800 }
350356 # group by specific group variables and filter by group variables
351357 q , bv = load_time_series (
352358 "ts" , "foo" , now - (24 * one_hour ), now , one_hour , group_by = ["a" , "b" ], group_filter = [P ("a" ).eq ("a" )]
353359 )
354360 assert (
355- q == "FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 "
356- "FILTER d.group.a==@b3 "
361+ q == "LET m1 = ( FOR d in `ts` FILTER d.ts==@b0 AND d.at>=@b1 AND d.at<@b2 FILTER d.group.a==@b3 "
357362 "LET m0 = (FLOOR(d.at / @b4) * @b4) + @b5 "
358- "COLLECT group_slot=m0, group_a=d.group.a, group_b=d.group.b INTO group "
359- "SORT group_slot "
360- "RETURN {at: group_slot, group: { a: group_a, b: group_b }, v: avg(group[*].d.v)}"
363+ "COLLECT group_slot=m0, complete_group=d.group "
364+ "AGGREGATE slot_avg = AVG(d.v) RETURN {at: group_slot, group: complete_group, v: slot_avg} )\n "
365+ "FOR d in m1 "
366+ "COLLECT group_slot=d.at, group_a=d.group.a, group_b=d.group.b "
367+ "AGGREGATE agg_val=avg(d.v) "
368+ "SORT group_slot RETURN {at: group_slot,group: { a: group_a, b: group_b }, v: agg_val}"
361369 )
362370 assert bv == {"b0" : "foo" , "b1" : 1699913600 , "b2" : 1700000000 , "b3" : "a" , "b4" : 3600 , "b5" : 800 }
0 commit comments