Skip to content

Commit 5b53687

Browse files
committed
Blob I/O: insufficient space errors for Write, raw connection callback
1 parent 7f0a6fb commit 5b53687

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

blob_io.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,18 @@ func (s *SQLiteBlob) Read(b []byte) (n int, err error) {
8787
// Write implements the io.Writer interface.
8888
func (s *SQLiteBlob) Write(b []byte) (n int, err error) {
8989
if s.offset >= s.size {
90-
return 0, io.EOF
90+
return 0, fmt.Errorf("sqlite3.SQLiteBlob.Write: insufficient space in %d-byte blob", s.size)
9191
}
9292

9393
n = s.size - s.offset
9494
if len(b) < n {
9595
n = len(b)
9696
}
9797

98+
if n != len(b) {
99+
return n, fmt.Errorf("sqlite3.SQLiteBlob.Write: insufficient space in %d-byte blob", s.size)
100+
}
101+
98102
p := &b[0]
99103
ret := C.sqlite3_blob_write(s.blob, unsafe.Pointer(p), C.int(n), C.int(s.offset))
100104
if ret != C.SQLITE_OK {

blob_io_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,14 @@ func blobTestData(t *testing.T, dbname string, rowid int64, blob []byte, c drive
5656
var driverConn *SQLiteConn
5757
err = conn.Raw(func(conn interface{}) error {
5858
driverConn = conn.(*SQLiteConn)
59+
c(t, driverConn)
5960
return nil
6061
})
6162
if err != nil {
6263
return err
6364
}
6465
defer driverConn.Close()
6566

66-
c(t, driverConn)
67-
6867
return nil
6968
}
7069

@@ -162,12 +161,12 @@ func TestBlobWrite(t *testing.T) {
162161
t.Errorf("Failed to write %d bytes", n2)
163162
}
164163

165-
// EOF
164+
// Insufficient space
166165
b3 := make([]byte, 10)
167166
n3, err := blob.Write(b3)
168167

169-
if err != io.EOF || n3 != 0 {
170-
t.Error("Expected EOF", err)
168+
if err.Error() != "sqlite3.SQLiteBlob.Write: insufficient space in 24-byte blob" || n3 != 0 {
169+
t.Error("Expected insufficient space error", err, n3)
171170
}
172171

173172
// Verify written data

0 commit comments

Comments
 (0)