UNPKG

clickhouse-orm

Version:
77 lines (76 loc) 2.41 kB
import { ClickHouse } from "clickhouse"; import Model from "./model"; import { SchemaConfig } from "./schema"; export interface DbConfig { name: string; /** * default: Atomic */ engine?: string; cluster?: string; } export interface OrmConfig { /** * TimonKK/clickhouse config */ client: any; db: DbConfig; debug: boolean; } export interface ModelConfig<T = any> { tableName: string; schema: SchemaConfig<T>; } export interface ModelSyncTableConfig<T = any> { tableName: string; schema: SchemaConfig<T>; autoCreate: boolean; options: string; autoSync?: boolean; } export interface ModelSqlCreateTableConfig<T = any> { tableName: string; schema: SchemaConfig<T>; createTable?: (dbTableName: string, db: DbConfig) => string; } declare type TableMeta = { name: string; type: string; }[]; declare type ModelConfigs<T> = ModelConfig<T> | ModelSyncTableConfig<T> | ModelSqlCreateTableConfig<T>; /** {a:unknown,b:string,c:unknown} >>> 'a'|'c' */ declare type GetUnknownAttr<T> = { [a in keyof T]: unknown extends T[a] ? a : never; }[keyof T]; /** {a:unknown,b:string,c:unknown} >>> {b:string} */ declare type GetDefinedAttr<T> = Pick<T, Exclude<keyof T, GetUnknownAttr<T>>>; export default class ClickhouseOrm { client: ClickHouse; db: DbConfig; debug: boolean; models: {}; constructor({ client, db, debug }: OrmConfig); getCreateDatabaseSql(): string; createDatabase(): Promise<Object[]>; getTableMeta(dbTableName: string): Promise<any>; diffTableMeta(codeSchema: SchemaConfig, tableMeta: TableMeta): { deleteColumns: string[]; addColumns: any[]; modifyColumns: any[]; }; syncTable({ deleteColumns, addColumns, modifyColumns, dbTableName }: { deleteColumns: any; addColumns: any; modifyColumns: any; dbTableName: any; }): Promise<any[]>; autoCreateTableSql(dbTableName: string, modelConfig: ModelSyncTableConfig): string; createAndSync(modelConfig: ModelSyncTableConfig | ModelSqlCreateTableConfig, dbTableName: string): Promise<void>; P: any; /** * @remark * The createDatabase must be completed */ model<T = any>(modelConfig: ModelConfigs<T>): Promise<Model<{ [f in keyof GetDefinedAttr<T>]: GetDefinedAttr<T>[f]; } & { [f_1 in GetUnknownAttr<T>]?: any; }>>; } export {};