Executing a Broken Statement Causes a Hang
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 42/100
Direzione di ricerca
Esegui la riproduzione fornita in main.go e traccia i punti di ingresso sqlitepool.NewPool, BeginTx e transaction.Exec. Determina perché un’istruzione non valida in una transazione non restituisce il controllo e verifica la correzione confermando che l’esempio segnali un errore invece di rimanere bloccato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hi,
whenever you try to execute an invalid statement in a transaction an error isn't returned (nor a panic thrown) the program just hangs.
I'd initially noticed this when inserting twice into a table that expected a column to be unique assuming I'd see an error but instead the program just hung.
this does not seem to be directly related to the unique constraint, it seems to happened with any invalid statement; even if they aren't valid SQL.
here's a example:
package main
import (
"context"
"log"
"github.com/tailscale/sqlite/sqliteh"
"github.com/tailscale/sqlite/sqlitepool"
)
var db *sqlitepool.Pool
func init() {
var err error
db, err = sqlitepool.NewPool("file:./db.sqlite", 10, func(init sqliteh.DB) error { return nil }, nil)
if err != nil {
panic(err)
}
}
func main() {
defer db.Close()
transaction, err := db.BeginTx(context.Background(), "")
if err != nil {
panic(err)
}
log.Println("executing invalid statement")
err = transaction.Exec("this should throw an error")
if err != nil {
panic(err)
}
log.Println("done")
err = transaction.Commit()
if err != nil {
panic(err)
}
}
running this program yields the following then hangs forever:
% go run main.go
2023/03/01 22:43:26 executing invalid statement
- Lingua principale
- C
- Stelle
- 225
- Fork
- 11
- Merge medio
- 20m
- PR unite (30g)
- 2
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di tailscale/sqlite
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
-
This vs. crawshaw.io/sqlite? Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 20/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
Tutte le issue di tailscale/sqlite
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
level/task module/gcp type/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
hapostgres/pg_auto_failover#1190 ·
-
docs
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
-
P3 sonic-vpp
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
sonic-net/sonic-buildimage#29662 ·