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 ( "bytes" "database/sql" "fmt" "log" _ "embed" "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 []byte func main() { readervfs.Create("test.db", readervfs.NewSizeReaderAt(bytes.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://www.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 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 ¶
type SizeReaderAt ¶
A SizeReaderAt is a ReaderAt with a Size method. Use NewSizeReaderAt to adapt different Size interfaces.
func NewSizeReaderAt ¶
func NewSizeReaderAt(r io.ReaderAt) SizeReaderAt
NewSizeReaderAt returns a SizeReaderAt given an io.ReaderAt that implements one of:
- Size() (int64, error)
- Size() int64
- Len() int
- Stat() (fs.FileInfo, error)
- Seek(offset int64, whence int) (int64, error)
Click to show internal directories.
Click to hide internal directories.