ToolJet/server/plugins/datasources/mysql/index.ts

51 lines
1.4 KiB
TypeScript
Raw Normal View History

2021-07-15 09:26:12 +00:00
import { Injectable } from '@nestjs/common';
import { QueryResult } from 'src/modules/data_sources/query_result.type';
import { QueryService } from 'src/modules/data_sources/query_service.interface';
2021-07-17 07:11:03 +00:00
import { Knex, knex } from 'knex';
2021-07-18 07:11:44 +00:00
import { ConnectionTestResult } from 'src/modules/data_sources/connection_test_result.type';
2021-07-15 09:26:12 +00:00
@Injectable()
export default class MysqlQueryService implements QueryService {
async run(sourceOptions: any, queryOptions: any, dataSourceId: string): Promise<QueryResult> {
2021-07-15 09:26:12 +00:00
let result = { };
let query = queryOptions.query;
const knexInstance = await this.getConnection(sourceOptions);
2021-07-15 09:26:12 +00:00
try {
result = await knexInstance.raw(query);
} catch (err) {
console.log(err);
}
return {
status: 'ok',
data: result[0]
}
}
2021-07-18 07:11:44 +00:00
async testConnection(sourceOptions: object): Promise<ConnectionTestResult> {
const knexInstance = await this.getConnection(sourceOptions);
const result = await knexInstance.raw('select @@version;');
return {
status: 'ok'
}
}
async getConnection(sourceOptions: any): Promise<any> {
const config: Knex.Config = {
client: 'mysql',
connection: {
host : sourceOptions.host,
user : sourceOptions.username,
password : sourceOptions.password,
database : sourceOptions.database,
port: sourceOptions.port,
}
};
return knex(config);
}
2021-07-15 09:26:12 +00:00
}