# Features of the `sqlite` Go Package

This is a summary of the key features provided by the `sqlite` package, based on an analysis of `database.go`.

*   **Simplified Database Lifecycle Management**:
    *   Provides straightforward functions to `New`, `Open`, `OpenInMemory`, and `Close` SQLite databases.
    *   Automatically creates a new database file if one doesn't exist, pre-configured with performance-oriented `PRAGMA` settings like `WAL` (Write-Ahead Logging) mode.

*   **Generic Data Handling**:
    *   Uses a `Record` type (`map[string]any`) to represent database rows, allowing for flexible interaction with tables without needing to define a struct for each one.

*   **High-Level CRUD Operations**:
    *   Offers simple methods for common database tasks:
        *   `ReadRecords`: Execute any `SELECT` query with parameters.
        *   `GetRecord`: Fetch a single record by its key.
        *   `UpsertRecord`: A powerful function to either `INSERT` a new record or `UPDATE` an existing one if a conflict on the primary key occurs. This is handled atomically in the database using `INSERT ... ON CONFLICT`.
        *   `DeleteRecord`: Remove a record by its key.

*   **Fluent Transaction API**:
    *   Implements a chainable transaction interface that simplifies running multiple operations in a single transaction.
    *   Example: `db.Begin().Next(action1).Next(action2).End()`
    *   The `End()` method automatically commits on success or rolls back if any step in the chain fails, ensuring data integrity.

*   **Database Introspection**:
    *   Includes helper functions to query database metadata, such as `TableList()` to get all table names, `Version()` for the SQLite engine version, and `UserVersion()` to manage schema versions.

*   **Abstraction and Safety**:
    *   Abstracts away the boilerplate of `database/sql` row scanning into `Rows2record` and `Rows2records` helpers.
    *   Uses parameterized queries to prevent SQL injection vulnerabilities for data values.

*   **Utility Functions**:
    *   Provides a generic `Value` function to safely extract and type-assert a value from a `Record`.
    *   Includes a `NoRowsOk` helper to gracefully handle queries that are expected to sometimes return no results, preventing "no rows found" from being treated as a critical error.

This package is designed as a high-level wrapper around Go's standard `database/sql` library, specifically tailored for SQLite to make common database operations more convenient and less error-prone.
