export default class VelociousDatabaseMigration {
    /**
     * Runs on databases.
     * @param {string[]} databaseIdentifiers - Database identifiers.
     * @returns {void} - No return value.
     */
    static onDatabases(databaseIdentifiers: string[]): void;
    /**
     * Runs get database identifiers.
     * @returns {string[] | undefined} - The database identifiers.
     */
    static getDatabaseIdentifiers(): string[] | undefined;
    /**
     * Runs constructor.
     * @param {object} args - Options object.
     * @param {import("../../configuration.js").default} args.configuration - Configuration instance.
     * @param {string} args.databaseIdentifier - Database identifier.
     * @param {import("../drivers/base.js").default} args.db - Database connection.
     */
    constructor({ configuration, databaseIdentifier, db }: {
        configuration: import("../../configuration.js").default;
        databaseIdentifier: string;
        db: import("../drivers/base.js").default;
    });
    configuration: import("../../configuration.js").default;
    _databaseIdentifier: string;
    _db: import("../drivers/base.js").default;
    _getDatabaseIdentifier(): string;
    /**
     * Runs get driver.
     * @returns {import("../drivers/base.js").default} - The driver.
     */
    getDriver(): import("../drivers/base.js").default;
    connection(): import("../drivers/base.js").default;
    change(): Promise<void>;
    up(): Promise<void>;
    down(): Promise<void>;
    /**
     * Runs execute.
     * @param {string} sql - SQL string.
     * @returns {Promise<import("../drivers/base.js").QueryResultType>} - Resolves with the execute.
     */
    execute(sql: string): Promise<import("../drivers/base.js").QueryResultType>;
    /**
     * Runs add column.
     * @param {string} tableName - Table name.
     * @param {string} columnName - Column name.
     * @param {string} columnType - Column type.
     * @param {AddColumnArgsType} [args] - Options object.
     * @returns {Promise<void>} - Resolves when complete.
     */
    addColumn(tableName: string, columnName: string, columnType: string, args?: AddColumnArgsType): Promise<void>;
    /**
     * Runs remove column.
     * @param {string} tableName - Table name.
     * @param {string} columnName - Column name.
     * @returns {Promise<void>} - Resolves when complete.
     */
    removeColumn(tableName: string, columnName: string): Promise<void>;
    /**
     * AddIndexArgsType type.
     * @typedef {object} AddIndexArgsType
     * @property {boolean} [ifNotExists] - Skip creation if the index already exists.
     * @property {string} [name] - Explicit index name to use.
     * @property {boolean} [unique] - Whether the index should be unique.
     */
    /**
     * Runs add index.
     * @param {string} tableName - Table name.
     * @param {string | Array<string | import("../table-data/table-column.js").default>} columns - Column name or array of column names.
     * @param {AddIndexArgsType} [args] - Options object.
     * @returns {Promise<void>} - Resolves when complete.
     */
    addIndex(tableName: string, columns: string | Array<string | import("../table-data/table-column.js").default>, args?: {
        /**
         * - Skip creation if the index already exists.
         */
        ifNotExists?: boolean | undefined;
        /**
         * - Explicit index name to use.
         */
        name?: string | undefined;
        /**
         * - Whether the index should be unique.
         */
        unique?: boolean | undefined;
    }): Promise<void>;
    /**
     * AddForeignKeyArgsType type.
     * @typedef {object} AddForeignKeyArgsType
     * @property {string} [columnName] - Override the derived FK column name (default: `${reference_underscored}_id`).
     * @property {string} [name] - Override the derived constraint name (default: `fk_${tableName}_${referenceName}`).
     * @property {string} [referencedColumnName] - Override the referenced column name (default: `id`).
     * @property {string} [referencedTableName] - Override the derived referenced table (default: pluralized `referenceName`).
     */
    /**
     * Runs add foreign key.
     * @param {string} tableName - Table the FK lives on.
     * @param {string} referenceName - Singular reference name. Defaults derive
     *   the FK column as `${reference}_id`, the referenced table by pluralizing
     *   the reference, the referenced column as `id`, and the constraint name
     *   as `fk_${tableName}_${referenceName}`. Override any of those via `args`
     *   when the schema doesn't follow the convention.
     * @param {AddForeignKeyArgsType} [args] - Optional overrides.
     * @returns {Promise<void>} - Resolves when complete.
     */
    addForeignKey(tableName: string, referenceName: string, args?: {
        /**
         * - Override the derived FK column name (default: `${reference_underscored}_id`).
         */
        columnName?: string | undefined;
        /**
         * - Override the derived constraint name (default: `fk_${tableName}_${referenceName}`).
         */
        name?: string | undefined;
        /**
         * - Override the referenced column name (default: `id`).
         */
        referencedColumnName?: string | undefined;
        /**
         * - Override the derived referenced table (default: pluralized `referenceName`).
         */
        referencedTableName?: string | undefined;
    }): Promise<void>;
    /**
     * Runs add reference.
     * @param {string} tableName - Table name.
     * @param {string} referenceName - Reference name.
     * @param {object} args - Options object.
     * @param {boolean} [args.foreignKey] - Whether foreign key.
     * @param {boolean} [args.null] - Whether nullable.
     * @param {string} [args.type] - Type identifier.
     * @param {boolean} [args.unique] - Whether unique.
     * @returns {Promise<void>} - Resolves when complete.
     */
    addReference(tableName: string, referenceName: string, args: {
        foreignKey?: boolean | undefined;
        null?: boolean | undefined;
        type?: string | undefined;
        unique?: boolean | undefined;
    }): Promise<void>;
    /**
     * Runs remove reference.
     * @param {string} tableName - Table name.
     * @param {string} referenceName - Reference name.
     * @returns {Promise<void>} - Resolves when complete.
     */
    removeReference(tableName: string, referenceName: string): Promise<void>;
    /**
     * Runs change column null.
     * @param {string} tableName - Table name.
     * @param {string} columnName - Column name.
     * @param {boolean} nullable - Whether nullable.
     * @returns {Promise<void>} - Resolves when complete.
     */
    changeColumnNull(tableName: string, columnName: string, nullable: boolean): Promise<void>;
    /**
     * Runs column exists.
     * @param {string} tableName - Table name.
     * @param {string} columnName - Column name.
     * @returns {Promise<boolean>} - Resolves with Whether column exists.
     */
    columnExists(tableName: string, columnName: string): Promise<boolean>;
    /**
     * Sets up the database schema for a gap-less positional list. Adds the
     * position column (INT NOT NULL) if absent and creates a UNIQUE index on
     * (scope, position). This is the schema-side counterpart of
     * `Model.actsAsList()`.
     * @param {string} tableName - Table name.
     * @param {string} positionColumn - Column name for the position (e.g. "row_number").
     * @param {object} options - Options.
     * @param {string} options.scope - Column name for the scope (e.g. "board_column_id").
     * @returns {Promise<void>}
     */
    addActsAsList(tableName: string, positionColumn: string, { scope }: {
        scope: string;
    }): Promise<void>;
    /**
     * Creates a table with default options.
     * @overload
     * @param {string} tableName - Table name.
     * @param {CreateTableCallbackType} callback - Callback function.
     * @returns {Promise<void>} - Resolves when complete.
     */
    createTable(tableName: string, callback: CreateTableCallbackType): Promise<void>;
    /**
     * Creates a table with explicit options.
     * @overload
     * @param {string} tableName - Table name.
     * @param {CreateTableArgsType} args - Options object.
     * @param {CreateTableCallbackType} callback - Callback function.
     * @returns {Promise<void>} - Resolves when complete.
     */
    createTable(tableName: string, args: CreateTableArgsType, callback: CreateTableCallbackType): Promise<void>;
    /**
     * Runs drop table.
     * @param {string} tableName - Table name.
     * @returns {Promise<void>} - Resolves when complete.
     */
    dropTable(tableName: string): Promise<void>;
    /**
     * Runs rename column.
     * @param {string} tableName - Table name.
     * @param {string} oldColumnName - Previous column name.
     * @param {string} newColumnName - New column name.
     * @returns {Promise<void>} - Resolves when complete.
     */
    renameColumn(tableName: string, oldColumnName: string, newColumnName: string): Promise<void>;
    /**
     * Runs table exists.
     * @param {string} tableName - Table name.
     * @returns {Promise<boolean>} - Resolves with Whether table exists.
     */
    tableExists(tableName: string): Promise<boolean>;
}
/**
 * AddColumnArgsType type.
 */
export type AddColumnArgsType = {
    /**
     * - Default value for the column.
     */
    default?: unknown;
    /**
     * - Foreign key definition for the column.
     */
    foreignKey?: object | undefined;
    /**
     * - Whether to add an index (optionally unique).
     */
    index?: boolean | {
        unique: boolean;
    } | undefined;
    /**
     * - Whether the column allows null values.
     */
    null?: boolean | undefined;
    /**
     * - Whether the column is a primary key.
     */
    primaryKey?: boolean | undefined;
    /**
     * - Whether the column enforces uniqueness.
     */
    unique?: boolean | undefined;
};
/**
 * CreateTableIdArgsType type.
 */
export type CreateTableIdArgsType = {
    /**
     * - Default value for the ID column.
     */
    default?: unknown;
    /**
     * - Column type for the ID column.
     */
    type?: string | undefined;
};
/**
 * CreateTableArgsType type.
 */
export type CreateTableArgsType = {
    /**
     * - Skip creation if the table already exists.
     */
    ifNotExists?: boolean | undefined;
    /**
     * - ID column options or false to skip ID.
     */
    id?: false | CreateTableIdArgsType | undefined;
};
/**
 * CreateTableCallbackType type.
 */
export type CreateTableCallbackType = (table: TableData) => void;
export class NotImplementedError extends Error {
}
import TableData from "../table-data/index.js";
//# sourceMappingURL=index.d.ts.map