Documentation
¶
Overview ¶
Package readervfs implements an SQLite VFS for immutable databases.
The "reader" vfs.VFS permits accessing any io.ReaderAt as an immutable SQLite database.
Importing package readervfs registers the VFS:
import _ "github.com/ncruces/go-sqlite3/vfs/readervfs"
Example (Embed) ¶
package main import ( "database/sql" "fmt" "log" "strings" _ "embed" "github.com/ncruces/go-sqlite3/util/ioutil" "github.com/ncruces/go-sqlite3/vfs/readervfs" _ "github.com/ncruces/go-sqlite3/driver" _ "github.com/ncruces/go-sqlite3/embed" ) //go:embed testdata/test.db var testDB string func main() { readervfs.Create("test.db", ioutil.NewSizeReaderAt(strings.NewReader(testDB))) defer readervfs.Delete("test.db") db, err := sql.Open("sqlite3", "file:test.db?vfs=reader") if err != nil { log.Fatal(err) } defer db.Close() rows, err := db.Query(`SELECT id, name FROM users`) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var id, name string err = rows.Scan(&id, &name) if err != nil { log.Fatal(err) } fmt.Printf("%s %s\n", id, name) } }
Output: 0 go 1 zig 2 whatever
Example (Http) ¶
package main import ( "database/sql" "fmt" "log" _ "embed" "github.com/ncruces/go-sqlite3/vfs/readervfs" "github.com/psanford/httpreadat" _ "github.com/ncruces/go-sqlite3/driver" _ "github.com/ncruces/go-sqlite3/embed" ) func main() { readervfs.Create("demo.db", httpreadat.New("https://sanford.io/demo.db")) defer readervfs.Delete("demo.db") db, err := sql.Open("sqlite3", "file:demo.db?vfs=reader") if err != nil { log.Fatal(err) } defer db.Close() magname := map[int]string{ 3: "thousand", 6: "million", 9: "billion", } rows, err := db.Query(` SELECT period, data_value, magntude, units FROM csv WHERE period > '2010' LIMIT 10`) if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var period, units string var value int64 var mag int err = rows.Scan(&period, &value, &mag, &units) if err != nil { log.Fatal(err) } fmt.Printf("%s: %d %s %s\n", period, value, magname[mag], units) } }
Output: 2010.03: 17463 million Dollars 2010.06: 17260 million Dollars 2010.09: 15419 million Dollars 2010.12: 17088 million Dollars 2011.03: 18516 million Dollars 2011.06: 18835 million Dollars 2011.09: 16390 million Dollars 2011.12: 18748 million Dollars 2012.03: 18477 million Dollars 2012.06: 18270 million Dollars
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Create ¶
func Create(name string, reader ioutil.SizeReaderAt)
Create creates an immutable database from reader. The caller should ensure that data from reader does not mutate, otherwise SQLite might return incorrect query results and/or sqlite3.CORRUPT errors.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.