Skip to content

Commit 167173a

Browse files
committed
Merge branch 'pr/207'
2 parents b808f01 + 1ae6ca7 commit 167173a

File tree

4 files changed

+56
-35
lines changed

4 files changed

+56
-35
lines changed

sqlite3.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ func errorString(err Error) string {
586586
// file:test.db?cache=shared&mode=memory
587587
// :memory:
588588
// file::memory:
589-
// go-sqlite handle especially query parameters.
589+
// go-sqlite3 adds the following query parameters to those used by SQLite:
590590
// _loc=XXX
591591
// Specify location of time format. It's possible to specify "auto".
592592
// _busy_timeout=XXX

sqlite3_fts3_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
)
1313

1414
func TestFTS3(t *testing.T) {
15-
tempFilename := TempFilename()
15+
tempFilename := TempFilename(t)
1616
db, err := sql.Open("sqlite3", tempFilename)
1717
if err != nil {
1818
t.Fatal("Failed to open database:", err)

sqlite3_test.go

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66
package sqlite3
77

88
import (
9-
"crypto/rand"
109
"database/sql"
1110
"database/sql/driver"
12-
"encoding/hex"
1311
"errors"
1412
"fmt"
13+
"io/ioutil"
1514
"net/url"
1615
"os"
1716
"path/filepath"
@@ -25,15 +24,19 @@ import (
2524
"github.com/mattn/go-sqlite3/sqlite3_test"
2625
)
2726

28-
func TempFilename() string {
29-
randBytes := make([]byte, 16)
30-
rand.Read(randBytes)
31-
return filepath.Join(os.TempDir(), "foo"+hex.EncodeToString(randBytes)+".db")
27+
func TempFilename(t *testing.T) string {
28+
f, err := ioutil.TempFile("", "go-sqlite3-test-")
29+
if err != nil {
30+
t.Fatal(err)
31+
}
32+
f.Close()
33+
return f.Name()
3234
}
3335

3436
func doTestOpen(t *testing.T, option string) (string, error) {
3537
var url string
36-
tempFilename := TempFilename()
38+
tempFilename := TempFilename(t)
39+
defer os.Remove(tempFilename)
3740
if option != "" {
3841
url = tempFilename + option
3942
} else {
@@ -84,8 +87,29 @@ func TestOpen(t *testing.T) {
8487
}
8588
}
8689

90+
func TestReadonly(t *testing.T) {
91+
tempFilename := TempFilename(t)
92+
defer os.Remove(tempFilename)
93+
94+
db1, err := sql.Open("sqlite3", "file:"+tempFilename)
95+
if err != nil {
96+
t.Fatal(err)
97+
}
98+
db1.Exec("CREATE TABLE test (x int, y float)")
99+
100+
db2, err := sql.Open("sqlite3", "file:"+tempFilename+"?mode=ro")
101+
if err != nil {
102+
t.Fatal(err)
103+
}
104+
_ = db2
105+
_, err = db2.Exec("INSERT INTO test VALUES (1, 3.14)")
106+
if err == nil {
107+
t.Fatal("didn't expect INSERT into read-only database to work")
108+
}
109+
}
110+
87111
func TestClose(t *testing.T) {
88-
tempFilename := TempFilename()
112+
tempFilename := TempFilename(t)
89113
db, err := sql.Open("sqlite3", tempFilename)
90114
if err != nil {
91115
t.Fatal("Failed to open database:", err)
@@ -111,7 +135,7 @@ func TestClose(t *testing.T) {
111135
}
112136

113137
func TestInsert(t *testing.T) {
114-
tempFilename := TempFilename()
138+
tempFilename := TempFilename(t)
115139
db, err := sql.Open("sqlite3", tempFilename)
116140
if err != nil {
117141
t.Fatal("Failed to open database:", err)
@@ -150,7 +174,7 @@ func TestInsert(t *testing.T) {
150174
}
151175

152176
func TestUpdate(t *testing.T) {
153-
tempFilename := TempFilename()
177+
tempFilename := TempFilename(t)
154178
db, err := sql.Open("sqlite3", tempFilename)
155179
if err != nil {
156180
t.Fatal("Failed to open database:", err)
@@ -215,7 +239,7 @@ func TestUpdate(t *testing.T) {
215239
}
216240

217241
func TestDelete(t *testing.T) {
218-
tempFilename := TempFilename()
242+
tempFilename := TempFilename(t)
219243
db, err := sql.Open("sqlite3", tempFilename)
220244
if err != nil {
221245
t.Fatal("Failed to open database:", err)
@@ -276,7 +300,7 @@ func TestDelete(t *testing.T) {
276300
}
277301

278302
func TestBooleanRoundtrip(t *testing.T) {
279-
tempFilename := TempFilename()
303+
tempFilename := TempFilename(t)
280304
db, err := sql.Open("sqlite3", tempFilename)
281305
if err != nil {
282306
t.Fatal("Failed to open database:", err)
@@ -325,7 +349,7 @@ func TestBooleanRoundtrip(t *testing.T) {
325349
}
326350

327351
func TestTimestamp(t *testing.T) {
328-
tempFilename := TempFilename()
352+
tempFilename := TempFilename(t)
329353
db, err := sql.Open("sqlite3", tempFilename)
330354
if err != nil {
331355
t.Fatal("Failed to open database:", err)
@@ -408,7 +432,7 @@ func TestTimestamp(t *testing.T) {
408432
}
409433

410434
func TestBoolean(t *testing.T) {
411-
tempFilename := TempFilename()
435+
tempFilename := TempFilename(t)
412436
db, err := sql.Open("sqlite3", tempFilename)
413437
if err != nil {
414438
t.Fatal("Failed to open database:", err)
@@ -500,7 +524,7 @@ func TestBoolean(t *testing.T) {
500524
}
501525

502526
func TestFloat32(t *testing.T) {
503-
tempFilename := TempFilename()
527+
tempFilename := TempFilename(t)
504528
db, err := sql.Open("sqlite3", tempFilename)
505529
if err != nil {
506530
t.Fatal("Failed to open database:", err)
@@ -538,7 +562,7 @@ func TestFloat32(t *testing.T) {
538562
}
539563

540564
func TestNull(t *testing.T) {
541-
tempFilename := TempFilename()
565+
tempFilename := TempFilename(t)
542566
db, err := sql.Open("sqlite3", tempFilename)
543567
if err != nil {
544568
t.Fatal("Failed to open database:", err)
@@ -570,7 +594,7 @@ func TestNull(t *testing.T) {
570594
}
571595

572596
func TestTransaction(t *testing.T) {
573-
tempFilename := TempFilename()
597+
tempFilename := TempFilename(t)
574598
db, err := sql.Open("sqlite3", tempFilename)
575599
if err != nil {
576600
t.Fatal("Failed to open database:", err)
@@ -630,7 +654,7 @@ func TestTransaction(t *testing.T) {
630654
}
631655

632656
func TestWAL(t *testing.T) {
633-
tempFilename := TempFilename()
657+
tempFilename := TempFilename(t)
634658
db, err := sql.Open("sqlite3", tempFilename)
635659
if err != nil {
636660
t.Fatal("Failed to open database:", err)
@@ -678,7 +702,7 @@ func TestWAL(t *testing.T) {
678702
func TestTimezoneConversion(t *testing.T) {
679703
zones := []string{"UTC", "US/Central", "US/Pacific", "Local"}
680704
for _, tz := range zones {
681-
tempFilename := TempFilename()
705+
tempFilename := TempFilename(t)
682706
db, err := sql.Open("sqlite3", tempFilename+"?_loc="+url.QueryEscape(tz))
683707
if err != nil {
684708
t.Fatal("Failed to open database:", err)
@@ -786,7 +810,7 @@ func TestSuite(t *testing.T) {
786810
// TODO: Execer & Queryer currently disabled
787811
// https://github.com/mattn/go-sqlite3/issues/82
788812
func TestExecer(t *testing.T) {
789-
tempFilename := TempFilename()
813+
tempFilename := TempFilename(t)
790814
db, err := sql.Open("sqlite3", tempFilename)
791815
if err != nil {
792816
t.Fatal("Failed to open database:", err)
@@ -806,7 +830,7 @@ func TestExecer(t *testing.T) {
806830
}
807831

808832
func TestQueryer(t *testing.T) {
809-
tempFilename := TempFilename()
833+
tempFilename := TempFilename(t)
810834
db, err := sql.Open("sqlite3", tempFilename)
811835
if err != nil {
812836
t.Fatal("Failed to open database:", err)
@@ -847,7 +871,7 @@ func TestQueryer(t *testing.T) {
847871
}
848872

849873
func TestStress(t *testing.T) {
850-
tempFilename := TempFilename()
874+
tempFilename := TempFilename(t)
851875
db, err := sql.Open("sqlite3", tempFilename)
852876
if err != nil {
853877
t.Fatal("Failed to open database:", err)
@@ -885,7 +909,7 @@ func TestStress(t *testing.T) {
885909

886910
func TestDateTimeLocal(t *testing.T) {
887911
zone := "Asia/Tokyo"
888-
tempFilename := TempFilename()
912+
tempFilename := TempFilename(t)
889913
db, err := sql.Open("sqlite3", tempFilename+"?_loc="+zone)
890914
if err != nil {
891915
t.Fatal("Failed to open database:", err)
@@ -952,7 +976,7 @@ func TestVersion(t *testing.T) {
952976
}
953977

954978
func TestNumberNamedParams(t *testing.T) {
955-
tempFilename := TempFilename()
979+
tempFilename := TempFilename(t)
956980
db, err := sql.Open("sqlite3", tempFilename)
957981
if err != nil {
958982
t.Fatal("Failed to open database:", err)
@@ -988,7 +1012,7 @@ func TestNumberNamedParams(t *testing.T) {
9881012
}
9891013

9901014
func TestStringContainingZero(t *testing.T) {
991-
tempFilename := TempFilename()
1015+
tempFilename := TempFilename(t)
9921016
db, err := sql.Open("sqlite3", tempFilename)
9931017
if err != nil {
9941018
t.Fatal("Failed to open database:", err)
@@ -1048,7 +1072,7 @@ func (t TimeStamp) Value() (driver.Value, error) {
10481072
}
10491073

10501074
func TestDateTimeNow(t *testing.T) {
1051-
tempFilename := TempFilename()
1075+
tempFilename := TempFilename(t)
10521076
db, err := sql.Open("sqlite3", tempFilename)
10531077
if err != nil {
10541078
t.Fatal("Failed to open database:", err)

sqlite3_test/sqltest.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -275,12 +275,11 @@ func TestPreparedStmt(t *testing.T) {
275275
}
276276

277277
const nRuns = 10
278-
ch := make(chan bool)
278+
var wg sync.WaitGroup
279279
for i := 0; i < nRuns; i++ {
280+
wg.Add(1)
280281
go func() {
281-
defer func() {
282-
ch <- true
283-
}()
282+
defer wg.Done()
284283
for j := 0; j < 10; j++ {
285284
count := 0
286285
if err := sel.QueryRow().Scan(&count); err != nil && err != sql.ErrNoRows {
@@ -294,9 +293,7 @@ func TestPreparedStmt(t *testing.T) {
294293
}
295294
}()
296295
}
297-
for i := 0; i < nRuns; i++ {
298-
<-ch
299-
}
296+
wg.Wait()
300297
}
301298

302299
// Benchmarks need to use panic() since b.Error errors are lost when

0 commit comments

Comments
 (0)