aboutsummaryrefslogtreecommitdiff
path: root/sqlite3_go113_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'sqlite3_go113_test.go')
-rw-r--r--sqlite3_go113_test.go120
1 files changed, 0 insertions, 120 deletions
diff --git a/sqlite3_go113_test.go b/sqlite3_go113_test.go
deleted file mode 100644
index f38d6d1..0000000
--- a/sqlite3_go113_test.go
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (C) 2019 Yasuhiro Matsumoto <mattn.jp@gmail.com>.
-//
-// Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-//go:build go1.13 && cgo
-// +build go1.13,cgo
-
-package sqlite3
-
-import (
- "context"
- "database/sql"
- "database/sql/driver"
- "errors"
- "os"
- "testing"
-)
-
-func TestBeginTxCancel(t *testing.T) {
- srcTempFilename := TempFilename(t)
- defer os.Remove(srcTempFilename)
-
- db, err := sql.Open("sqlite3", srcTempFilename)
- if err != nil {
- t.Fatal(err)
- }
-
- db.SetMaxOpenConns(10)
- db.SetMaxIdleConns(5)
-
- defer db.Close()
- initDatabase(t, db, 100)
-
- // create several go-routines to expose racy issue
- for i := 0; i < 1000; i++ {
- func() {
- ctx, cancel := context.WithCancel(context.Background())
- conn, err := db.Conn(ctx)
- if err != nil {
- t.Fatal(err)
- }
- defer func() {
- if err := conn.Close(); err != nil {
- t.Error(err)
- }
- }()
-
- err = conn.Raw(func(driverConn any) error {
- d, ok := driverConn.(driver.ConnBeginTx)
- if !ok {
- t.Fatal("unexpected: wrong type")
- }
- // checks that conn.Raw can be used to get *SQLiteConn
- if _, ok = driverConn.(*SQLiteConn); !ok {
- t.Fatalf("conn.Raw() driverConn type=%T, expected *SQLiteConn", driverConn)
- }
-
- go cancel() // make it cancel concurrently with exec("BEGIN");
- tx, err := d.BeginTx(ctx, driver.TxOptions{})
- switch err {
- case nil:
- switch err := tx.Rollback(); err {
- case nil, sql.ErrTxDone:
- default:
- return err
- }
- case context.Canceled:
- default:
- // must not fail with "cannot start a transaction within a transaction"
- return err
- }
- return nil
- })
- if err != nil {
- t.Fatal(err)
- }
- }()
- }
-}
-
-func TestStmtReadonly(t *testing.T) {
- db, err := sql.Open("sqlite3", ":memory:")
- if err != nil {
- t.Fatal(err)
- }
-
- _, err = db.Exec("CREATE TABLE t (count INT)")
- if err != nil {
- t.Fatal(err)
- }
-
- isRO := func(query string) bool {
- c, err := db.Conn(context.Background())
- if err != nil {
- return false
- }
-
- var ro bool
- c.Raw(func(dc any) error {
- stmt, err := dc.(*SQLiteConn).Prepare(query)
- if err != nil {
- return err
- }
- if stmt == nil {
- return errors.New("stmt is nil")
- }
- ro = stmt.(*SQLiteStmt).Readonly()
- return nil
- })
- return ro // On errors ro will remain false.
- }
-
- if !isRO(`select * from t`) {
- t.Error("select not seen as read-only")
- }
- if isRO(`insert into t values (1), (2)`) {
- t.Error("insert seen as read-only")
- }
-}