import { DatabaseResult } from "../definitions/database-definition";
import { SqlCompilable } from "../crud/sql-compilable";
import { SqlExecutable } from "../crud/sql-executable";
import { SingleTransactionManager } from "./single-transaction-manager";
import { Observable } from "rxjs";
/**
 * Manages better and homogeneous transaction between providers
 */
export declare class ManagedTransaction {
    private _database;
    private _singleTransactionManager;
    private _idTransaction;
    private _status;
    private _stack;
    /**
     * return transaction id
     */
    get id(): string;
    /**
     * Set transaction status
     */
    private set status(value);
    constructor(_database: {
        sqlBatch(sqlStatements: Array<(string | string[] | any)>): Promise<DatabaseResult[]>;
        executeSql(statement: string, params: any): Promise<DatabaseResult>;
    }, _singleTransactionManager: SingleTransactionManager);
    /**
     * Add command statement in transaction
     * @param statement command to apply
     * @param params command params
     */
    addStatement(statement: string, params: any[]): void;
    /**
     * Add command compilable in transaction
     * @param compilable command compilable for add in transaction
     */
    add(compilable: SqlCompilable & {
        __allowInTransaction: boolean;
    }): void;
    /**
     * @deprecated Será removido, pois não tem utilidade real e não funciona de forma homegenea entre providers
     * @param executable
     */
    executeImmediate(executable: SqlExecutable): Promise<DatabaseResult[]>;
    /**
     * Commit a transaction
     */
    commit(): Observable<boolean>;
    /**
     * Rollback in current transaction
     */
    rollback(): Promise<boolean>;
    private sqlBatch;
    private executeSql;
    /**
     * Commit a transaction
     */
    private commitExecuteObservable;
    /**
     * Commit a transaction
     */
    private commitExecute;
    /**
     * Execute stack in Database
     */
    private executeStack;
    private checkParametersAllowedInTransaction;
    /**
     * check transaction is active (open, stated, released) and throw error if inactive
     */
    private checkTransactionActive;
    /**
     * return true if transaction is active (open, stated, released)
     */
    private isTransactionActive;
    /**
     * Finish transaction and set status
     * @param status Status for finished transaction
     */
    private finishTransaction;
    /**
     * Clear stack transaction
     */
    private clearStackTransaction;
    /**
     * Convert Array commands for SqlBatch format
     * @param compiled Array commands
     */
    private buildSqlBatch;
    /**
     * Convert Array commands for SqlExecute format
     * @param compiled Array commands
     */
    private buildSqlExecute;
    /**
     * Begin transaction
     */
    private beginTransaction;
    /**
     * Command commit transaction
     */
    private commandCommitTransaction;
    /**
     * Command roolback transaction
     */
    private commandRollbackTransaction;
}
