UNPKG

@iarayan/ch-orm

Version:

A Developer-First ClickHouse ORM with Powerful CLI Tools

673 lines 21.3 kB
import { TableEngines } from "../constants/Types"; /** * Column definition for table schema */ export interface ColumnDefinition { /** * Column name */ name: string; /** * Column data type */ type: string; /** * Nullable flag */ nullable?: boolean; /** * Default value expression */ default?: string; /** * Comment for the column */ comment?: string; /** * Codec to use for column compression */ codec?: string; /** * TTL expression for the column */ ttl?: string; } /** * ColumnBuilder class for fluent column definition */ export declare class ColumnBuilder { /** * Column definition */ private column; /** * Reference to the Blueprint instance */ private blueprint; /** * Flag to track if the column was registered */ private registered; /** * Create a new ColumnBuilder instance * @param name - Column name * @param type - Column type * @param blueprint - Reference to the Blueprint instance */ constructor(name: string, type: string, blueprint: Blueprint); /** * Register the column with the blueprint if not already registered * Used internally to ensure column is registered when methods are called */ private ensureRegistered; /** * Set column name * @param name - Column name * @returns ColumnBuilder instance for chaining */ name(name: string): this; /** * Make column nullable * @param isNullable - Optional flag to set nullable status (defaults to true) * @returns ColumnBuilder instance for chaining */ nullable(isNullable?: boolean): this; /** * Set default value for column * @param expression - Default value expression * @returns ColumnBuilder instance for chaining */ default(expression: string): this; /** * Set comment for column * @param text - Comment text * @returns ColumnBuilder instance for chaining */ comment(text: string): this; /** * Set codec for column compression * @param codecExpression - Codec expression * @returns ColumnBuilder instance for chaining */ codec(codecExpression: string): this; /** * Set TTL expression for column * @param expression - TTL expression * @returns ColumnBuilder instance for chaining */ ttl(expression: string): this; /** * Get the column definition * @returns Column definition */ getDefinition(): ColumnDefinition; /** * Register the column with the blueprint and return the blueprint * for continuing the chain on the blueprint * @returns Blueprint instance * @deprecated No longer needed as registration happens automatically */ register(): Blueprint; /** * Proxy for Blueprint.mergeTree() */ mergeTree(): Blueprint; /** * Proxy for Blueprint.orderBy() */ orderBy(columns: OrderByKey): Blueprint; /** * Proxy for Blueprint.partitionBy() */ partitionBy(partitionKey: PartitionKey): Blueprint; /** * Proxy for Blueprint.tableSettings() */ tableSettings(settings: TableSettings): Blueprint; /** * Proxy for Blueprint.comment() */ tableComment(comment: string): Blueprint; /** * Proxy for Blueprint.sampleBy() */ sampleBy(expression: SamplingExpression): Blueprint; /** * Proxy for Blueprint.ttl() (table-level TTL) */ tableTtl(expression: TTLExpression): Blueprint; /** * Proxy for Blueprint.replacingMergeTree() */ replacingMergeTree(version?: string): Blueprint; /** * Proxy for Blueprint.summingMergeTree() */ summingMergeTree(...columns: string[]): Blueprint; /** * Proxy for Blueprint.aggregatingMergeTree() */ aggregatingMergeTree(): Blueprint; /** * Proxy for Blueprint.collapsingMergeTree() */ collapsingMergeTree(signColumn: string): Blueprint; /** * Proxy for Blueprint.versionedCollapsingMergeTree() */ versionedCollapsingMergeTree(signColumn: string, versionColumn: string): Blueprint; /** * Proxy for Blueprint.dropColumn() */ dropColumn(name: string): Blueprint; } /** * Index definition for table schema */ export interface IndexDefinition { /** * Index name */ name: string; /** * Column or expression to index */ expression: string; /** * Index type */ type?: "minmax" | "set" | "ngrambf_v1" | "tokenbf_v1" | "bloom_filter"; /** * Granularity for the index */ granularity?: number; } /** * Table settings options */ export interface TableSettings { /** * Index granularity (number of rows per index) */ index_granularity?: number; /** * Size of granule in rows (default: 8192) */ index_granularity_bytes?: number; /** * Merging options */ enable_mixed_granularity_parts?: boolean; min_merge_bytes_to_use_direct_io?: number; merge_with_ttl_timeout?: number; write_final_mark?: boolean; /** * Storage policy name */ storage_policy?: string; /** * Any other custom settings */ [key: string]: any; } /** * Partition key definition */ export type PartitionKey = string | string[]; /** * Order by definition (PRIMARY KEY) */ export type OrderByKey = string | string[]; /** * Sampling expression */ export type SamplingExpression = string; /** * TTL expression */ export type TTLExpression = string; /** * Blueprint class for defining table schema * Used in migrations to define table structure in a fluent manner */ export declare class Blueprint { /** * Table name */ private readonly table; /** * Collection of column definitions */ private columns; /** * Collection of index definitions */ private indices; /** * Table engine to use */ private engine; /** * Engine parameters */ private engineParams; /** * Order by expressions (PRIMARY KEY) */ private orderByExpressions; /** * Partition by expression */ private partitionByExpression; /** * Sampling expression */ private samplingExpression; /** * Table TTL expression */ private ttlExpression; /** * Table settings */ private settings; /** * Comment for the table */ private tableComment; /** * Flag for if table is temporary */ private isTemporary; /** * Flag for if table should be created if it doesn't exist */ private ifNotExists; /** * Track column modifications for ALTER TABLE */ private columnModifications; /** * Flag to indicate if we're in an ALTER TABLE context */ private isAltering; /** * Create a new Blueprint instance * @param table - Table name */ constructor(table: string); /** * Register a column definition generated by a ColumnBuilder * @param column - Column definition to register */ registerColumn(column: ColumnDefinition): void; /** * Private method to create a ColumnBuilder for fluent API * @param name - Column name * @param type - Column type * @param options - Column options (for compatibility with existing code) * @returns ColumnBuilder instance */ private createColumn; /** * Add a String column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ string(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an Int32 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ int32(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an Int8 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ int8(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an UInt8 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ uint8(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an Int16 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ int16(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an UInt16 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ uint16(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an UInt32 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ uint32(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an Int64 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ int64(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an UInt64 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ uint64(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Float32 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ float32(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Float64 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ float64(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Decimal column * @param name - Column name * @param precision - Precision (total digits) * @param scale - Scale (decimal places) * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ decimal(name: string, precision?: number, scale?: number, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a FixedString column * @param name - Column name * @param length - String length * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ fixedString(name: string, length: number, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a UUID column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ uuid(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Date column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ date(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Date32 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ date32(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a DateTime column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ dateTime(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a DateTime64 column * @param name - Column name * @param precision - Precision (0-9) * @param timezone - Timezone name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ dateTime64(name: string, precision?: number, timezone?: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Boolean column (implemented as UInt8) * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ boolean(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an Array column * @param name - Column name * @param subtype - Array element type * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ array(name: string, subtype: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Nullable column * @param name - Column name * @param subtype - Base type * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ nullable(name: string, subtype: string, options?: Partial<Omit<ColumnDefinition, "name" | "type" | "nullable">>): ColumnBuilder; /** * Add a LowCardinality column * @param name - Column name * @param subtype - Base type * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ lowCardinality(name: string, subtype: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a Map column * @param name - Column name * @param keyType - Key type * @param valueType - Value type * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ map(name: string, keyType: string, valueType: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an IPv4 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ ipv4(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an IPv6 column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ ipv6(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add a JSON column * @param name - Column name * @param options - Column options (for backward compatibility) * @returns ColumnBuilder instance for chaining */ json(name: string, options?: Partial<Omit<ColumnDefinition, "name" | "type">>): ColumnBuilder; /** * Add an index to the table * @param name - Index name * @param expression - Index expression * @param type - Index type * @param granularity - Index granularity * @returns Blueprint instance for chaining */ index(name: string, expression: string, type?: IndexDefinition["type"], granularity?: number): this; /** * Set the engine for the table * @param engine - Table engine * @param params - Engine parameters * @returns Blueprint instance for chaining */ setEngine(engine: TableEngines, ...params: string[]): this; /** * Set the MergeTree engine * @returns Blueprint instance for chaining */ mergeTree(): this; /** * Set the ReplacingMergeTree engine * @param version - Version column name (optional) * @returns Blueprint instance for chaining */ replacingMergeTree(version?: string): this; /** * Set the SummingMergeTree engine * @param columns - Columns to sum (optional) * @returns Blueprint instance for chaining */ summingMergeTree(...columns: string[]): this; /** * Set the AggregatingMergeTree engine * @returns Blueprint instance for chaining */ aggregatingMergeTree(): this; /** * Set the CollapsingMergeTree engine * @param signColumn - Sign column name * @returns Blueprint instance for chaining */ collapsingMergeTree(signColumn: string): this; /** * Set the VersionedCollapsingMergeTree engine * @param signColumn - Sign column name * @param versionColumn - Version column name * @returns Blueprint instance for chaining */ versionedCollapsingMergeTree(signColumn: string, versionColumn: string): this; /** * Set the order by expression (PRIMARY KEY) * @param columns - Column expressions * @returns Blueprint instance for chaining */ orderBy(columns: OrderByKey): this; /** * Set the partition by expression * @param partitionKey - Partition key expression * @returns Blueprint instance for chaining */ partitionBy(partitionKey: PartitionKey): this; /** * Set the sampling expression * @param expression - Sampling expression * @returns Blueprint instance for chaining */ sampleBy(expression: SamplingExpression): this; /** * Set the TTL expression * @param expression - TTL expression * @returns Blueprint instance for chaining */ ttl(expression: TTLExpression): this; /** * Set table settings * @param settings - Table settings * @returns Blueprint instance for chaining */ tableSettings(settings: TableSettings): this; /** * Set a comment for the table * @param comment - Table comment * @returns Blueprint instance for chaining */ comment(comment: string): this; /** * Mark the table as temporary * @returns Blueprint instance for chaining */ temporary(): this; /** * Set if not exists flag * @param value - If not exists flag value * @returns Blueprint instance for chaining */ setIfNotExists(value: boolean): this; /** * Build the SQL for creating the table * @returns SQL query for creating the table */ toSql(): string; /** * Build the SQL for dropping the table * @param ifExists - Add IF EXISTS clause * @returns SQL query for dropping the table */ toDropSql(ifExists?: boolean): string; /** * Get the table name * @returns Table name */ getTableName(): string; /** * Get columns * @returns Column definitions */ getColumns(): ColumnDefinition[]; /** * Generate SQL for ALTER TABLE operations * @returns SQL string for ALTER TABLE */ toAlterSql(): string; /** * Format a column definition for SQL * @param column - Column definition * @returns Formatted column definition */ private formatColumnDefinition; /** * Drop a column * @param name - Column name to drop * @returns Blueprint instance for chaining */ dropColumn(name: string): this; /** * Set the ALTER TABLE context * @param value - Whether we're in an ALTER TABLE context * @returns Blueprint instance for chaining */ setAltering(value: boolean): this; /** * Add a column to the table * @param name - Column name * @param type - Column type * @param options - Column options * @returns Blueprint instance for chaining * @deprecated Use the fluent interface instead */ private addColumnDefinition; /** * Modify an existing column * @param name - Column name * @param type - New column type * @param options - New column options * @returns Blueprint instance for chaining */ private modifyColumnDefinition; /** * Base method to handle column definitions for both new and existing columns * @param name - Column name * @param type - Column type * @param options - Column options * @returns Blueprint instance for chaining * @deprecated Use the fluent interface instead */ private handleColumnDefinition; } //# sourceMappingURL=Blueprint.d.ts.map