import { AddColumnsOptions, AddForeignKeyOptions, ChangeColumnOptions, DropColumnOptions, DropForeignKeyOptions, RenameTableOptions, CreateDatabaseOptions, CreateTableOptions, CreateUserOptions, GrantOptions, DropDatabaseOptions, DropTableOptions, DropUserOptions, TruncateOptions, DataDefinitionBuilder, CreateIndexOptions } from '../ddl';
import { Repository, RepositoryInit, RepositoryOptions } from '../repository';
import { DropTriggerOptions, TriggerOptions } from '../triggers';
export interface DDLRepositoryOptions extends RepositoryOptions {
    ddlBuilderType: typeof DataDefinitionBuilder;
}
export type DDLRepositoryInit = RepositoryInit;
/**
 * Use the DDL Repository to create & modify your database schema
 */
export declare class DataDefinitionRepository extends Repository {
    protected ddlBuilderType: typeof DataDefinitionBuilder;
    constructor(options: DDLRepositoryOptions);
    init(options: DDLRepositoryInit): void;
    getDDLBuilder(): DataDefinitionBuilder;
    /**
     * Temporarily disable foreign key checks on the session.
     * 	Some databases may require escalated priveleges
     */
    disableForeignKeyChecks(): Promise<void>;
    /**
     * Re-enable foreign key checks on the session.
     * 	Some databases may require escalated priveleges
     */
    enableForeignKeyChecks(): Promise<void>;
    /**
     * Create a new database
     *
     * @param options Database options
     */
    createDatabase(options: CreateDatabaseOptions): Promise<void>;
    /**
     * Create a new table
     *
     * @param options Table options
     */
    createTable(options: CreateTableOptions): Promise<void>;
    /**
     * Create an index on a table
     *
     * @param options Index options
     */
    createIndex(options: CreateIndexOptions): Promise<void>;
    /**
     * Create a new user
     *
     * @param options Table options
     */
    createUser(options: CreateUserOptions): Promise<void>;
    /**
     * IMPORTANT: UNSTABLE. Grant is currently only compatible with
     * 	mysql and mssql and may cause unintended side-effects and/or
     * 	privilege escalation.
     * This should not be used in most circumstances!
     * Use a dedicated database connection for this method, as it may change
     * 	the database connection's default database.
     * This method and it's arguments are likely to change in future versions
     *
     * @param options Grant options
     * @returns
     */
    grant(options: GrantOptions): Promise<void>;
    /**
     * Add columns to a table
     *
     * @param options Add column options
     */
    addColumns(options: AddColumnsOptions): Promise<void>;
    /**
     * Add a foreign key to a table
     *
     * @param options Foreign key options
     */
    addForeignKey(options: AddForeignKeyOptions): Promise<void>;
    /**
     * Change a column
     *
     * @param options Column options
     */
    changeColumn(options: ChangeColumnOptions): Promise<void>;
    /**
     * Drop a column
     *
     * @param options Drop options
     */
    dropColumn(options: DropColumnOptions): Promise<void>;
    /**
     * Drop a foreign key constraint
     *
     * @param options Drop options
     */
    dropForeignKey(options: DropForeignKeyOptions): Promise<void>;
    /**
     * Rename a table
     *
     * @param options Rename options
     */
    renameTable(options: RenameTableOptions): Promise<void>;
    /**
     * Drop a database
     *
     * @param options Options
     */
    dropDatabase(options: DropDatabaseOptions): Promise<void>;
    /**
     * Drop an existing table
     *
     * @param options Options
     */
    dropTable(options: DropTableOptions): Promise<void>;
    /**
     * Drop user(s)
     *
     * @param options Options
     */
    dropUser(options: DropUserOptions): Promise<void>;
    /**
     * Truncate an existing table
     *
     * @param options Options
     */
    truncate(options: TruncateOptions): Promise<void>;
    /**
     * Create a new trigger
     *
     * @param options Trigger options
     */
    createTrigger(options: TriggerOptions): Promise<void>;
    /**
     * Drop an existing trigger
     *
     * @param options Trigger options
     */
    dropTrigger(options: DropTriggerOptions): Promise<void>;
}
