/**
 * Statement
 *
 * High-level wrapper around NativeStatement providing a clean API.
 * Handles parameter binding, row conversion, and result collection.
 */
import type { AsyncLock } from './AsyncLock';
import type { NativeConnection, NativeStatement, BindParams, Row, RunResult } from './types';
/**
 * Prepared SQL statement
 */
export declare class Statement {
    private _statement;
    private _connection;
    private _execLock;
    private _finalized;
    private _extraIo?;
    constructor(statement: NativeStatement, connection: NativeConnection, execLock: AsyncLock | null, extraIo?: () => Promise<void>);
    /**
     * Bind parameters to the statement
     *
     * @param params - Parameters to bind (array, object, or single value)
     * @returns this for chaining
     */
    bind(...params: BindParams[]): this;
    /**
     * Bind positional parameters (1-indexed)
     *
     * @param params - Array of values to bind
     */
    private bindPositional;
    /**
     * Bind named parameters
     *
     * @param params - Object with named parameters
     */
    private bindNamed;
    /**
     * Bind a single value at a position
     *
     * @param position - 1-indexed position
     * @param value - Value to bind
     */
    private bindValue;
    /**
     * Execute statement without returning rows (for INSERT, UPDATE, DELETE)
     *
     * @param params - Optional parameters to bind
     * @returns Result with changes and lastInsertRowid
     */
    run(...params: BindParams[]): Promise<RunResult>;
    /**
     * Execute without acquiring the lock (caller already holds it).
     * Used by Database.exec() and Transaction which acquire the lock once.
     */
    rawRun(): Promise<RunResult>;
    private _runInner;
    /**
     * Execute statement handling potential IO (for partial sync)
     * Matches Python's _run_execute_with_io pattern
     *
     * @returns Execution result
     */
    private executeWithIo;
    /**
     * Step statement once handling potential IO (for partial sync)
     * Matches Python's _step_once_with_io pattern
     *
     * @returns Status code
     */
    private stepWithIo;
    /**
     * Execute statement and return first row
     *
     * @param params - Optional parameters to bind
     * @returns First row or undefined
     */
    get(...params: BindParams[]): Promise<Row | undefined>;
    /**
     * Execute statement and return all rows
     *
     * @param params - Optional parameters to bind
     * @returns Array of rows
     */
    all(...params: BindParams[]): Promise<Row[]>;
    /**
     * Read current row into an object
     *
     * @returns Row object with column name keys
     */
    private readRow;
    /**
     * Read value at column index
     *
     * @param index - Column index
     * @returns Column value
     */
    private readColumnValue;
    /**
     * Reset statement for re-execution
     *
     * @returns this for chaining
     */
    reset(): this;
    /**
     * Finalize and release statement resources
     */
    finalize(): Promise<void>;
    /**
     * Check if statement has been finalized
     */
    get finalized(): boolean;
}
//# sourceMappingURL=Statement.d.ts.map