import { ExecutableBuilder } from "../core/executable-builder";
import { DatabaseBase, DatabaseResult } from "../definitions/database-definition";
import { MapperTable } from "../mapper-table";
import { ValueTypeToParse } from "../core/utils";
import { SqlCompilable } from "./sql-compilable";
import { QueryCompiled } from "../core/query-compiled";
import { SqlExecutable } from "./sql-executable";
import { Observable } from "rxjs";
export declare abstract class SqlBase<T> implements SqlCompilable, SqlExecutable {
    protected readonly _executableBuilder: ExecutableBuilder;
    protected readonly mapperTable: MapperTable;
    protected readonly database: DatabaseBase;
    protected readonly enableLog: boolean;
    protected get mainScriptLength(): number;
    private _mainScriptLength;
    constructor({ mapperTable, database, enableLog }: {
        mapperTable: MapperTable;
        database?: DatabaseBase;
        enableLog?: boolean;
    });
    execute({ cascade, database }?: {
        cascade?: boolean;
        database?: DatabaseBase;
    }): Observable<DatabaseResult[]>;
    compile(cascade?: boolean): QueryCompiled[];
    protected compileDependency(cascade: boolean): QueryCompiled[];
    protected compileDependencyByValue(dependency: MapperTable): QueryCompiled[];
    protected compileValuesDependency(dependency: MapperTable, valuesDependencyArray: ValueTypeToParse[][], fieldReferenceSubItem: string): QueryCompiled[];
    protected abstract dependencies(): MapperTable[];
    protected abstract model(): T | Array<T>;
    protected abstract builderCompiled(): QueryCompiled | QueryCompiled[];
    protected abstract resolveDependency(dependency: MapperTable): QueryCompiled;
    protected abstract checkDatabaseResult(promise: Observable<DatabaseResult[]>): Observable<DatabaseResult[]>;
    protected resolveDependencyByValue(dependency: MapperTable, value: ValueTypeToParse, index: number): QueryCompiled;
    protected getDatabase(database: DatabaseBase): DatabaseBase;
    protected checkAndPush(scripts: QueryCompiled[], push: QueryCompiled | QueryCompiled[]): void;
}
