import * as plugins from './smartclickhouse.plugins'; import { TimeDataTable } from './smartclickhouse.classes.timedatatable'; export interface IClickhouseConstructorOptions { host: string; database: string; password?: string; } export class SmartClickHouseDb { public options: IClickhouseConstructorOptions; public clickhouseClient: plugins.clickhouse.ClickHouseClient; constructor(optionsArg: IClickhouseConstructorOptions) { this.options = optionsArg; } /** * starts the connection to the Clickhouse db */ public async start(dropOld = false) { console.log(`Connecting to default database first.`); const defaultClient = new plugins.clickhouse.ClickHouseClient({ ...this.options, database: 'default', }); console.log(`Create database ${this.options.database}, if it does not exist...`); if (dropOld) { await defaultClient.queryPromise(`DROP DATABASE IF EXISTS ${this.options.database}`); } await defaultClient.queryPromise(`CREATE DATABASE IF NOT EXISTS ${this.options.database}`); console.log(`Ensured database. Now connecting to wanted database: ${this.options.database}`); this.clickhouseClient = new plugins.clickhouse.ClickHouseClient({ ...this.options, }); console.log(`trying to ping database...`); const result = await this.clickhouseClient.ping(); console.log(`Ping successfull?: ${result}`); } /** * gets a table */ public async getTable(tableName: string) { const newTable = TimeDataTable.getTable(this, tableName); return newTable; } }