public void Aggregate(CosmosElement localMinMax) { // If the value became undefinded at some point then it should stay that way. if (this.globalMinMax == Undefined) { return; } if (localMinMax == Undefined) { // If we got an undefined in the pipeline then the whole thing becomes undefined. this.globalMinMax = Undefined; return; } // Check to see if we got the higher precision result // and unwrap the object to get the actual item of interest if (localMinMax is CosmosObject cosmosObject) { if (cosmosObject["count"] is CosmosNumber countToken) { // We know the object looks like: {"min": MIN(c.blah), "count": COUNT(c.blah)} long count; if (countToken.IsFloatingPoint) { count = (long)countToken.AsFloatingPoint().Value; } else { count = countToken.AsInteger().Value; } if (count == 0) { // Ignore the value since the continuation / partition had no results that matched the filter so min is undefined. return; } CosmosElement min = cosmosObject["min"]; CosmosElement max = cosmosObject["max"]; // Note that JToken won't equal null as long as a value is there // even if that value is a JSON null. if (min != null) { localMinMax = min; } else if (max != null) { localMinMax = max; } else { localMinMax = Undefined; } } } if (!ItemComparer.IsMinOrMax(this.globalMinMax) && (!CosmosElementIsPrimitive(localMinMax) || !CosmosElementIsPrimitive(this.globalMinMax))) { // This means we are comparing non primitives with is undefined this.globalMinMax = Undefined; return; } // Finally do the comparision if (this.isMinAggregation) { if (ItemComparer.Instance.Compare(localMinMax, this.globalMinMax) < 0) { this.globalMinMax = localMinMax; } } else { if (ItemComparer.Instance.Compare(localMinMax, this.globalMinMax) > 0) { this.globalMinMax = localMinMax; } } }
public void Aggregate(CosmosElement localMinMax) { // If the value became undefinded at some point then it should stay that way. if (this.globalMinMax == Undefined) { return; } if (localMinMax == Undefined) { // If we got an undefined in the pipeline then the whole thing becomes undefined. this.globalMinMax = Undefined; return; } // Check to see if we got the higher precision result // and unwrap the object to get the actual item of interest if (localMinMax is CosmosObject cosmosObject) { if (cosmosObject.TryGetValue("count", out CosmosNumber countToken)) { // We know the object looks like: {"min": MIN(c.blah), "count": COUNT(c.blah)} long count = Number64.ToLong(countToken.Value); if (count == 0) { // Ignore the value since the continuation / partition had no results that matched the filter so min is undefined. return; } if (!cosmosObject.TryGetValue("min", out CosmosElement min)) { min = null; } if (!cosmosObject.TryGetValue("max", out CosmosElement max)) { max = null; } if (min != null) { localMinMax = min; } else if (max != null) { localMinMax = max; } else { localMinMax = Undefined; } } } if (!ItemComparer.IsMinOrMax(this.globalMinMax) && (!IsPrimitve(localMinMax) || !IsPrimitve(this.globalMinMax))) { // This means we are comparing non primitives which is undefined this.globalMinMax = Undefined; return; } // Finally do the comparision if (this.isMinAggregation) { if (ItemComparer.Instance.Compare(localMinMax, this.globalMinMax) < 0) { this.globalMinMax = localMinMax; } } else { if (ItemComparer.Instance.Compare(localMinMax, this.globalMinMax) > 0) { this.globalMinMax = localMinMax; } } }