Files
Gábor Farkas 29e8a355cb sql: extract frontend code into separate package (#81109)
* sql: extract frontend code into separate package

* updated package version
2024-01-26 11:38:29 +01:00

85 lines
2.2 KiB
TypeScript

import { isEmpty } from 'lodash';
import { createSelectClause, haveColumns, RAQBFieldTypes, SQLQuery } from '@grafana/sql';
export function getFieldConfig(type: string): { raqbFieldType: RAQBFieldTypes; icon: string } {
switch (type) {
case 'boolean': {
return { raqbFieldType: 'boolean', icon: 'toggle-off' };
}
case 'bit':
case 'bit varying':
case 'character':
case 'character varying':
case 'text': {
return { raqbFieldType: 'text', icon: 'text' };
}
case 'smallint':
case 'integer':
case 'bigint':
case 'decimal':
case 'numeric':
case 'real':
case 'double precision':
case 'serial':
case 'bigserial':
case 'smallserial': {
return { raqbFieldType: 'number', icon: 'calculator-alt' };
}
case 'date': {
return { raqbFieldType: 'date', icon: 'clock-nine' };
}
case 'time':
case 'time with time zone':
case 'time without time zone':
case 'interval': {
return { raqbFieldType: 'time', icon: 'clock-nine' };
}
case 'timestamp':
case 'timestamp with time zone':
case 'timestamp without time zone': {
return { raqbFieldType: 'datetime', icon: 'clock-nine' };
}
default:
return { raqbFieldType: 'text', icon: 'text' };
}
}
export function toRawSql({ sql, table }: SQLQuery): string {
let rawQuery = '';
// Return early with empty string if there is no sql column
if (!sql || !haveColumns(sql.columns)) {
return rawQuery;
}
rawQuery += createSelectClause(sql.columns);
if (table) {
rawQuery += `FROM ${table} `;
}
if (sql.whereString) {
rawQuery += `WHERE ${sql.whereString} `;
}
if (sql.groupBy?.[0]?.property.name) {
const groupBy = sql.groupBy.map((g) => g.property.name).filter((g) => !isEmpty(g));
rawQuery += `GROUP BY ${groupBy.join(', ')} `;
}
if (sql.orderBy?.property.name) {
rawQuery += `ORDER BY ${sql.orderBy.property.name} `;
}
if (sql.orderBy?.property.name && sql.orderByDirection) {
rawQuery += `${sql.orderByDirection} `;
}
// Altough LIMIT 0 doesn't make sense, it is still possible to have LIMIT 0
if (sql.limit !== undefined && sql.limit >= 0) {
rawQuery += `LIMIT ${sql.limit} `;
}
return rawQuery;
}