import { type HasSql, internalData } from './Internal.js';
import type { IsPostgres, QueryMeta } from './MetaData.js';
import type { QueryData, SingleQuery } from './Queries.js';
import type { SelectionInput, SelectionRow } from './Selection.js';
import type { Table, TableDefinition } from './Table.js';
import { type CTE } from './query/CTE.js';
import { DeleteFrom } from './query/Delete.js';
import { InsertInto } from './query/Insert.js';
import type { DeleteQuery, FromGuard, FromQuery, FromRow, InsertQuery, QueryBase, SelectionQuery, UpdateQuery } from './query/Query.js';
import type { UnionBase, WithSelection, WithoutSelection } from './query/Select.js';
import { UpdateTable } from './query/Update.js';
declare class BuilderBase {
readonly [internalData]: QueryData & QueryBase;
constructor(data?: QueryData & QueryBase);
$query(select: SelectionQuery): SingleQuery, Meta>;
$query(from: FromQuery): SingleQuery, Meta>;
$query(insert: InsertQuery): SingleQuery, Meta>;
$query(remove: DeleteQuery): SingleQuery, Meta>;
$query(update: UpdateQuery): SingleQuery, Meta>;
select(): WithoutSelection;
select(select: Input): WithSelection;
selectDistinct(): WithoutSelection;
selectDistinct(selection: Input): WithSelection;
selectDistinctOn(this: Builder, columns: Array): WithoutSelection;
selectDistinctOn(this: Builder, columns: Array, selection: Input): WithSelection;
update(table: Table): UpdateTable;
insert(into: Table): InsertInto;
delete(from: Table): DeleteFrom;
}
export declare class Builder extends BuilderBase {
$with(cteName: string): {
as(query: UnionBase): CTE;
};
with(...definitions: Array): BuilderBase;
withRecursive(...definitions: Array): BuilderBase;
}
export {};