import { type HasQuery, type HasResolver, type HasSql, internalData, internalQuery } from './Internal.js';
import type { Deliver, QueryMeta } from './MetaData.js';
import type { PreparedStatement, Resolver } from './Resolver.js';
import type { Sql } from './Sql.js';
export declare class QueryData {
resolver?: Resolver;
first?: boolean;
}
type Exec = Function;
declare class Executable implements PromiseLike {
#private;
private brand;
constructor(exec: Exec);
[Symbol.iterator](): Generator, Result, unknown>;
run(): Deliver;
then(onfulfilled?: ((value: Result) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: unknown) => TResult2 | PromiseLike) | undefined | null): Promise;
catch(onrejected?: ((reason: unknown) => TResult | PromiseLike) | undefined | null): Promise;
finally(onfinally?: (() => void) | undefined | null): Promise;
}
export declare class BatchQuery extends Executable, Meta> {
constructor(queryResolver: Resolver, queries: Array);
}
export declare abstract class SingleQuery extends Executable {
#private;
readonly [internalData]: QueryData;
abstract [internalQuery]: Sql;
constructor(data: QueryData);
all>(this: SingleQuery, db?: HasResolver): Deliver;
get>(this: SingleQuery, db?: HasResolver): Deliver;
get(db?: HasResolver): Deliver;
run(db?: HasResolver): Deliver;
prepare>(name?: string): PreparedQuery;
toSQL(db?: HasResolver): {
sql: string;
params: Array;
};
}
export interface PreparedQuery, Meta extends QueryMeta> extends PreparedStatement {
all>(this: PreparedQuery, inputs?: Inputs): Deliver;
get(inputs?: Inputs): Deliver;
get>(this: PreparedQuery, inputs?: Inputs): Deliver;
run(inputs?: Inputs): Deliver;
execute(inputs?: Inputs): Promise;
free(): void;
}
export {};