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