Limit: Invalidate field reducer calcs on applying limit transformation (#106723)

* fix: clear state calcs when limit transformation is applied

* chore: fix limit tests expected values
pull/107666/head
Alex Spencer 2 weeks ago committed by GitHub
parent 68ee251c5c
commit efe46c8aad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      packages/grafana-data/src/transformations/transformers/limit.test.ts
  2. 6
      packages/grafana-data/src/transformations/transformers/limit.ts

@ -35,18 +35,21 @@ describe('Limit transformer', () => {
{
name: 'time',
type: FieldType.time,
state: { calcs: undefined },
values: [3000, 4000, 5000],
config: {},
},
{
name: 'message',
type: FieldType.string,
state: { calcs: undefined },
values: ['one', 'two', 'two'],
config: {},
},
{
name: 'values',
type: FieldType.number,
state: { calcs: undefined },
values: [1, 2, 2],
config: {},
},
@ -79,18 +82,21 @@ describe('Limit transformer', () => {
{
name: 'time',
type: FieldType.time,
state: { calcs: undefined },
values: [6000, 7000, 8000],
config: {},
},
{
name: 'message',
type: FieldType.string,
state: { calcs: undefined },
values: ['three', 'three', 'three'],
config: {},
},
{
name: 'values',
type: FieldType.number,
state: { calcs: undefined },
values: [3, 3, 3],
config: {},
},

@ -37,6 +37,12 @@ export const limitTransformer: DataTransformerInfo<LimitTransformerOptions> = {
fields: frame.fields.map((f) => {
return {
...f,
// Clear cached field calculations since applying a limit changes the dataset
// and previously computed stats (min, max, mean, etc.) are no longer valid
state: {
...f.state,
calcs: undefined,
},
values:
limit >= 0 ? f.values.slice(0, limit) : f.values.slice(f.values.length + limit, f.values.length),
};

Loading…
Cancel
Save