@@ -11,6 +11,7 @@ import (
1111 "github.com/stretchr/testify/assert"
1212 "github.com/stretchr/testify/require"
1313
14+ "github.com/ozontech/seq-db/consts"
1415 "github.com/ozontech/seq-db/node"
1516 "github.com/ozontech/seq-db/seq"
1617)
@@ -27,7 +28,7 @@ func TestSingleSourceCountAggregator(t *testing.T) {
2728 }
2829
2930 source := node .BuildORTreeAgg (node .MakeStaticNodes (sources ), false )
30- iter := NewSourcedNodeIterator (source , nil , nil , 0 , false )
31+ iter := NewSourcedNodeIterator (source , nil , nil , iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
3132 agg := NewSingleSourceCountAggregator (iter , provideExtractTimeFunc (nil , nil , 0 ))
3233 for _ , id := range searchDocs {
3334 if err := agg .Next (id ); err != nil {
@@ -55,7 +56,7 @@ func TestSingleSourceCountAggregatorWithInterval(t *testing.T) {
5556 }
5657
5758 source := node .BuildORTreeAgg (node .MakeStaticNodes (sources ), false )
58- iter := NewSourcedNodeIterator (source , nil , nil , 0 , false )
59+ iter := NewSourcedNodeIterator (source , nil , nil , iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
5960
6061 agg := NewSingleSourceCountAggregator (iter , func (l seq.LID ) seq.MID {
6162 return seq .MID (l ) % 3
@@ -90,7 +91,7 @@ func Generate(n int) ([]uint32, uint32) {
9091func BenchmarkAggDeep (b * testing.B ) {
9192 v , _ := Generate (b .N )
9293 src := node .NewSourcedNodeWrapper (node .NewStatic (v , false ), 0 )
93- iter := NewSourcedNodeIterator (src , nil , make ([]uint32 , 1 ), 0 , false )
94+ iter := NewSourcedNodeIterator (src , nil , make ([]uint32 , 1 ), iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
9495 n := NewSingleSourceCountAggregator (iter , provideExtractTimeFunc (nil , nil , 0 ))
9596 vals , _ := Generate (b .N )
9697 b .ResetTimer ()
@@ -115,7 +116,7 @@ func BenchmarkAggWide(b *testing.B) {
115116
116117 source := node .BuildORTreeAgg (node .MakeStaticNodes (wide ), false )
117118
118- iter := NewSourcedNodeIterator (source , nil , make ([]uint32 , len (wide )), 0 , false )
119+ iter := NewSourcedNodeIterator (source , nil , make ([]uint32 , len (wide )), iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
119120 n := NewSingleSourceCountAggregator (iter , provideExtractTimeFunc (nil , nil , 0 ))
120121 vals , _ := Generate (b .N )
121122 b .ResetTimer ()
@@ -177,8 +178,8 @@ func TestTwoSourceAggregator(t *testing.T) {
177178
178179 fieldTIDs := []uint32 {42 , 73 }
179180 groupByTIDs := []uint32 {1 , 2 }
180- groupIterator := NewSourcedNodeIterator (groupBy , dp , groupByTIDs , 0 , false )
181- fieldIterator := NewSourcedNodeIterator (field , dp , fieldTIDs , 0 , false )
181+ groupIterator := NewSourcedNodeIterator (groupBy , dp , groupByTIDs , iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
182+ fieldIterator := NewSourcedNodeIterator (field , dp , fieldTIDs , iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
182183 aggregator := NewGroupAndFieldAggregator (
183184 fieldIterator , groupIterator , provideExtractTimeFunc (nil , nil , 0 ), true ,
184185 )
@@ -229,7 +230,7 @@ func TestSingleTreeCountAggregator(t *testing.T) {
229230 },
230231 }
231232
232- iter := NewSourcedNodeIterator (field , dp , []uint32 {0 }, 0 , false )
233+ iter := NewSourcedNodeIterator (field , dp , []uint32 {0 }, iteratorLimit { limit : 0 , err : consts . ErrTooManyGroupTokens } , false )
233234 aggregator := NewSingleSourceCountAggregator (iter , provideExtractTimeFunc (nil , nil , 0 ))
234235
235236 r .NoError (aggregator .Next (1 ))
@@ -251,3 +252,37 @@ func TestSingleTreeCountAggregator(t *testing.T) {
251252 r .Equal (hist .Total , result .SamplesByBin [token ].Total )
252253 }
253254}
255+
256+ func TestAggregatorLimitExceeded (t * testing.T ) {
257+ // For now input for this test is incorrect since we support
258+ // aggregations only for `keyword` index type.
259+ // Will be fixed in #310.
260+ searchDocs := []uint32 {2 , 3 , 5 , 8 , 10 , 12 , 15 }
261+ sources := [][]uint32 {
262+ {2 , 3 , 5 , 8 , 10 , 12 },
263+ {1 , 4 , 6 , 9 , 11 , 13 },
264+ {1 , 2 , 4 , 5 , 8 , 11 , 12 },
265+ }
266+
267+ const limit = 1
268+
269+ for _ , expectedErr := range []error {consts .ErrTooManyGroupTokens , consts .ErrTooManyFieldTokens } {
270+ source := node .BuildORTreeAgg (node .MakeStaticNodes (sources ), false )
271+ iter := NewSourcedNodeIterator (source , nil , nil , iteratorLimit {limit : limit , err : expectedErr }, false )
272+ agg := NewSingleSourceCountAggregator (iter , provideExtractTimeFunc (nil , nil , 0 ))
273+
274+ var limitErr error
275+ var limitIteration int
276+
277+ for i , id := range searchDocs {
278+ if err := agg .Next (id ); err != nil {
279+ limitErr = err
280+ limitIteration = i
281+ break
282+ }
283+ }
284+
285+ assert .Equal (t , limit , limitIteration )
286+ assert .ErrorIs (t , limitErr , expectedErr )
287+ }
288+ }
0 commit comments