@@ -8,17 +8,21 @@ import (
8
8
"github.com/ncruces/go-sqlite3/vfs"
9
9
)
10
10
11
+ const vfsName = "github.com/ncruces/go-sqlite3/ext/serdes.sliceVFS"
12
+
11
13
func init () {
12
14
vfs .Register (vfsName , sliceVFS {})
13
15
}
14
16
17
+ var fileToOpen = make (chan * sliceFile , 1 )
18
+
15
19
// Serialize backs up a database into a byte slice.
16
20
//
17
21
// https://sqlite.org/c3ref/serialize.html
18
22
func Serialize (db * sqlite3.Conn , schema string ) ([]byte , error ) {
19
23
var file sliceFile
20
24
fileToOpen <- & file
21
- err := db .Backup (schema , "file:db?vfs=" + vfsName )
25
+ err := db .Backup (schema , "file:serdes. db?vfs=" + vfsName )
22
26
return file .data , err
23
27
}
24
28
@@ -38,21 +42,21 @@ func Serialize(db *sqlite3.Conn, schema string) ([]byte, error) {
38
42
// ["reader"]: https://pkg.go.dev/github.com/ncruces/go-sqlite3/vfs/readervfs
39
43
func Deserialize (db * sqlite3.Conn , schema string , data []byte ) error {
40
44
fileToOpen <- & sliceFile {data }
41
- return db .Restore (schema , "file:db?vfs=" + vfsName )
45
+ return db .Restore (schema , "file:serdes. db?vfs=" + vfsName )
42
46
}
43
47
44
- var fileToOpen = make (chan * sliceFile , 1 )
45
-
46
- const vfsName = "github.com/ncruces/go-sqlite3/ext/deserialize.sliceVFS"
47
-
48
48
type sliceVFS struct {}
49
49
50
50
func (sliceVFS ) Open (name string , flags vfs.OpenFlag ) (vfs.File , vfs.OpenFlag , error ) {
51
- if flags & vfs .OPEN_MAIN_DB == 0 {
52
- // notest // OPEN_MEMORY
51
+ if flags & vfs .OPEN_MAIN_DB == 0 || name != "serdes.db" {
53
52
return nil , flags , sqlite3 .CANTOPEN
54
53
}
55
- return <- fileToOpen , flags | vfs .OPEN_MEMORY , nil
54
+ select {
55
+ case file := <- fileToOpen :
56
+ return file , flags | vfs .OPEN_MEMORY , nil
57
+ default :
58
+ return nil , flags , sqlite3 .MISUSE
59
+ }
56
60
}
57
61
58
62
func (sliceVFS ) Delete (name string , dirSync bool ) error {
@@ -61,7 +65,7 @@ func (sliceVFS) Delete(name string, dirSync bool) error {
61
65
}
62
66
63
67
func (sliceVFS ) Access (name string , flag vfs.AccessFlag ) (bool , error ) {
64
- return name == "db" , nil
68
+ return name == "serdes. db" , nil
65
69
}
66
70
67
71
func (sliceVFS ) FullPathname (name string ) (string , error ) {
0 commit comments