import Cypher from "@neo4j/cypher-builder";
import type { ConcreteEntityAdapter } from "../../../../schema-model/entity/model-adapters/ConcreteEntityAdapter";
import type { RelationshipAdapter } from "../../../../schema-model/relationship/model-adapters/RelationshipAdapter";
import type { QueryASTContext } from "../QueryASTContext";
import type { QueryASTNode } from "../QueryASTNode";
import type { Field } from "../fields/Field";
import type { Filter } from "../filters/Filter";
import type { AuthorizationFilters } from "../filters/authorization-filters/AuthorizationFilters";
import type { Pagination } from "../pagination/Pagination";
import type { EntitySelection } from "../selection/EntitySelection";
import type { Sort } from "../sort/Sort";
import type { OperationTranspileResult } from "./operations";
import { Operation } from "./operations";
export declare class ReadOperation extends Operation {
    readonly target: ConcreteEntityAdapter;
    readonly relationship: RelationshipAdapter | undefined;
    fields: Field[];
    protected filters: Filter[];
    protected authFilters: AuthorizationFilters[];
    protected pagination: Pagination | undefined;
    protected sortFields: Sort[];
    protected selection: EntitySelection;
    constructor({ target, relationship, selection, }: {
        target: ConcreteEntityAdapter;
        relationship?: RelationshipAdapter;
        selection: EntitySelection;
    });
    setFields(fields: Field[]): void;
    addSort(...sort: Sort[]): void;
    addPagination(pagination: Pagination): void;
    addFilters(...filters: Filter[]): void;
    addAuthFilters(...filter: AuthorizationFilters[]): void;
    protected getAuthFilterSubqueries(context: QueryASTContext): Cypher.Clause[];
    protected getAuthFilterPredicate(context: QueryASTContext): Cypher.Predicate[];
    protected getValidations(context: QueryASTContext): Cypher.VoidProcedure[];
    protected getProjectionClause(context: QueryASTContext, returnVariable: Cypher.Variable): Cypher.Return;
    protected getPredicates(queryASTContext: QueryASTContext): Cypher.Predicate | undefined;
    transpile(context: QueryASTContext): OperationTranspileResult;
    protected getReturnStatement(context: QueryASTContext, returnVariable: Cypher.Variable): Cypher.Return;
    private hasCypherSort;
    getChildren(): QueryASTNode[];
    protected getFieldsSubqueries(context: QueryASTContext): Cypher.Clause[];
    protected getCypherFieldsSubqueries(context: QueryASTContext): Cypher.Clause[];
    private getCypherFields;
    protected getProjectionMap(context: QueryASTContext): Cypher.MapProjection;
    protected addSortToClause(context: QueryASTContext, node: Cypher.Node, clause: Cypher.With | Cypher.Return): void;
}
//# sourceMappingURL=ReadOperation.d.ts.map