import { FMTable, InferSchemaOutputFromFMTable } from '../orm/table.js';
import { FMODataLayer } from '../services.js';
import { ConditionallyWithSpecialColumns, ExecutableBuilder, ExecuteMethodOptions, ExecuteOptions, NormalizeIncludeSpecialColumns, Result } from '../types.js';
import { RecordLocator } from './builders/mutation-helpers.js';
import { QueryBuilder } from './query-builder.js';
/**
 * Initial update builder returned from EntitySet.update(data)
 * Requires calling .byId() or .where() before .execute() is available
 */
export declare class UpdateBuilder<Occ extends FMTable<any, any>, ReturnPreference extends "minimal" | "representation" = "minimal", DatabaseIncludeSpecialColumns extends boolean = false> {
    private readonly table;
    private readonly data;
    private readonly returnPreference;
    private readonly layer;
    private readonly config;
    constructor(config: {
        occurrence: Occ;
        layer: FMODataLayer;
        data: Partial<InferSchemaOutputFromFMTable<Occ>>;
        returnPreference: ReturnPreference;
    });
    /**
     * Update a single record by ID
     * Returns updated count by default, or full record if returnFullRecord was set to true
     */
    byId(id: string | number): ExecutableUpdateBuilder<Occ, true, ReturnPreference, DatabaseIncludeSpecialColumns>;
    /**
     * Update a single record by ROWID
     */
    byRowId(rowId: number): ExecutableUpdateBuilder<Occ, true, ReturnPreference>;
    /**
     * Update records matching a filter query
     * Returns updated count by default, or full record if returnFullRecord was set to true
     * @param fn Callback that receives a QueryBuilder for building the filter
     */
    where(fn: (q: QueryBuilder<Occ>) => QueryBuilder<Occ>): ExecutableUpdateBuilder<Occ, true, ReturnPreference, DatabaseIncludeSpecialColumns>;
}
/**
 * Executable update builder - has execute() method
 * Returned after calling .byId() or .where()
 * Can return either updated count or full record based on returnFullRecord option
 */
export declare class ExecutableUpdateBuilder<Occ extends FMTable<any, any>, _IsByFilter extends boolean, ReturnPreference extends "minimal" | "representation" = "minimal", DatabaseIncludeSpecialColumns extends boolean = false> implements ExecutableBuilder<ReturnPreference extends "minimal" ? {
    updatedCount: number;
} : ConditionallyWithSpecialColumns<InferSchemaOutputFromFMTable<Occ>, DatabaseIncludeSpecialColumns, false>> {
    private readonly table;
    private readonly data;
    private readonly mode;
    private readonly recordLocator?;
    private readonly queryBuilder?;
    private readonly returnPreference;
    private readonly layer;
    private readonly config;
    constructor(config: {
        occurrence: Occ;
        layer: FMODataLayer;
        data: Partial<InferSchemaOutputFromFMTable<Occ>>;
        mode: "byId" | "byFilter";
        recordLocator?: RecordLocator;
        queryBuilder?: QueryBuilder<Occ>;
        returnPreference: ReturnPreference;
    });
    execute<EO extends ExecuteOptions>(options?: ExecuteMethodOptions<EO>): Promise<Result<ReturnPreference extends "minimal" ? {
        updatedCount: number;
    } : ConditionallyWithSpecialColumns<InferSchemaOutputFromFMTable<Occ>, NormalizeIncludeSpecialColumns<EO["includeSpecialColumns"], DatabaseIncludeSpecialColumns>, false>>>;
    getRequestConfig(): {
        method: string;
        url: string;
        body?: any;
    };
    toRequest(baseUrl: string, options?: ExecuteOptions): Request;
    processResponse<EO extends ExecuteOptions | undefined = undefined>(response: Response, options?: EO): Promise<Result<ReturnPreference extends "minimal" ? {
        updatedCount: number;
    } : ConditionallyWithSpecialColumns<InferSchemaOutputFromFMTable<Occ>, NormalizeIncludeSpecialColumns<EO extends ExecuteOptions ? EO["includeSpecialColumns"] : undefined, DatabaseIncludeSpecialColumns>, false>>>;
}
