import { ObjectLiteral } from "../common/ObjectLiteral";
import { EntityMetadata } from "../metadata/EntityMetadata";
import { QueryBuilder } from "../query-builder/QueryBuilder";
/**
 * Special options passed to Repository#remove and Repository#delete methods.
 */
export interface RemoveOptions {
    /**
     * Additional data to be passed with remove method.
     * This data can be used in subscribers then.
     */
    data?: any;
    /**
     * Indicates if listeners and subscribers are called for this operation.
     * By default they are enabled, you can disable them by setting { listeners: false } in save/remove options.
     */
    listeners?: boolean;
    /**
     * By default transactions are enabled and all queries in persistence operation are wrapped into the transaction.
     * You can disable this behaviour by setting { transaction: false } in the persistence options.
     */
    transaction?: boolean;
    /**
     * Breaks save execution into given number of chunks.
     * For example, if you want to save 100,000 objects but you have issues with saving them,
     * you can break them into 10 groups of 10,000 objects (by setting { chunk: 10000 }) and save each group separately.
     * This option is needed to perform very big insertions when you have issues with underlying driver parameter number limitation.
     */
    chunk?: number;
    /** 分表模式，处理返回新表名 */
    shardingTableFunction?: <T extends ObjectLiteral>(this: QueryBuilder<T>, tablePath: string, metadata?: EntityMetadata) => string | undefined | null;
    /** logging temp function for current query debug */
    logging?: (sql: string, parameters?: any[], result?: any) => void;
}
