36 lines
2.5 KiB
Markdown
36 lines
2.5 KiB
Markdown
# 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.
|