mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-03 00:14:21 +01:00
72 lines
1.7 KiB
Markdown
72 lines
1.7 KiB
Markdown
# Limbo driver for Go's `database/sql` library
|
|
|
|
|
|
**NOTE:** this is currently __heavily__ W.I.P and is not yet in a usable state.
|
|
|
|
This driver uses the awesome [purego](https://github.com/ebitengine/purego) library to call C (in this case Rust with C ABI) functions from Go without the use of `CGO`.
|
|
|
|
|
|
## To use: (_UNSTABLE_ testing or development purposes only)
|
|
|
|
### Linux | MacOS
|
|
|
|
_All commands listed are relative to the bindings/go directory in the limbo repository_
|
|
|
|
```
|
|
cargo build --package limbo-go
|
|
|
|
# Your LD_LIBRARY_PATH environment variable must include limbo's `target/debug` directory
|
|
|
|
export LD_LIBRARY_PATH="/path/to/limbo/target/debug:$LD_LIBRARY_PATH"
|
|
|
|
```
|
|
|
|
## Windows
|
|
|
|
```
|
|
cargo build --package limbo-go
|
|
|
|
# You must add limbo's `target/debug` directory to your PATH
|
|
# or you could built + copy the .dll to a location in your PATH
|
|
# or just the CWD of your go module
|
|
|
|
cp path\to\limbo\target\debug\lib_limbo_go.dll .
|
|
|
|
go test
|
|
|
|
```
|
|
**Temporarily** you may have to clone the limbo repository and run:
|
|
|
|
`go mod edit -replace github.com/tursodatabase/limbo=/path/to/limbo/bindings/go`
|
|
|
|
```go
|
|
import (
|
|
"fmt"
|
|
"database/sql"
|
|
_"github.com/tursodatabase/limbo"
|
|
)
|
|
|
|
func main() {
|
|
conn, err := sql.Open("sqlite3", ":memory:")
|
|
if err != nil {
|
|
fmt.Printf("Error: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
sql := "CREATE table go_limbo (foo INTEGER, bar TEXT)"
|
|
_ = conn.Exec(sql)
|
|
|
|
sql = "INSERT INTO go_limbo (foo, bar) values (?, ?)"
|
|
stmt, _ := conn.Prepare(sql)
|
|
defer stmt.Close()
|
|
_ = stmt.Exec(42, "limbo")
|
|
rows, _ := conn.Query("SELECT * from go_limbo")
|
|
defer rows.Close()
|
|
for rows.Next() {
|
|
var a int
|
|
var b string
|
|
_ = rows.Scan(&a, &b)
|
|
fmt.Printf("%d, %s", a, b)
|
|
}
|
|
}
|
|
```
|