import type { ColumnNamingStrategy, MetaData } from "@metaobjectsdev/metadata"; import type { WhereClause, PrimitiveValue, Row, SelectSpec, InsertSpec, UpdateSpec, DeleteSpec, CountSpec } from "./persistence-driver.js"; export { resolveTableName } from "@metaobjectsdev/metadata"; export type Filter = Record | { $and: Filter[]; }; export type FilterValue = string | number | boolean | null | (string | number)[] | { $eq?: string | number | boolean | null; $ne?: string | number | boolean | null; $gt?: string | number; $gte?: string | number; $lt?: string | number; $lte?: string | number; $like?: string; $in?: (string | number)[]; $isNull?: boolean; }; export interface QueryOpts { orderBy?: [string, "asc" | "desc"] | [string, "asc" | "desc"][]; limit?: number; offset?: number; } export declare function resolvePkFields(entity: MetaData): string[]; /** * Returns null when `filter` has no clauses ({} or { $and: [] }) — meaning "match all" * (callers should treat null the same as omitting the where clause entirely). */ export declare function compileFilter(entity: MetaData, filter: Filter, strategy?: ColumnNamingStrategy): WhereClause | null; /** If `projectedFields` is provided, only those fields are selected (PK is auto-added). */ export declare function buildSelectSpec(entity: MetaData, filter: Filter | undefined, opts: QueryOpts, projectedFields?: string[], strategy?: ColumnNamingStrategy): SelectSpec; export declare function buildCountSpec(entity: MetaData, filter: Filter | undefined, strategy?: ColumnNamingStrategy): CountSpec; export declare function buildInsertSpec(entity: MetaData, data: Row, strategy?: ColumnNamingStrategy): InsertSpec; /** * A TPH discriminator scope: AND'd into the by-id where so a subtype-scoped * update/delete only matches rows of that subtype (a row of a different * subtype is invisible → not found). `field` is the discriminator FIELD name; * the column is resolved via the entity's naming strategy. */ export interface DiscriminatorScope { field: string; value: PrimitiveValue; } export declare function buildUpdateSpec(entity: MetaData, data: Row, id: unknown, strategy?: ColumnNamingStrategy, scope?: DiscriminatorScope): UpdateSpec; export declare function buildDeleteSpec(entity: MetaData, id: unknown, strategy?: ColumnNamingStrategy, scope?: DiscriminatorScope): DeleteSpec; //# sourceMappingURL=query-builder.d.ts.map