BugZero found this defect 75 days ago.
Data sources
All data on this page is proprietary to BugZero® or gathered from public sources
3/12/2024
MongoDB Server
No affected releases provided.
No fixed releases provided.
cellFoldValues_F assumes that the input block will have only boolean values or Nothing. However, it is possible to call cellFoldValues_F with values of other type. We should add a CoerceToBool before we call cellFoldValues_F to make sure that we get the correct results. After discussion with alberto.massari@mongodb.com adding CoerceToBool by default will result in producing wrong results. cellFoldValues_F should produce the same results as traverseF which returns true for an array by ORing the results of each array element. The result of each array element is computed applying a lambda function on it. When the function returns a boolean true value the results for the array element is true. In all other cases the result of the array element is false.
db.createCollection( "coll", { timeseries: { timeField: "time" } }) db.coll.insertOne({ _id: 0, time: new Date("2023-09-02T22:56:01.615Z"), measurement: -689.713747639426 }) db.coll.aggregate([{ $match: { $expr: { $trunc: "$measurement" } } }, { $count: "num" }]) SBE plan [4] project [s12 = makeBsonObj(MakeObjSpec([num], [num], Closed, RetNothing), null, true, s11)] [3] project [s11 = if isNumber(s10) then s10 else doubleDoubleSumFinalize(s10) ] [3] group [s7] [s10 = sum(1)] spillSlots[s9] mergingExprs[convertSimpleSumToDoubleDoubleSum(s9)] [3] block_to_row blocks[s3] row[s8] s5 [3] project [s7 = null] [2] filter {!(valueBlockNone(s5, true))} [2] project [s5 = valueBlockFillEmpty(valueBlockCoerceToBool( let [ l101.0 = cellFoldValues_F(valueBlockFillEmpty(valueBlockTypeMatch(cellBlockGetFlatValuesBlock(s3), 1088), true), s3) ] in valueBlockCombine(valueBlockNewFill(null, valueBlockSize(l101.0)), let [ l102.0 = cellFoldValues_F(valueBlockTypeMatch(cellBlockGetFlatValuesBlock(s3), 851970), s3) ] in valueBlockCombine(cellFoldValues_F(valueBlockTrunc(cellBlockGetFlatValuesBlock(s3), 0), s3), let [ l103.0 = valueBlockLogicalNot(l102.0) ] in valueBlockNewFill( if valueBlockNone(valueBlockLogicalAnd(valueBlockLogicalNot(l101.0), l103.0), true) then Nothing else fail(5155300, "$trunc only supports numeric types") , valueBlockSize(l103.0)) , l102.0) , l101.0) ), false)] [2] ts_bucket_to_cellblock s1 pathReqs[s3 = ProjectPath(Get(measurement)/Id), s4 = FilterPath(Get(measurement)/Traverse/Id)] [1] scan s1 s2 none none none none none none lowPriority [] @"29637d73-69c8-48a0-a962-47f3c6deff62" true false