fix(TimeDataTable options): switch to better options
This commit is contained in:
		@@ -26,14 +26,22 @@ export interface IColumnInfo {
 | 
			
		||||
  datetime_precision: '3';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ITimeDataTableOptions {
 | 
			
		||||
  tableName: string;
 | 
			
		||||
  retainDataForDays: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export class TimeDataTable {
 | 
			
		||||
  public static async getTable(smartClickHouseDbRefArg: SmartClickHouseDb, tableNameArg: string) {
 | 
			
		||||
    const newTable = new TimeDataTable(smartClickHouseDbRefArg, tableNameArg);
 | 
			
		||||
    const newTable = new TimeDataTable(smartClickHouseDbRefArg, {
 | 
			
		||||
      tableName: tableNameArg,
 | 
			
		||||
      retainDataForDays: 30
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // create table in clickhouse
 | 
			
		||||
    await smartClickHouseDbRefArg.clickhouseClient
 | 
			
		||||
      .queryPromise(`
 | 
			
		||||
        CREATE TABLE IF NOT EXISTS ${newTable.tableName} (
 | 
			
		||||
        CREATE TABLE IF NOT EXISTS ${newTable.options.tableName} (
 | 
			
		||||
          timestamp DateTime64(3, 'Europe/Berlin'),
 | 
			
		||||
          message String
 | 
			
		||||
        ) ENGINE=MergeTree() ORDER BY timestamp`);
 | 
			
		||||
@@ -41,13 +49,13 @@ export class TimeDataTable {
 | 
			
		||||
    // lets adjust the TTL
 | 
			
		||||
    await smartClickHouseDbRefArg.clickhouseClient
 | 
			
		||||
      .queryPromise(`
 | 
			
		||||
        ALTER TABLE ${newTable.tableName} MODIFY TTL toDateTime(timestamp) + INTERVAL 1 MONTH
 | 
			
		||||
        ALTER TABLE ${newTable.options.tableName} MODIFY TTL toDateTime(timestamp) + INTERVAL ${newTable.options.retainDataForDays} DAY
 | 
			
		||||
      `);
 | 
			
		||||
 | 
			
		||||
    await newTable.updateColumns();
 | 
			
		||||
    console.log(`=======================`)
 | 
			
		||||
    console.log(
 | 
			
		||||
      `table with name "${newTable.tableName}" in databse ${newTable.smartClickHouseDbRef.options.database} has the following columns:`
 | 
			
		||||
      `table with name "${newTable.options.tableName}" in databse ${newTable.smartClickHouseDbRef.options.database} has the following columns:`
 | 
			
		||||
    );
 | 
			
		||||
    for (const column of newTable.columns) {
 | 
			
		||||
      console.log(`>> ${column.name}: ${column.type}`);
 | 
			
		||||
@@ -59,11 +67,11 @@ export class TimeDataTable {
 | 
			
		||||
 | 
			
		||||
  // INSTANCE
 | 
			
		||||
  public smartClickHouseDbRef: SmartClickHouseDb;
 | 
			
		||||
  public tableName: string;
 | 
			
		||||
  public options: ITimeDataTableOptions;
 | 
			
		||||
 | 
			
		||||
  constructor(smartClickHouseDbRefArg: SmartClickHouseDb, tableNameArg: string) {
 | 
			
		||||
  constructor(smartClickHouseDbRefArg: SmartClickHouseDb, optionsArg: ITimeDataTableOptions) {
 | 
			
		||||
    this.smartClickHouseDbRef = smartClickHouseDbRefArg;
 | 
			
		||||
    this.tableName = tableNameArg;
 | 
			
		||||
    this.options = optionsArg;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public columns: IColumnInfo[] = [];
 | 
			
		||||
@@ -75,7 +83,7 @@ export class TimeDataTable {
 | 
			
		||||
    this.columns = await this.smartClickHouseDbRef.clickhouseClient.queryPromise(`
 | 
			
		||||
      SELECT * FROM system.columns
 | 
			
		||||
      WHERE database LIKE '${this.smartClickHouseDbRef.options.database}'
 | 
			
		||||
      AND table LIKE '${this.tableName}'
 | 
			
		||||
      AND table LIKE '${this.options.tableName}'
 | 
			
		||||
    `);
 | 
			
		||||
    return this.columns;
 | 
			
		||||
  }
 | 
			
		||||
@@ -120,7 +128,7 @@ export class TimeDataTable {
 | 
			
		||||
          await checkPath(pathArg, typeArg, true);
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
        const alterString = `ALTER TABLE ${this.tableName} ADD COLUMN ${pathArg} ${typeArg} FIRST`
 | 
			
		||||
        const alterString = `ALTER TABLE ${this.options.tableName} ADD COLUMN ${pathArg} ${typeArg} FIRST`
 | 
			
		||||
        try {
 | 
			
		||||
          await this.smartClickHouseDbRef.clickhouseClient.queryPromise(`
 | 
			
		||||
          ${alterString}
 | 
			
		||||
@@ -154,7 +162,7 @@ export class TimeDataTable {
 | 
			
		||||
      storageJson[key] = value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const result = await this.smartClickHouseDbRef.clickhouseClient.insertPromise(this.tableName, [
 | 
			
		||||
    const result = await this.smartClickHouseDbRef.clickhouseClient.insertPromise(this.options.tableName, [
 | 
			
		||||
      storageJson,
 | 
			
		||||
    ]);
 | 
			
		||||
    return result;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user