From a377448de3c38581c68666ef94d83b478ac15bb4 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Sun, 16 Mar 2025 09:31:00 +0100 Subject: [PATCH] Add readme --- README.md | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9efb3dd --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# MySQLite + +A Go library that provides a convenient wrapper around SQLite with additional functionality for database management, migrations, and transactions. + +## Features + +- Simple and intuitive SQLite database connection management +- Thread-safe database operations with built-in locking mechanism +- Support for database migrations +- Transaction management +- Built on top of [zombiezen.com/go/sqlite](https://pkg.go.dev/zombiezen.com/go/sqlite) + +## Installation + +```bash +go get gitea.seeseepuff.be/seeseemelk/mysqlite +``` + +## Usage + +### Opening a Database Connection + +```go +import "gitea.seeseepuff.be/seeseemelk/mysqlite" + +// Open an in-memory database +db, err := mysqlite.OpenDb(":memory:") +if err != nil { + // Handle error +} +defer db.Close() + +// Open a file-based database +db, err := mysqlite.OpenDb("path/to/database.db") +if err != nil { + // Handle error +} +defer db.Close() +``` + +### Executing Queries + +The library provides methods for executing SQL queries and managing transactions: + +```go +// Execute a simple query +err := db.Query("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)").Exec() + +// Use transactions +tx, err := db.BeginTransaction() +if err != nil { + // Handle error +} + +// Perform operations within transaction +// ... + +// Commit or rollback +err = tx.Commit() // or tx.Rollback() +``` + +### Database Migrations + +The library includes support for SQL-based migrations. Migrations are SQL files stored in a directory and are executed in order based on their filename prefix: + +1. Create a directory for your migrations (e.g., `migrations/`) +2. Add numbered SQL migration files: + ``` + migrations/ + ├── 1_initial.sql + ├── 2_add_users.sql + ├── 3_add_posts.sql + ``` +3. Embed the migrations in your Go code: + ```go + import "embed" + + //go:embed migrations/*.sql + var migrations embed.FS + + // Apply migrations + err := db.MigrateDb(migrations, "migrations") + if err != nil { + // Handle error + } + ``` + +Each migration file should contain valid SQL statements. The migrations are executed in order and are tracked internally to ensure they only run once. + +## Requirements + +- Go 1.24 or higher \ No newline at end of file