Files
sqlite3/driver_test.go

76 lines
1.3 KiB
Go
Raw Normal View History

2023-02-27 13:45:32 +00:00
package sqlite3_test
import (
"context"
"database/sql"
"fmt"
"log"
2023-03-01 10:34:08 +00:00
"os"
2023-02-27 13:45:32 +00:00
"github.com/ncruces/go-sqlite3"
_ "github.com/ncruces/go-sqlite3/driver"
_ "github.com/ncruces/go-sqlite3/embed"
)
2023-03-01 10:34:08 +00:00
var db *sql.DB
2023-02-28 14:50:15 +00:00
2023-02-27 13:45:32 +00:00
func ExampleDriverConn() {
2023-03-01 10:34:08 +00:00
var err error
db, err = sql.Open("sqlite3", "demo.db")
2023-02-27 13:45:32 +00:00
if err != nil {
log.Fatal(err)
}
2023-03-01 10:34:08 +00:00
defer os.Remove("demo.db")
2023-03-05 14:18:22 +00:00
defer db.Close()
2023-03-01 10:34:08 +00:00
ctx := context.Background()
2023-02-27 13:45:32 +00:00
conn, err := db.Conn(ctx)
if err != nil {
log.Fatal(err)
}
defer conn.Close()
_, err = conn.ExecContext(ctx, `CREATE TABLE IF NOT EXISTS test (col)`)
if err != nil {
log.Fatal(err)
}
2023-03-01 10:34:08 +00:00
res, err := conn.ExecContext(ctx, `INSERT INTO test VALUES (?)`, sqlite3.ZeroBlob(11))
2023-02-27 13:45:32 +00:00
if err != nil {
log.Fatal(err)
}
2023-03-01 10:34:08 +00:00
id, err := res.LastInsertId()
2023-02-27 13:45:32 +00:00
if err != nil {
log.Fatal(err)
}
err = conn.Raw(func(driverConn any) error {
conn := driverConn.(sqlite3.DriverConn)
2023-03-08 16:29:29 +00:00
savept := conn.Savepoint()
defer savept.Release(&err)
2023-02-27 13:45:32 +00:00
blob, err := conn.OpenBlob("main", "test", "col", id, true)
if err != nil {
return err
}
defer blob.Close()
_, err = fmt.Fprint(blob, "Hello BLOB!")
return err
})
if err != nil {
log.Fatal(err)
}
var msg string
err = conn.QueryRowContext(ctx, `SELECT col FROM test`).Scan(&msg)
if err != nil {
log.Fatal(err)
}
fmt.Println(msg)
// Output:
// Hello BLOB!
}