import { QueryInput, QueryOutput } from 'aws-sdk/clients/dynamodb';
import { Observable } from 'rxjs';
import { ModelConstructor } from '../../../model';
import { DynamoRx } from '../../dynamo-rx';
import { ConditionExpressionDefinitionFunction, RequestConditionFunction, RequestSortKeyConditionFunction } from '../../expression/type';
import { Pageable } from '../../paged';
import { Request } from '../request.model';
import { QueryResponse } from './query.response';
export declare class QueryRequest<T> extends Request<T, QueryRequest<T>, QueryInput, QueryResponse<T>> implements Pageable<T, QueryRequest<T>, QueryResponse<T>> {
    private readonly logger;
    constructor(dynamoRx: DynamoRx, modelClazz: ModelConstructor<T>, tableName: string);
    wherePartitionKey(partitionKeyValue: any): QueryRequest<T>;
    /**
     * used to define some condition for the sort key, use the secondary index to query based on a custom index
     * @returns {RequestConditionFunction<T>}
     */
    whereSortKey(): RequestSortKeyConditionFunction<QueryRequest<T>>;
    whereAttribute(attributePath: keyof T): RequestConditionFunction<QueryRequest<T>>;
    where(...conditionDefFns: ConditionExpressionDefinitionFunction[]): QueryRequest<T>;
    ascending(): QueryRequest<T>;
    descending(): QueryRequest<T>;
    execCount(): Observable<number>;
    execFullResponse(): Observable<QueryResponse<T>>;
    exec(): Observable<T[]>;
    execNoMap(): Observable<QueryOutput>;
    execSingle(): Observable<T | null>;
    /**
     * fetches all pages. may uses all provisionedOutput, therefore for client side use cases rather use pagedDatasource (exec)
     */
    execFetchAll(): Observable<T[]>;
}
