grafana/public/app/plugins/datasource/mysql/mySqlMetaQuery.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

61 lines
2.2 KiB
TypeScript

import MySQLQueryModel from './MySqlQueryModel';
export function buildTableQuery(dataset?: string) {
const database = dataset !== undefined ? `'${dataset}'` : 'database()';
return `SELECT table_name FROM information_schema.tables WHERE table_schema = ${database} ORDER BY table_name`;
}
export function showDatabases() {
return `SELECT DISTINCT TABLE_SCHEMA from information_schema.TABLES where TABLE_TYPE != 'SYSTEM VIEW' ORDER BY TABLE_SCHEMA`;
}
export function buildColumnQuery(queryModel: MySQLQueryModel, table: string, type?: string, timeColumn?: string) {
let query = 'SELECT column_name, data_type FROM information_schema.columns WHERE ';
query += buildTableConstraint(queryModel, table);
switch (type) {
case 'time': {
query += " AND data_type IN ('timestamp','datetime','bigint','int','double','float')";
break;
}
case 'metric': {
query += " AND data_type IN ('text','tinytext','mediumtext','longtext','varchar','char')";
break;
}
case 'value': {
query += " AND data_type IN ('bigint','int','smallint','mediumint','tinyint','double','decimal','float')";
query += ' AND column_name <> ' + quoteIdentAsLiteral(queryModel, timeColumn!);
break;
}
case 'group': {
query += " AND data_type IN ('text','tinytext','mediumtext','longtext','varchar','char')";
break;
}
}
query += ' ORDER BY column_name';
return query;
}
export function buildTableConstraint(queryModel: MySQLQueryModel, table: string) {
let query = '';
// check for schema qualified table
if (table.includes('.')) {
const parts = table.split('.');
query = 'table_schema = ' + quoteIdentAsLiteral(queryModel, parts[0]);
query += ' AND table_name = ' + quoteIdentAsLiteral(queryModel, parts[1]);
return query;
} else {
const database = queryModel.getDatabase() !== undefined ? `'${queryModel.getDatabase()}'` : 'database()';
query = `table_schema = ${database} AND table_name = ` + quoteIdentAsLiteral(queryModel, table);
return query;
}
}
export function quoteIdentAsLiteral(queryModel: MySQLQueryModel, value: string) {
return queryModel.quoteLiteral(queryModel.unquoteIdentifier(value));
}