This commit is contained in:
Aliaksandr Valialkin 2024-05-30 12:37:52 +02:00
parent fa20f150a6
commit c19bf7abb5
No known key found for this signature in database
GPG key ID: 52C003EE2BCDB9EB
3 changed files with 11 additions and 19 deletions

View file

@ -1820,4 +1820,6 @@ func TestQueryGetNeededColumns(t *testing.T) {
f(`* | unpack_logfmt from x fields (a,b) | count() r1`, ``, ``)
f(`* | unpack_logfmt if (q:w p:a) from x | count() r1`, `p,q`, ``)
f(`* | unpack_logfmt if (q:w p:a) from x fields(a,b) | count() r1`, `p,q`, ``)
f(`* | unroll (a, b) | count() r1`, `a,b`, ``)
f(`* | unroll if (q:w p:a) (a, b) | count() r1`, `a,b,p,q`, ``)
}

View file

@ -52,25 +52,15 @@ func (pu *pipeUnroll) initFilterInValues(cache map[string][]string, getFieldValu
func (pu *pipeUnroll) updateNeededFields(neededFields, unneededFields fieldsSet) {
if neededFields.contains("*") {
unneededFieldsCount := 0
for _, f := range pu.fields {
if unneededFields.contains(f) {
unneededFieldsCount++
}
}
if unneededFieldsCount < len(pu.fields) && pu.iff != nil {
if pu.iff != nil {
unneededFields.removeFields(pu.iff.neededFields)
}
unneededFields.removeFields(pu.fields)
} else {
needIfFields := false
for _, f := range pu.fields {
if neededFields.contains(f) {
needIfFields = true
}
}
if needIfFields && pu.iff != nil {
if pu.iff != nil {
neededFields.addFields(pu.iff.neededFields)
}
neededFields.addFields(pu.fields)
}
}

View file

@ -225,13 +225,13 @@ func TestPipeUnrollUpdateNeededFields(t *testing.T) {
f("unroll if (f1:b) (x)", "*", "f1,f2", "*", "f2")
// all the needed fields, unneeded fields intersect with src
f("unroll (x)", "*", "f2,x", "*", "f2,x")
f("unroll if (a:b) (x)", "*", "f2,x", "*", "f2,x")
f("unroll if (f2:b) (x)", "*", "f2,x", "*", "f2,x")
f("unroll (x)", "*", "f2,x", "*", "f2")
f("unroll if (a:b) (x)", "*", "f2,x", "*", "f2")
f("unroll if (f2:b) (x)", "*", "f2,x", "*", "")
// needed fields do not intersect with src
f("unroll (x)", "f1,f2", "", "f1,f2", "")
f("unroll if (a:b) (x)", "f1,f2", "", "f1,f2", "")
f("unroll (x)", "f1,f2", "", "f1,f2,x", "")
f("unroll if (a:b) (x)", "f1,f2", "", "a,f1,f2,x", "")
// needed fields intersect with src
f("unroll (x)", "f2,x", "", "f2,x", "")