status-go/vendor/zombiezen.com/go/sqlite/README.md

93 lines
3.0 KiB
Markdown
Raw Permalink Normal View History

2022-03-10 09:44:48 +00:00
# `zombiezen.com/go/sqlite`
[![Go Reference](https://pkg.go.dev/badge/zombiezen.com/go/sqlite.svg)][reference docs]
This package provides a low-level Go interface to [SQLite 3][]. It is a fork of
[`crawshaw.io/sqlite`][] that uses [`modernc.org/sqlite`][], a CGo-free SQLite
package. It aims to be a mostly drop-in replacement for
`crawshaw.io/sqlite`.
This package deliberately does not provide a `database/sql` driver. See
[David Crawshaw's rationale][] for an in-depth explanation. If you want to use
`database/sql` with SQLite without CGo, use `modernc.org/sqlite` directly.
[`crawshaw.io/sqlite`]: https://github.com/crawshaw/sqlite
[David Crawshaw's rationale]: https://crawshaw.io/blog/go-and-sqlite
[`modernc.org/sqlite`]: https://pkg.go.dev/modernc.org/sqlite
[reference docs]: https://pkg.go.dev/zombiezen.com/go/sqlite
[SQLite 3]: https://sqlite.org/
## Features
- Full SQLite functionality via `modernc.org/sqlite`, an automatically generated
translation of the original C source code of SQLite into Go
- Builds with `CGO_ENABLED=0`, allowing cross-compiling and data race detection
- Allows access to SQLite-specific features like [blob I/O][] and
[user-defined functions][]
- Includes a simple [schema migration package][]
- Utilities for [running embedded SQL scripts][ExecScriptFS] using the
[Go 1.16 embedding feature][]
- A [`go fix`-like tool][migration docs] for migrating existing code using
`crawshaw.io/sqlite`
- A [simple REPL][] for debugging
[blob I/O]: https://pkg.go.dev/zombiezen.com/go/sqlite#Blob
[ExecScriptFS]: https://pkg.go.dev/zombiezen.com/go/sqlite/sqlitex#ExecScriptFS
[Go 1.16 embedding feature]: https://pkg.go.dev/embed
[migration docs]: cmd/zombiezen-sqlite-migrate/README.md
[schema migration package]: https://pkg.go.dev/zombiezen.com/go/sqlite/sqlitemigration
[simple REPL]: https://pkg.go.dev/zombiezen.com/go/sqlite/shell
[user-defined functions]: https://pkg.go.dev/zombiezen.com/go/sqlite#Conn.CreateFunction
## Install
```shell
go get zombiezen.com/go/sqlite
```
While this library does not use CGo, make sure that you are building for one of
the [supported architectures][].
[supported architectures]: https://pkg.go.dev/modernc.org/sqlite#hdr-Supported_platforms_and_architectures
## Getting Started
```go
import (
"fmt"
"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
)
// ...
// Open an in-memory database.
conn, err := sqlite.OpenConn(":memory:", sqlite.OpenReadWrite)
if err != nil {
return err
}
defer conn.Close()
// Execute a query.
err = sqlitex.ExecTransient(conn, "SELECT 'hello, world';", func(stmt *sqlite.Stmt) error {
fmt.Println(stmt.ColumnText(0))
return nil
})
if err != nil {
return err
}
```
If you're creating a new application, see the [package examples][] or the
[reference docs][].
If you're looking to switch existing code that uses `crawshaw.io/sqlite`, take
a look at the [migration docs][].
[package examples]: https://pkg.go.dev/zombiezen.com/go/sqlite#pkg-examples
## License
[ISC](LICENSE)