From b588d5f991bd54b227d6e5f3ee5b36fff2225034 Mon Sep 17 00:00:00 2001 From: Nuno Cruces Date: Tue, 23 Sep 2025 12:51:36 +0100 Subject: [PATCH] Error messages, test contexts. --- driver/driver_test.go | 23 +++++++---------------- driver/util_test.go | 3 +-- sqlite.go | 8 ++++---- tests/conn_test.go | 11 ++++------- tests/driver_test.go | 12 ++++-------- tests/json_test.go | 14 +++++--------- tests/time_test.go | 14 ++++++-------- tests/txn_test.go | 12 ++++++------ vfs/tests/mptest/mptest_test.go | 2 +- vfs/tests/speedtest1/speedtest1_test.go | 6 +++--- 10 files changed, 41 insertions(+), 64 deletions(-) diff --git a/driver/driver_test.go b/driver/driver_test.go index 8b3fad2..cc8e8b3 100644 --- a/driver/driver_test.go +++ b/driver/driver_test.go @@ -156,26 +156,23 @@ func Test_BeginTx(t *testing.T) { "_pragma": {"busy_timeout(0)"}, }) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db, err := sql.Open("sqlite3", tmp) if err != nil { t.Fatal(err) } defer db.Close() - _, err = db.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelReadCommitted}) + _, err = db.BeginTx(t.Context(), &sql.TxOptions{Isolation: sql.LevelReadCommitted}) if err.Error() != string(util.IsolationErr) { t.Error("want isolationErr") } - tx1, err := db.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) + tx1, err := db.BeginTx(t.Context(), &sql.TxOptions{ReadOnly: true}) if err != nil { t.Fatal(err) } - tx2, err := db.BeginTx(ctx, &sql.TxOptions{ReadOnly: true}) + tx2, err := db.BeginTx(t.Context(), &sql.TxOptions{ReadOnly: true}) if err != nil { t.Fatal(err) } @@ -236,7 +233,7 @@ func Test_nested_context(t *testing.T) { want(outer, 0) - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) defer cancel() inner, err := tx.QueryContext(ctx, `SELECT value FROM generate_series(0)`) @@ -302,22 +299,19 @@ func Test_QueryRow_named(t *testing.T) { t.Parallel() tmp := memdb.TestDB(t) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db, err := sql.Open("sqlite3", tmp) if err != nil { t.Fatal(err) } defer db.Close() - conn, err := db.Conn(ctx) + conn, err := db.Conn(t.Context()) if err != nil { t.Fatal(err) } defer conn.Close() - stmt, err := conn.PrepareContext(ctx, `SELECT ?, ?5, :AAA, @AAA, $AAA`) + stmt, err := conn.PrepareContext(t.Context(), `SELECT ?, ?5, :AAA, @AAA, $AAA`) if err != nil { t.Fatal(err) } @@ -539,12 +533,9 @@ func Benchmark_loop(b *testing.B) { b.Fatal(err) } - ctx, cancel := context.WithCancel(context.Background()) - b.Cleanup(cancel) - b.ResetTimer() for range b.N { - _, err := db.ExecContext(ctx, + _, err := db.ExecContext(b.Context(), `WITH RECURSIVE c(x) AS (VALUES(1) UNION ALL SELECT x+1 FROM c WHERE x < 1000000) SELECT x FROM c;`) if err != nil { b.Fatal(err) diff --git a/driver/util_test.go b/driver/util_test.go index 70c5ffc..8919c4c 100644 --- a/driver/util_test.go +++ b/driver/util_test.go @@ -1,7 +1,6 @@ package driver import ( - "context" "database/sql/driver" "slices" "testing" @@ -56,7 +55,7 @@ func Fuzz_notWhitespace(f *testing.F) { t.SkipNow() } - c, err := db.Conn(context.Background()) + c, err := db.Conn(t.Context()) if err != nil { t.Fatal(err) } diff --git a/sqlite.go b/sqlite.go index c05a86f..fb64ac5 100644 --- a/sqlite.go +++ b/sqlite.go @@ -5,6 +5,7 @@ import ( "context" "math/bits" "os" + "strings" "sync" "unsafe" @@ -128,11 +129,10 @@ func (sqlt *sqlite) error(rc res_t, handle ptr_t, sql ...string) error { var msg, query string if ptr := ptr_t(sqlt.call("sqlite3_errmsg", stk_t(handle))); ptr != 0 { msg = util.ReadString(sqlt.mod, ptr, _MAX_LENGTH) - switch { - case msg == "not an error": - msg = "" - case msg == util.ErrorCodeString(uint32(rc))[len("sqlite3: "):]: + if msg == "not an error" { msg = "" + } else { + msg = strings.TrimPrefix(msg, util.ErrorCodeString(uint32(rc))[len("sqlite3: "):]) } } diff --git a/tests/conn_test.go b/tests/conn_test.go index aedcda7..1271f2f 100644 --- a/tests/conn_test.go +++ b/tests/conn_test.go @@ -163,7 +163,7 @@ func TestConn_SetInterrupt(t *testing.T) { } defer db.Close() - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) db.SetInterrupt(ctx) // Interrupt doesn't interrupt this. @@ -202,9 +202,7 @@ func TestConn_SetInterrupt(t *testing.T) { t.Errorf("got %v, want sqlite3.INTERRUPT", err) } - ctx, cancel = context.WithCancel(context.Background()) - defer cancel() - db.SetInterrupt(ctx) + db.SetInterrupt(t.Context()) // Interrupting can be cleared. err = db.Exec(`SELECT 1`) @@ -212,9 +210,8 @@ func TestConn_SetInterrupt(t *testing.T) { t.Fatal(err) } - db.SetInterrupt(ctx) - if got := db.GetInterrupt(); got != ctx { - t.Errorf("got %v, want %v", got, ctx) + if got := db.GetInterrupt(); got != t.Context() { + t.Errorf("got %v, want %v", got, t.Context()) } } diff --git a/tests/driver_test.go b/tests/driver_test.go index 54944a0..d4934cc 100644 --- a/tests/driver_test.go +++ b/tests/driver_test.go @@ -1,7 +1,6 @@ package tests import ( - "context" "testing" "github.com/ncruces/go-sqlite3" @@ -15,9 +14,6 @@ func TestDriver(t *testing.T) { t.Parallel() tmp := memdb.TestDB(t) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db, err := driver.Open(tmp, nil, func(c *sqlite3.Conn) error { return c.Exec(`PRAGMA optimize`) }) @@ -26,13 +22,13 @@ func TestDriver(t *testing.T) { } defer db.Close() - conn, err := db.Conn(ctx) + conn, err := db.Conn(t.Context()) if err != nil { t.Fatal(err) } defer conn.Close() - res, err := conn.ExecContext(ctx, + res, err := conn.ExecContext(t.Context(), `CREATE TABLE users (id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(10))`) if err != nil { t.Fatal(err) @@ -52,7 +48,7 @@ func TestDriver(t *testing.T) { t.Errorf("got %d want 0", changes) } - res, err = conn.ExecContext(ctx, + res, err = conn.ExecContext(t.Context(), `INSERT INTO users (id, name) VALUES (0, 'go'), (1, 'zig'), (2, 'whatever')`) if err != nil { t.Fatal(err) @@ -65,7 +61,7 @@ func TestDriver(t *testing.T) { t.Errorf("got %d want 3", changes) } - stmt, err := conn.PrepareContext(context.Background(), + stmt, err := conn.PrepareContext(t.Context(), `SELECT id, name FROM users`) if err != nil { t.Fatal(err) diff --git a/tests/json_test.go b/tests/json_test.go index d631905..7a12185 100644 --- a/tests/json_test.go +++ b/tests/json_test.go @@ -1,7 +1,6 @@ package tests import ( - "context" "encoding/json" "math" "testing" @@ -19,29 +18,26 @@ func TestJSON(t *testing.T) { t.Parallel() tmp := memdb.TestDB(t) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db, err := driver.Open(tmp) if err != nil { t.Fatal(err) } defer db.Close() - conn, err := db.Conn(ctx) + conn, err := db.Conn(t.Context()) if err != nil { t.Fatal(err) } defer conn.Close() - _, err = conn.ExecContext(ctx, `CREATE TABLE test (col)`) + _, err = conn.ExecContext(t.Context(), `CREATE TABLE test (col)`) if err != nil { t.Fatal(err) } reference := time.Date(2013, 10, 7, 4, 23, 19, 120_000_000, time.FixedZone("", -4*3600)) - _, err = conn.ExecContext(ctx, + _, err = conn.ExecContext(t.Context(), `INSERT INTO test (col) VALUES (?), (?), (?), (?)`, nil, 1, math.Pi, reference, ) @@ -49,7 +45,7 @@ func TestJSON(t *testing.T) { t.Fatal(err) } - _, err = conn.ExecContext(ctx, + _, err = conn.ExecContext(t.Context(), `INSERT INTO test (col) VALUES (?), (?), (?), (?)`, sqlite3.JSON(math.Pi), sqlite3.JSON(false), julianday.Format(reference), sqlite3.JSON([]string{})) @@ -57,7 +53,7 @@ func TestJSON(t *testing.T) { t.Fatal(err) } - rows, err := conn.QueryContext(ctx, "SELECT * FROM test") + rows, err := conn.QueryContext(t.Context(), "SELECT * FROM test") if err != nil { t.Fatal(err) } diff --git a/tests/time_test.go b/tests/time_test.go index dd3c342..456e6c7 100644 --- a/tests/time_test.go +++ b/tests/time_test.go @@ -1,7 +1,6 @@ package tests import ( - "context" "fmt" "reflect" "testing" @@ -136,35 +135,34 @@ func TestTimeFormat_Scanner(t *testing.T) { t.Parallel() tmp := memdb.TestDB(t) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - db, err := driver.Open(tmp) if err != nil { t.Fatal(err) } defer db.Close() - conn, err := db.Conn(ctx) + conn, err := db.Conn(t.Context()) if err != nil { t.Fatal(err) } defer conn.Close() - _, err = conn.ExecContext(ctx, `CREATE TABLE test (col)`) + _, err = conn.ExecContext(t.Context(), `CREATE TABLE test (col)`) if err != nil { t.Fatal(err) } reference := time.Date(2013, 10, 7, 4, 23, 19, 120_000_000, time.FixedZone("", -4*3600)) - _, err = conn.ExecContext(ctx, `INSERT INTO test VALUES (?)`, sqlite3.TimeFormat7TZ.Encode(reference)) + _, err = conn.ExecContext(t.Context(), `INSERT INTO test VALUES (?)`, + sqlite3.TimeFormat7TZ.Encode(reference)) if err != nil { t.Fatal(err) } var got time.Time - err = conn.QueryRowContext(ctx, "SELECT * FROM test").Scan(sqlite3.TimeFormatAuto.Scanner(&got)) + err = conn.QueryRowContext(t.Context(), "SELECT * FROM test"). + Scan(sqlite3.TimeFormatAuto.Scanner(&got)) if err != nil { t.Fatal(err) } diff --git a/tests/txn_test.go b/tests/txn_test.go index ba52c23..0d0b114 100644 --- a/tests/txn_test.go +++ b/tests/txn_test.go @@ -170,7 +170,7 @@ func TestConn_Transaction_interrupt(t *testing.T) { t.Fatal(err) } - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) db.SetInterrupt(ctx) tx, err = db.BeginExclusive() @@ -203,7 +203,7 @@ func TestConn_Transaction_interrupt(t *testing.T) { t.Errorf("got %v, want sqlite3.INTERRUPT", err) } - db.SetInterrupt(context.Background()) + db.SetInterrupt(t.Context()) stmt, _, err := db.Prepare(`SELECT count(*) FROM test`) if err != nil { t.Fatal(err) @@ -226,7 +226,7 @@ func TestConn_Transaction_interrupted(t *testing.T) { } defer db.Close() - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) db.SetInterrupt(ctx) cancel() @@ -274,7 +274,7 @@ func TestConn_Transaction_busy(t *testing.T) { t.Fatal(err) } - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) db2.SetInterrupt(ctx) go cancel() @@ -493,7 +493,7 @@ func TestConn_Savepoint_interrupt(t *testing.T) { t.Fatal(err) } - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) db.SetInterrupt(ctx) savept1 := db.Savepoint() @@ -530,7 +530,7 @@ func TestConn_Savepoint_interrupt(t *testing.T) { t.Errorf("got %v, want sqlite3.INTERRUPT", err) } - db.SetInterrupt(context.Background()) + db.SetInterrupt(t.Context()) stmt, _, err := db.Prepare(`SELECT count(*) FROM test`) if err != nil { t.Fatal(err) diff --git a/vfs/tests/mptest/mptest_test.go b/vfs/tests/mptest/mptest_test.go index 60a7479..82f6719 100644 --- a/vfs/tests/mptest/mptest_test.go +++ b/vfs/tests/mptest/mptest_test.go @@ -371,7 +371,7 @@ func Test_crash01_xts_wal(t *testing.T) { } func newContext(t *testing.T) context.Context { - return context.WithValue(context.Background(), logger{}, &testWriter{T: t}) + return context.WithValue(t.Context(), logger{}, &testWriter{T: t}) } type logger struct{} diff --git a/vfs/tests/speedtest1/speedtest1_test.go b/vfs/tests/speedtest1/speedtest1_test.go index 2bf320d..9e60174 100644 --- a/vfs/tests/speedtest1/speedtest1_test.go +++ b/vfs/tests/speedtest1/speedtest1_test.go @@ -82,7 +82,7 @@ func initFlags() { func Benchmark_speedtest1(b *testing.B) { output.Reset() - ctx := util.NewContext(context.Background()) + ctx := util.NewContext(b.Context()) name := filepath.Join(b.TempDir(), "test.db") args := append(options, "--size", strconv.Itoa(b.N), name) cfg := wazero.NewModuleConfig(). @@ -100,7 +100,7 @@ func Benchmark_speedtest1(b *testing.B) { func Benchmark_adiantum(b *testing.B) { output.Reset() - ctx := util.NewContext(context.Background()) + ctx := util.NewContext(b.Context()) name := "file:" + filepath.Join(b.TempDir(), "test.db") + "?hexkey=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" args := append(options, "--vfs", "adiantum", "--size", strconv.Itoa(b.N), name) @@ -119,7 +119,7 @@ func Benchmark_adiantum(b *testing.B) { func Benchmark_xts(b *testing.B) { output.Reset() - ctx := util.NewContext(context.Background()) + ctx := util.NewContext(b.Context()) name := "file:" + filepath.Join(b.TempDir(), "test.db") + "?hexkey=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" args := append(options, "--vfs", "xts", "--size", strconv.Itoa(b.N), name)