import EventEmitter from "events";
import { GrpcQueryService, QueryService } from "./query-session-pool";
import { Endpoint } from "../discovery";
import { Ydb } from "ydb-sdk-proto";
import { ClientReadableStream, Metadata } from "@grpc/grpc-js";
import { sessionIdSymbol, sessionTxSettingsSymbol, sessionTxIdSymbol, sessionCurrentOperationSymbol, sessionAcquireSymbol, sessionReleaseSymbol, sessionAttachSymbol, sessionIsFreeSymbol, sessionIsDeletedSymbol, sessionDeleteOnReleaseSymbol, sessionRollbackTransactionSymbol, sessionCommitTransactionSymbol, sessionBeginTransactionSymbol, isIdempotentSymbol, isIdempotentDoLevelSymbol, createSymbol, sessionIsClosingSymbol, ctxSymbol, sessionTrailerCallbackSymbol } from './symbols';
import ICreateSessionResult = Ydb.Table.ICreateSessionResult;
import { attach as attachImpl } from './query-session-attach';
import { execute as executeImpl } from './query-session-execute';
import { beginTransaction, commitTransaction, rollbackTransaction as rollbackTransactionImpl } from './query-session-transaction';
import { Logger } from "../logger/simple-logger";
import { Context } from "../context";
export interface QuerySessionOperation {
    cancel(reason: any): void;
}
export declare const apiSymbol: unique symbol;
export declare const implSymbol: unique symbol;
export declare const attachStreamSymbol: unique symbol;
export declare class QuerySession extends EventEmitter implements ICreateSessionResult {
    endpoint: Endpoint;
    readonly logger: Logger;
    [ctxSymbol]?: Context;
    [sessionCurrentOperationSymbol]?: QuerySessionOperation;
    [sessionIdSymbol]: string;
    [sessionTxIdSymbol]?: string;
    [sessionTxSettingsSymbol]?: Ydb.Query.ITransactionSettings;
    [isIdempotentDoLevelSymbol]?: boolean;
    [isIdempotentSymbol]?: boolean;
    [sessionTrailerCallbackSymbol]?: (md: Metadata) => void;
    [implSymbol]: QueryService;
    [attachStreamSymbol]?: ClientReadableStream<Ydb.Query.SessionState>;
    [apiSymbol]: GrpcQueryService;
    private beingDeleted;
    private free;
    private closing;
    get ctx(): Context;
    get sessionId(): string;
    get txId(): string | undefined;
    private constructor();
    static [createSymbol](api: GrpcQueryService, impl: QueryService, endpoint: Endpoint, sessionId: string, logger: Logger): QuerySession;
    [sessionAcquireSymbol](): this;
    [sessionReleaseSymbol](): void;
    [sessionIsFreeSymbol](): boolean;
    [sessionIsClosingSymbol](): boolean;
    [sessionDeleteOnReleaseSymbol](): void;
    [sessionIsDeletedSymbol](): boolean;
    delete(): Promise<void>;
    [sessionAttachSymbol]: typeof attachImpl;
    beginTransaction(txSettings?: Ydb.Query.ITransactionSettings | null): Promise<void>;
    commitTransaction(): Promise<Ydb.Query.CommitTransactionResponse>;
    rollbackTransaction(): Promise<Ydb.Query.RollbackTransactionResponse>;
    [sessionBeginTransactionSymbol]: typeof beginTransaction;
    [sessionCommitTransactionSymbol]: typeof commitTransaction;
    [sessionRollbackTransactionSymbol]: typeof rollbackTransactionImpl;
    execute: typeof executeImpl;
}
//# sourceMappingURL=query-session.d.ts.map