import { O_CREATE_TABLE_CREATE_DEFINITION, O_ALTER_TABLE_SPEC_ADD_COLUMNS_COLUMN, ColumnInterface } from '../../../../typings';
import { PrimaryKeyModelInterface, ForeignKeyModelInterface, UniqueKeyModelInterface, ColumnModelInterface, DatatypeModelInterface, ColumnReferenceModelInterface, ColumnOptionsModelInterface } from './typings';
/**
 * Table column.
 */
export declare class Column implements ColumnModelInterface {
    name: string;
    type: DatatypeModelInterface;
    reference?: ColumnReferenceModelInterface;
    options?: ColumnOptionsModelInterface;
    /**
     * Creates a column from a JSON def.
     *
     * @param json JSON format parsed from SQL.
     */
    static fromDef(json: O_CREATE_TABLE_CREATE_DEFINITION): Column;
    /**
     * Creates a column from an object containing needed properties.
     *
     * @param json Object containing properties.
     */
    static fromObject(json: O_ALTER_TABLE_SPEC_ADD_COLUMNS_COLUMN): Column;
    /**
     * JSON casting of this object calls this method.
     */
    toJSON(): ColumnInterface;
    /**
     * Create a deep clone of this model.
     */
    clone(): Column;
    /**
     * Whether this column is primary key.
     */
    isPrimaryKey(): boolean;
    /**
     * Whether this column is unique key.
     */
    isUniqueKey(): boolean;
    /**
     * Whether this column is foreign key.
     */
    isForeignKey(): boolean;
    /**
     * Extracts instance of PrimaryKey if this column is primary key.
     * Removes 'primary' property from options.
     */
    extractPrimaryKey(): PrimaryKeyModelInterface | undefined;
    /**
     * Extracts instance of ForeignKey if this column references other table.
     * Removes 'reference' property from options.
     */
    extractForeignKey(): ForeignKeyModelInterface | undefined;
    /**
     * Extracts instance of UniqueKey if this column is unique key.
     * Removes 'unique' property from options.
     */
    extractUniqueKey(): UniqueKeyModelInterface | undefined;
}
