コード例 #1
0
        private IAggregate GetMultiBucketAggregate(ref JsonReader reader, IJsonFormatterResolver formatterResolver,
                                                   ref ArraySegment <byte> propertyName
                                                   )
        {
            var bucket = new BucketAggregate();

            if (propertyName.EqualsBytes(DocCountErrorUpperBound))
            {
                bucket.DocCountErrorUpperBound = reader.ReadNullableLong();
                reader.ReadIsValueSeparatorWithVerify();
                propertyName = reader.ReadPropertyNameSegmentRaw();
            }

            if (propertyName.EqualsBytes(SumOtherDocCount))
            {
                bucket.SumOtherDocCount = reader.ReadNullableLong();
                reader.ReadIsValueSeparatorWithVerify();
                reader.ReadNext();                 // "buckets"
                reader.ReadNext();                 // :
            }

            var items = new List <IBucket>();
            var count = 0;
            var token = reader.GetCurrentJsonToken();

            if (token == JsonToken.BeginObject)
            {
                var filterAggregates = new Dictionary <string, IAggregate>();
                while (reader.ReadIsInObject(ref count))
                {
                    var name     = reader.ReadPropertyName();
                    var innerAgg = ReadAggregate(ref reader, formatterResolver);
                    filterAggregates[name] = innerAgg;
                }
                return(new FiltersAggregate(filterAggregates));
            }

            while (reader.ReadIsInArray(ref count))
            {
                var item = ReadBucket(ref reader, formatterResolver);
                items.Add(item);
            }

            bucket.Items = items;
            reader.ReadNext();             // close outer }
            return(bucket);
        }
コード例 #2
0
        private IAggregate GetMultiBucketAggregate(ref JsonReader reader, IJsonFormatterResolver formatterResolver,
                                                   ref ArraySegment <byte> propertyName, IReadOnlyDictionary <string, object> meta)
        {
            var bucket = new BucketAggregate {
                Meta = meta
            };

            if (propertyName.EqualsBytes(DocCountErrorUpperBound))
            {
                bucket.DocCountErrorUpperBound = reader.ReadNullableLong();
                reader.ReadIsValueSeparatorWithVerify();
                propertyName = reader.ReadPropertyNameSegmentRaw();
            }

            if (propertyName.EqualsBytes(SumOtherDocCount))
            {
                bucket.SumOtherDocCount = reader.ReadNullableLong();
                reader.ReadIsValueSeparatorWithVerify();
                reader.ReadNext();                 // "buckets"
                reader.ReadNext();                 // :
            }

            var items = new List <IBucket>();

            bucket.Items = items;
            var count = 0;
            var token = reader.GetCurrentJsonToken();

            if (token == JsonToken.BeginObject)
            {
                var filterAggregates = new Dictionary <string, IAggregate>();
                while (reader.ReadIsInObject(ref count))
                {
                    var name     = reader.ReadPropertyName();
                    var innerAgg = ReadAggregate(ref reader, formatterResolver);
                    filterAggregates[name] = innerAgg;
                }
                return(new FiltersAggregate(filterAggregates)
                {
                    Meta = meta
                });
            }

            while (reader.ReadIsInArray(ref count))
            {
                var item = ReadBucket(ref reader, formatterResolver);
                items.Add(item);
            }

            token = reader.GetCurrentJsonToken();
            if (token == JsonToken.ValueSeparator)
            {
                reader.ReadNext();
                propertyName = reader.ReadPropertyNameSegmentRaw();
                if (propertyName.EqualsBytes(JsonWriter.GetEncodedPropertyNameWithoutQuotation("interval")))
                {
                    bucket.Interval = formatterResolver.GetFormatter <DateMathTime>().Deserialize(ref reader, formatterResolver);
                }
                else
                {
                    // skip for now
                    reader.ReadNextBlock();
                }
            }

            return(bucket);
        }