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() { 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...`); 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); } }