mirror of https://github.com/grafana/grafana
MutableDataFrame: Remove unique field name constraint and values field index and unused/seldom used stuff (#27573)
* MutableDataFrame needs work * Updated users of values * Update test * Fixed ts issue * Updated testspull/29036/head
parent
5940250480
commit
040cfe074f
@ -1,52 +0,0 @@ |
||||
import { DataTransformerID } from './ids'; |
||||
import { toDataFrame } from '../../dataframe/processDataFrame'; |
||||
import { mockTransformationsRegistry } from '../../utils/tests/mockTransformationsRegistry'; |
||||
import { appendTransformer } from './append'; |
||||
import { transformDataFrame } from '../transformDataFrame'; |
||||
import { observableTester } from '../../utils/tests/observableTester'; |
||||
|
||||
const seriesAB = toDataFrame({ |
||||
columns: [{ text: 'A' }, { text: 'B' }], |
||||
rows: [ |
||||
[1, 100], // A,B
|
||||
[2, 200], // A,B
|
||||
], |
||||
}); |
||||
|
||||
const seriesBC = toDataFrame({ |
||||
columns: [{ text: 'A' }, { text: 'C' }], |
||||
rows: [ |
||||
[3, 3000], // A,C
|
||||
[4, 4000], // A,C
|
||||
], |
||||
}); |
||||
|
||||
describe('Append Transformer', () => { |
||||
beforeAll(() => { |
||||
mockTransformationsRegistry([appendTransformer]); |
||||
}); |
||||
|
||||
it('filters by include', done => { |
||||
const cfg = { |
||||
id: DataTransformerID.append, |
||||
options: {}, |
||||
}; |
||||
|
||||
observableTester().subscribeAndExpectOnNext({ |
||||
observable: transformDataFrame([cfg], [seriesAB, seriesBC]), |
||||
expect: data => { |
||||
const processed = data[0]; |
||||
expect(processed.fields.length).toBe(3); |
||||
|
||||
const fieldA = processed.fields[0]; |
||||
const fieldB = processed.fields[1]; |
||||
const fieldC = processed.fields[2]; |
||||
|
||||
expect(fieldA.values.toArray()).toEqual([1, 2, 3, 4]); |
||||
expect(fieldB.values.toArray()).toEqual([100, 200, null, null]); |
||||
expect(fieldC.values.toArray()).toEqual([null, null, 3000, 4000]); |
||||
}, |
||||
done, |
||||
}); |
||||
}); |
||||
}); |
@ -1,61 +0,0 @@ |
||||
import { map } from 'rxjs/operators'; |
||||
|
||||
import { DataTransformerID } from './ids'; |
||||
import { MutableDataFrame } from '../../dataframe/MutableDataFrame'; |
||||
import { DataTransformerInfo } from '../../types/transformations'; |
||||
|
||||
export interface AppendOptions {} |
||||
|
||||
export const appendTransformer: DataTransformerInfo<AppendOptions> = { |
||||
id: DataTransformerID.append, |
||||
name: 'Append', |
||||
description: 'Append values into a single DataFrame. This uses the name as the key', |
||||
defaultOptions: {}, |
||||
|
||||
/** |
||||
* Return a modified copy of the series. If the transform is not or should not |
||||
* be applied, just return the input series |
||||
*/ |
||||
operator: options => source => |
||||
source.pipe( |
||||
map(data => { |
||||
if (data.length < 2) { |
||||
return data; |
||||
} |
||||
|
||||
// Add the first row
|
||||
const processed = new MutableDataFrame(); |
||||
for (const f of data[0].fields) { |
||||
processed.addField({ |
||||
...f, |
||||
values: [...f.values.toArray()], |
||||
}); |
||||
} |
||||
|
||||
for (let i = 1; i < data.length; i++) { |
||||
const frame = data[i]; |
||||
const startLength = frame.length; |
||||
for (let j = 0; j < frame.fields.length; j++) { |
||||
const src = frame.fields[j]; |
||||
let vals = processed.values[src.name]; |
||||
if (!vals) { |
||||
vals = processed.addField( |
||||
{ |
||||
...src, |
||||
values: [], |
||||
}, |
||||
startLength |
||||
).values; |
||||
} |
||||
|
||||
// Add each row
|
||||
for (let k = 0; k < frame.length; k++) { |
||||
vals.add(src.values.get(k)); |
||||
} |
||||
} |
||||
processed.validate(); |
||||
} |
||||
return [processed]; |
||||
}) |
||||
), |
||||
}; |
Loading…
Reference in new issue