@iarayan/ch-orm
Version:
A Developer-First ClickHouse ORM with Powerful CLI Tools
673 lines • 21.3 kB
TypeScript
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