import type { QueryOrderBy } from './order-by.js';
import type { FieldPathByShape, SchemaShape } from './schema.js';
import { type ComparisonWhereValue, type PredicateOp, type QueryWhere, type WhereComparisonOp, type WhereExpr } from './where.js';
export interface QuerySchema<TShape extends SchemaShape = SchemaShape> {
    where?: QueryWhere<TShape> | null;
    orderBy?: QueryOrderBy<TShape>[];
    limit?: number;
    offset?: number;
    mate?: Record<string, any>;
    table?: string;
}
interface AgnosticQuery<TShape extends SchemaShape = SchemaShape> {
    toJSON(): QuerySchema<TShape>;
    where(cb: (eb: WhereExpr<TShape>) => WhereExpr<TShape>): AgnosticQuery<TShape>;
    where<Col extends FieldPathByShape<TShape> | (keyof TShape & string), Op extends WhereComparisonOp>(col: Col, op: Op, value: ComparisonWhereValue<TShape, Col, Op>): AgnosticQuery<TShape>;
    where<Col extends FieldPathByShape<TShape> | (keyof TShape & string), Op extends PredicateOp>(col: Col, op: Op): AgnosticQuery<TShape>;
    where(where?: QueryWhere<TShape> | null): AgnosticQuery<TShape>;
    orderBy<Col extends FieldPathByShape<TShape> | (keyof TShape & string)>(col: Col, direction?: 'asc' | 'desc'): AgnosticQuery<TShape>;
    limit(value?: number): AgnosticQuery<TShape>;
    offset(value?: number): AgnosticQuery<TShape>;
}
export declare const aq: <TShape extends SchemaShape = SchemaShape>(state?: QuerySchema<TShape>) => AgnosticQuery<TShape>;
export {};
