/// <reference types="sequelize" />
import * as Sql from 'sequelize';
import { StaticModelT, ModelT, PkType, Db } from '../../core/model';
import { QueryT, CountQueryT, DestroyQueryT } from '../../core/db';
import { Logger } from '../../services/logger';
import { Sequelize } from '../sequelize';
import { TransactionService } from '../../services/transaction.service';
import { TransactionImpl } from './transaction-impl';
export declare class DbImpl<T extends ModelT<PkType>, TInstance, TAttributes> implements Db<T> {
    private modelFn;
    private model;
    private sequelize;
    private logger;
    private transactionService;
    constructor(modelFn: StaticModelT<T>, model: Sql.Model<TInstance, TAttributes>, sequelize: Sequelize, logger: Logger, transactionService: TransactionService);
    private getSqlTransact(transaction?);
    private transaction(name, transaction?);
    create(t: Object | T | Object[] | T[], transaction?: TransactionImpl): Promise<any>;
    findById(id: string | number, options?: QueryT, transaction?: TransactionImpl): Promise<T | null>;
    findOne(query: QueryT, transaction?: TransactionImpl): Promise<T | null>;
    findOrCreate(query: Sql.WhereOptions, defaults?: Object | T, transaction?: TransactionImpl): Promise<[T, boolean]>;
    findAndCountAll(query?: QueryT, transaction?: TransactionImpl): Promise<{
        count: number;
        results: T[];
    }>;
    findAll(query?: QueryT, transaction?: TransactionImpl): Promise<T[]>;
    all(query?: QueryT, transaction?: TransactionImpl): Promise<T[]>;
    count(query?: CountQueryT, transaction?: TransactionImpl): Promise<number>;
    max(field: string, transaction?: TransactionImpl): Promise<any>;
    min(field: string, transaction?: TransactionImpl): Promise<any>;
    sum(field: string, transaction?: TransactionImpl): Promise<number>;
    save(t: T, transaction?: TransactionImpl): Promise<T>;
    update(query: number | string | T | QueryT, replace: Object, returning?: boolean, transaction?: TransactionImpl): Promise<[boolean | number, any]>;
    updateOrCreate(query: Sql.WhereOptions, defaults: Object | T, transaction?: TransactionImpl): Promise<[T, boolean]>;
    destroy(query: number | string | T | DestroyQueryT, transaction?: TransactionImpl): Promise<any>;
    private isId(query);
    private isT(query);
    private copyVals;
    private createCopyValsFn();
    private static getForeignModelDbImpl(foreignModel);
    private transformQueryWhere;
    private transformQueryInclude;
    private transformResult;
    private includeFields;
    private createTransformQuery();
    private transformQuery(query);
    private transforms;
    private getTransforms();
    private composeAnd(query, $and);
    private addPrefix(query, prefix);
    private createTransformQueryWhere(transforms);
    private createTransformQueryInclude();
    private createTransformResult(transforms);
    fromJson(json: any): T;
    private wrapResult(result, implicitIncludes);
    private wrapResults(results, implicitIncludes);
}
