Comments (1)
Wanted to give an update: I am slowly making some progress on this feature. I've made some decent progress on sketching out the API and a proof-of-concept implementation, but I don't have something that's ready for testing yet.
The challenge I've identified with this API is that unlike other SQLite extension APIs, there (understandably) seems to be a strong use case for wrapping other VFSes, including those that are implemented in (transpiled) C. This has led me to a somewhat split API where a Go implementation gets converted into a VFS
object during registration.
// VFSImplementation is the set of parameters to [NewVFS]
// that enables creation of custom [VFS] objects.
type VFSImplementation struct {
Name string
MaxPathLength int
Open func(name string, open VFSOpenFlags) (File, VFSOpenFlags, error)
FullPathname func(name string) (string, error)
ReadRand func(p []byte) (n int, err error)
Sleep func(d time.Duration) error
Now func() (time.Time, error)
// etc.
}
// File is the interface for files in [VFSImplementation].
type File interface {
io.ReaderAt
Size() (int64, error)
io.Closer
}
// A VFS is a handle to an [operating system interface].
//
// [operating system interface]: https://www.sqlite.org/vfs.html
type VFS struct { /* ... */ }
// NewVFS creates and registers a [VFS] from a Go implementation.
func NewVFS(impl *VFSImplementation) (*VFS, error)
// FindVFS returns the VFS with the given name
// or the default VFS if the name is the empty string.
// If no such VFS exists, FindVFS returns nil.
func FindVFS(name string) *VFS
// Name returns the name of the VFS.
func (vfs *VFS) Name() string
// RegisterDefault marks the VFS as the one used by default in [OpenConn].
func (vfs *VFS) RegisterDefault() error
// Unregister removes the VFS from the global registry.
// Once a VFS has been unregistered, it must no longer be used.
func (vfs *VFS) Unregister() error
// Open opens the file with the given name.
// TODO: Add details about calling FullPathname etc.
func (vfs *VFS) Open(name string, open VFSOpenFlags) (*VFSFile, VFSOpenFlags, error)
func (vfs *VFS) FullPathname(name string) (string, error)
// and so on for VFS methods...
// VFSFile is a file returned by [VFS.Open].
type VFSFile struct { /* ... */ }
// VFSFile will have various io-related methods.
from go-sqlite.
Related Issues (20)
- [UNHELPFUL ERROR MSG] obscure panic on closed connection HOT 1
- Possible to bind arrays, for use in e.g. `IN (?)` queries? HOT 1
- should sqlitex.Save() check *perr for a nil pointer inside the error, not just *perr == nil ?
- how to use SetCollation HOT 1
- ability to customize connection creatd by sqlitex.Pool HOT 1
- error creating a transaction: sqlitex.Exec: sqlite: clear bindings: interrupted
- Pool.Close blocks indefinitely when a panic happens during iteration of statement rows
- Add a Pool interface? HOT 2
- BlockOnBusy backoff period is long HOT 5
- Undefined symbols in sqlite v.1.29.0 HOT 2
- Support pointer-passing
- JSONB support
- sqlitex.Pool.Get should be able to return an error HOT 3
- Extented error codes aren't reported properly HOT 1
- Document pattern of checking for zero rows HOT 6
- file:memory does not appear to work HOT 4
- INSERT multiple VALUES? HOT 2
- Stmt.findBindName shoud be public HOT 3
- Unexpected error: "migrate database: sqlite: step: database is locked"
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-sqlite.