DataFrame: Deprecate MutableDataFrame (#67569)

This commit is contained in:
Ryan McKinley
2023-05-01 19:41:40 -07:00
committed by GitHub
parent d31d1576fb
commit 86302bc1ec
35 changed files with 266 additions and 219 deletions
@@ -10,10 +10,16 @@ import { guessFieldTypeFromValue, guessFieldTypeForField, toDataFrameDTO } from
/** @deprecated */
export type MutableField<T = any> = Field<T>;
/** @deprecated */
type MutableVectorCreator = (buffer?: any[]) => any[];
export const MISSING_VALUE = undefined; // Treated as connected in new graph panel
/**
* MutableDataFrame is a complex wrapper around the DataFrame interface
*
* @deprecated use standard DataFrame, or create one with PartialDataFrame
*/
export class MutableDataFrame<T = any> extends FunctionalVector<T> implements DataFrame {
name?: string;
refId?: string;
@@ -2,8 +2,8 @@ import { dateTime } from '../datetime/moment_wrapper';
import { DataFrameDTO, FieldType, TableData, TimeSeries } from '../types/index';
import { ArrayDataFrame } from './ArrayDataFrame';
import { MutableDataFrame } from './MutableDataFrame';
import {
createDataFrame,
guessFieldTypeFromValue,
guessFieldTypes,
isDataFrame,
@@ -130,7 +130,7 @@ describe('toDataFrame', () => {
});
it('Guess Column Types from series', () => {
const series = new MutableDataFrame({
const series = createDataFrame({
fields: [
{ name: 'A (number)', values: [123, null] },
{ name: 'B (strings)', values: [null, 'Hello'] },
@@ -27,7 +27,6 @@ import {
import { arrayToDataFrame } from './ArrayDataFrame';
import { dataFrameFromJSON } from './DataFrameJSON';
import { MutableDataFrame } from './MutableDataFrame';
function convertTableToDataFrame(table: TableData): DataFrame {
const fields = table.columns.map((c) => {
@@ -315,7 +314,7 @@ export function toDataFrame(data: any): DataFrame {
}
// This will convert the array values into Vectors
return new MutableDataFrame(data as DataFrameDTO);
return createDataFrame(data as DataFrameDTO);
}
// Handle legacy docs/json type
@@ -567,3 +566,35 @@ export function preProcessPanelData(data: PanelData, lastResult?: PanelData): Pa
timings: { dataProcessingTime: STOPTIME - STARTTIME },
};
}
export interface PartialDataFrame extends Omit<DataFrame, 'fields' | 'length'> {
fields: Array<Partial<Field>>;
}
export function createDataFrame(input: PartialDataFrame): DataFrame {
let length = 0;
const fields = input.fields.map((p, idx) => {
const { state, ...field } = p;
if (!field.name) {
field.name = `Field ${idx + 1}`;
}
if (!field.config) {
field.config = {};
}
if (!field.values) {
field.values = new Array(length);
} else if (field.values.length > length) {
length = field.values.length;
}
if (!field.type) {
field.type = guessFieldTypeForField(field as Field) ?? FieldType.other;
}
return field as Field;
});
return {
...input,
fields,
length,
};
}