diff --git a/pkg/parquetquery/iters.go b/pkg/parquetquery/iters.go index be990628205..f628fb68c14 100644 --- a/pkg/parquetquery/iters.go +++ b/pkg/parquetquery/iters.go @@ -210,6 +210,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[5] = 0 t[6] = 0 t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 1: switch definitionLevel { @@ -270,6 +272,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[5] = 0 t[6] = 0 t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 2: switch definitionLevel { @@ -324,6 +328,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[5] = 0 t[6] = 0 t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 3: switch definitionLevel { @@ -373,6 +379,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[5] = 0 t[6] = 0 t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 4: switch definitionLevel { @@ -418,6 +426,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[5] = 0 t[6] = 0 t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 5: switch definitionLevel { @@ -460,6 +470,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { case 7: t[6] = 0 t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 6: switch definitionLevel { @@ -500,6 +512,8 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[7] = -1 case 7: t[7] = 0 + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } case 7: switch definitionLevel { @@ -538,12 +552,11 @@ func (t *RowNumber) Next(repetitionLevel, definitionLevel int) { t[7] = -1 case 6: t[7] = -1 + case 7: + default: + panicWhenInvalidDefinitionLevel(definitionLevel) } } - if definitionLevel > MaxDefinitionLevel || definitionLevel < 0 { - level.Error(log.Logger).Log("msg", "definition level out of bound: should be [0:7] but got %d", definitionLevel) - panic("invalid definition level") - } } // nextSlow is the original implementation of next. it is kept to test against @@ -2190,6 +2203,11 @@ func (a *KeyValueGroupPredicate) KeepGroup(group *IteratorResult) bool { return true } +func panicWhenInvalidDefinitionLevel(definitionLevel int) { + level.Error(log.Logger).Log("msg", "definition level out of bound: should be [0:7] but got %d", definitionLevel) + panic("invalid definition level") +} + /*func printGroup(g *iteratorResult) { fmt.Println("---group---") for _, e := range g.entries { diff --git a/pkg/parquetquery/iters_test.go b/pkg/parquetquery/iters_test.go index d36e1f0c194..4a6f3760f71 100644 --- a/pkg/parquetquery/iters_test.go +++ b/pkg/parquetquery/iters_test.go @@ -33,8 +33,8 @@ func TestNext(t *testing.T) { rn2 := RowNumber{0, 0, 0, 0, 0, 0, 0, 0} for i := 0; i < 1000; i++ { - r := rand.Intn(MaxDefinitionLevel + 1) - d := rand.Intn(MaxDefinitionLevel + 1) + r := 7 + d := 7 rn1.Next(r, d) rn2.nextSlow(r, d)