/** * @module Utilities */ /** * Represents a prepared SQLite statement that can be executed with parameters. * Provides three execution modes: fetching all results, running a mutation, * or lazily iterating results one row at a time. * * IMPORT_PATH: `"@daiso-tech/core/utilities"` * @group Contracts */ export type ISqliteStatement = { /** * Whether this statement is a read-only query (SELECT). */ readonly reader: boolean; /** * Executes the statement and returns all result rows as an array. * @param parameters - Positional bind parameters for the SQL statement. * @returns An array of row objects, or an empty array if no rows match. */ all(parameters: ReadonlyArray): Array; /** * Executes a mutation statement (INSERT, UPDATE, DELETE) and returns metadata. * @param parameters - Positional bind parameters for the SQL statement. * @returns An object with the number of rows affected and the last inserted row ID. */ run(parameters: ReadonlyArray): { /** * Number of rows affected by the statement. */ changes: number | bigint; /** * Row ID of the last inserted row. `0` if no row was inserted. */ lastInsertRowid: number | bigint; }; /** * Executes the statement and returns a lazy iterator over result rows. * Useful for large result sets where loading all rows into memory at once is undesirable. * @param parameters - Positional bind parameters for the SQL statement. * @returns A lazy iterator that yields one row at a time. */ iterate(parameters: ReadonlyArray): IterableIterator; }; /** * Minimal abstraction over a SQLite database connection. * Allows preparing and executing SQL statements. * * IMPORT_PATH: `"@daiso-tech/core/utilities"` * @group Contracts */ export type ISqliteDatabase = { /** * Closes the database connection and releases all associated resources. * After calling this method the database instance must not be used again. */ close(): void; /** * Compiles the given SQL string into a reusable prepared statement. * @param sql - The SQL query or command to prepare. * @returns A prepared {@link ISqliteStatement | `ISqliteStatement`} ready for execution. */ prepare(sql: string): ISqliteStatement; };