grafana/public/app/plugins/datasource/mysql/fields.ts
Scott Lepper 53933972b6
mysql query editor - angular to react (#50343)
mysql conversion to react

Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
2022-07-15 16:49:24 -04:00

92 lines
1.9 KiB
TypeScript

import { RAQBFieldTypes, SQLSelectableValue } from 'app/features/plugins/sql/types';
export function mapFieldsToTypes(columns: SQLSelectableValue[]) {
const fields: SQLSelectableValue[] = [];
for (const col of columns) {
let type: RAQBFieldTypes = 'text';
switch (col.type?.toUpperCase()) {
case 'BOOLEAN':
case 'BOOL': {
type = 'boolean';
break;
}
case 'BYTES':
case 'VARCHAR': {
type = 'text';
break;
}
case 'FLOAT':
case 'FLOAT64':
case 'INT':
case 'INTEGER':
case 'INT64':
case 'NUMERIC':
case 'BIGNUMERIC': {
type = 'number';
break;
}
case 'DATE': {
type = 'date';
break;
}
case 'DATETIME': {
type = 'datetime';
break;
}
case 'TIME': {
type = 'time';
break;
}
case 'TIMESTAMP': {
type = 'datetime';
break;
}
case 'GEOGRAPHY': {
type = 'text';
break;
}
default:
break;
}
fields.push({ ...col, raqbFieldType: type, icon: mapColumnTypeToIcon(col.type!.toUpperCase()) });
}
return fields;
}
export function mapColumnTypeToIcon(type: string) {
switch (type) {
case 'TIME':
case 'DATETIME':
case 'TIMESTAMP':
return 'clock-nine';
case 'BOOLEAN':
return 'toggle-off';
case 'INTEGER':
case 'FLOAT':
case 'FLOAT64':
case 'INT':
case 'SMALLINT':
case 'BIGINT':
case 'TINYINT':
case 'BYTEINT':
case 'INT64':
case 'NUMERIC':
case 'DECIMAL':
return 'calculator-alt';
case 'CHAR':
case 'VARCHAR':
case 'STRING':
case 'BYTES':
case 'TEXT':
case 'TINYTEXT':
case 'MEDIUMTEXT':
case 'LONGTEXT':
return 'text';
case 'GEOGRAPHY':
return 'map';
default:
return undefined;
}
}