SQLITE_BUSY error on concurrent SELECT queries while in WAL mode
Scanning the result of multiple concurrent `SELECT` queries (eg. each in their own goroutine) results in the following error: ``` database is locked (5) (SQLITE_BUSY) ``` If I switch to the `mattn/go-sqlite3` driver OR execute the queries in a single goroutine everything seems to work fine. Here is a minimal reproducible example: ```go package main import ( "database/sql" "log" "sync" _ "github.com/mattn/go-sqlite3" _ "modernc.org/sqlite" ) func main() { var wg sync.WaitGroup // mattn/go-sqlite3 // --- // db, openErr := sql.Open("sqlite3", "data.db?_journal_mode=WAL") // modernc.org/sqlite // --- db, openErr := sql.Open("sqlite", "data.db?_pragma=journal_mode(WAL)") if openErr != nil { log.Fatal(openErr) } // run the queries for i := 0; i < 1000; i++ { wg.Add(1) go func() { defer wg.Done() var id int row := db.QueryRow("SELECT 1") if err := row.Scan(&id); err != nil { log.Fatal(err) } }() } // wait the goroutines to complete wg.Wait() log.Println("Completed successfully!") } ``` _For context, this error was reported initially in https://github.com/pocketbase/pocketbase/issues/875._ _edit1: simplified the example and left only the `select` statement_ _edit2: fixed `wg.Add` placement_
issue