Skip to content

Commit fe0ed2e

Browse files
committed
Blob I/O: adhere to io.Writer
1 parent ef6fa5a commit fe0ed2e

File tree

2 files changed

+10
-24
lines changed

2 files changed

+10
-24
lines changed

blob_io.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func (s *SQLiteBlob) Write(b []byte) (n int, err error) {
9696
}
9797

9898
if n != len(b) {
99-
return n, fmt.Errorf("sqlite3.SQLiteBlob.Write: insufficient space in %d-byte blob", s.size)
99+
return 0, fmt.Errorf("sqlite3.SQLiteBlob.Write: insufficient space in %d-byte blob", s.size)
100100
}
101101

102102
p := &b[0]
@@ -132,7 +132,7 @@ func (s *SQLiteBlob) Seek(offset int64, whence int) (int64, error) {
132132
return 0, errors.New("sqlite.SQLiteBlob.Seek: negative position")
133133
}
134134

135-
if abs > math.MaxInt32 {
135+
if abs > math.MaxInt32 || abs > int64(s.size) {
136136
return 0, errors.New("sqlite3.SQLiteBlob.Seek: overflow position")
137137
}
138138

blob_io_test.go

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ var _ io.Closer = &SQLiteBlob{}
2424

2525
type driverConnCallback func(*testing.T, *SQLiteConn)
2626

27-
func blobTestData(t *testing.T, dbname string, rowid int64, blob []byte, c driverConnCallback) error {
27+
func blobTestData(t *testing.T, dbname string, rowid int64, blob []byte, c driverConnCallback) {
2828
db, err := sql.Open("sqlite3", "file:/"+dbname+"?vfs=memdb")
2929
if err != nil {
30-
return err
30+
t.Fatal(err)
3131
}
3232
defer db.Close()
3333

@@ -43,13 +43,13 @@ func blobTestData(t *testing.T, dbname string, rowid int64, blob []byte, c drive
4343

4444
_, err = db.Exec(query, sql.Named("rowid", rowid), sql.Named("value", blob))
4545
if err != nil {
46-
return err
46+
t.Fatal(err)
4747
}
4848

4949
// Get raw connection
5050
conn, err := db.Conn(context.Background())
5151
if err != nil {
52-
return err
52+
t.Fatal(err)
5353
}
5454
defer conn.Close()
5555

@@ -60,18 +60,16 @@ func blobTestData(t *testing.T, dbname string, rowid int64, blob []byte, c drive
6060
return nil
6161
})
6262
if err != nil {
63-
return err
63+
t.Fatal(err)
6464
}
6565
defer driverConn.Close()
66-
67-
return nil
6866
}
6967

7068
func TestBlobRead(t *testing.T) {
7169
rowid := int64(6581)
7270
expected := []byte("I ❤️ SQLite in \x00\x01\x02…")
7371

74-
err := blobTestData(t, "testblobread", rowid, expected, func(t *testing.T, driverConn *SQLiteConn) {
72+
blobTestData(t, "testblobread", rowid, expected, func(t *testing.T, driverConn *SQLiteConn) {
7573

7674
// Open blob
7775
blob, err := driverConn.Blob("main", "data", "value", rowid, 0)
@@ -117,10 +115,6 @@ func TestBlobRead(t *testing.T) {
117115
t.Error("Expected EOF", err)
118116
}
119117
})
120-
121-
if err != nil {
122-
t.Fatal("Failed to get raw connection:", err)
123-
}
124118
}
125119

126120
func TestBlobWrite(t *testing.T) {
@@ -133,7 +127,7 @@ func TestBlobWrite(t *testing.T) {
133127

134128
// Allocate a zero blob
135129
data := make([]byte, len(expected))
136-
err := blobTestData(t, "testblobwrite", rowid, data, func(t *testing.T, driverConn *SQLiteConn) {
130+
blobTestData(t, "testblobwrite", rowid, data, func(t *testing.T, driverConn *SQLiteConn) {
137131

138132
// Open blob for read/write
139133
blob, err := driverConn.Blob("main", "data", "value", rowid, 1)
@@ -187,16 +181,13 @@ func TestBlobWrite(t *testing.T) {
187181
}
188182

189183
})
190-
if err != nil {
191-
t.Fatal("Failed to get raw connection:", err)
192-
}
193184
}
194185

195186
func TestBlobSeek(t *testing.T) {
196187
rowid := int64(6510)
197188
data := make([]byte, 1000)
198189

199-
err := blobTestData(t, "testblobseek", rowid, data, func(t *testing.T, driverConn *SQLiteConn) {
190+
blobTestData(t, "testblobseek", rowid, data, func(t *testing.T, driverConn *SQLiteConn) {
200191

201192
// Open blob
202193
blob, err := driverConn.Blob("main", "data", "value", rowid, 0)
@@ -229,7 +220,6 @@ func TestBlobSeek(t *testing.T) {
229220
{offset: -2, whence: io.SeekEnd, expected: end - 1},
230221
{offset: -1, whence: io.SeekEnd, expected: end},
231222
{offset: 0, whence: io.SeekEnd, expected: eof},
232-
{offset: 1, whence: io.SeekEnd, expected: eof + 1},
233223
{offset: -eof, whence: io.SeekEnd, expected: begin},
234224
}
235225

@@ -252,8 +242,4 @@ func TestBlobSeek(t *testing.T) {
252242
}
253243

254244
})
255-
256-
if err != nil {
257-
t.Fatal("Failed to get raw connection:", err)
258-
}
259245
}

0 commit comments

Comments
 (0)