import { QueryApi } from '../api';
import { QueryOptions, QueryPlan, Metadata, MetadataModel, MetadataConstraint, MetadataParameter } from 'lambdaorm-base';
import { ClientQueryService } from '../../application/services';
export declare class QueryApiService implements ClientQueryService {
    private readonly queryApi;
    constructor(queryApi: QueryApi);
    /**
     * Get model of query
     * @param query query expression
     * @returns Model of query
     */
    model(query: Function): Promise<MetadataModel[]>;
    model(query: string): Promise<MetadataModel[]>;
    /**
         * Get parameters of query
         * @param query query expression
         * @returns Parameters of query
         */
    parameters(query: Function): Promise<MetadataParameter[]>;
    parameters(query: string): Promise<MetadataParameter[]>;
    /**
         * Get constraints of query
         * @param query query expression
         * @returns Constraints of query
         */
    constraints(query: Function): Promise<MetadataConstraint>;
    constraints(query: string): Promise<MetadataConstraint>;
    /**
         * Get metadata of query
         * @param query query expression
         * @returns metadata of query
         */
    metadata(query: Function): Promise<Metadata>;
    metadata(query: string): Promise<Metadata>;
    /**
         * Get plan of query
         * @param query query expression
         * @param options options of query
         */
    plan(query: Function, options?: QueryOptions): Promise<QueryPlan>;
    plan(query: string, options?: QueryOptions): Promise<QueryPlan>;
    /**
         * Execute query
         * @param query query expression
         * @param data Data with variables
         * @param options options of query
         * @returns Result of query
         */
    execute(query: Function, data?: any, options?: QueryOptions): Promise<any>;
    execute(query: string, data?: any, options?: QueryOptions): Promise<any>;
    /**
         * Execute query
         * @param query query expression
         * @param data Data with variables
         * @param options options of execution
         * @returns Result of execution
         */
    executeQueued(query: Function, topic: string, data?: any, chunk?: number, options?: QueryOptions): Promise<any>;
    executeQueued(query: string, topic: string, data?: any, chunk?: number, options?: QueryOptions): Promise<any>;
    private toExpression;
    private solveOptions;
}
