import { KeyOf } from '@itrocks/class-type';
import { ObjectOrType } from '@itrocks/class-type';
import { Type } from '@itrocks/class-type';
import { Mysql as M } from '@itrocks/mysql';
import { Entity } from '@itrocks/storage';
import { Identifier } from '@itrocks/storage';
import { SearchType } from '@itrocks/storage';
import { ContextualConnection } from './contextual-connection';
export declare class Mysql extends M {
    connection?: ContextualConnection;
    connect(): Promise<ContextualConnection>;
    deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: KeyOf<Entity<T>>): Promise<void>;
    deleteRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
    insert<T extends object>(object: T): Promise<Entity<T>>;
    insertRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
    read<T extends object>(type: Type<T>, id: Identifier): Promise<Entity<T>>;
    readCollection<T extends object, PT extends object>(object: Entity<T>, property: KeyOf<T>, type?: Type<PT>): Promise<Awaited<PT & {
        id: Identifier;
    }>[]>;
    readCollectionIds<T extends object, PT extends object>(object: Entity<T>, property: KeyOf<T>, type?: Type<PT>): Promise<Identifier[]>;
    readMultiple<T extends object>(type: Type<T>, ids: Identifier[]): Promise<Entity<T>[]>;
    search<T extends object>(type: Type<T>, search?: SearchType<T>): Promise<Entity<T>[]>;
    update<T extends object>(object: Entity<T>): Promise<Entity<T>>;
}
