Open sjunepark opened 7 months ago
Just for reference, I'm currently using a workaround to throw an error when sql.Db.RowsAffected()
returns 0
, but this is just a workaround since there are non error situations included.
Hey @sjunepark I'm evaluating Turso, and just wondered if this was still an issue for you?
I can't seem to recreate with the following demo:
package main
import (
"database/sql"
"fmt"
_ "github.com/tursodatabase/go-libsql"
"log"
"os"
)
func main() {
url := "http://127.0.0.1:8080"
db, err := sql.Open("libsql", url)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to open db %s: %s", url, err)
os.Exit(1)
}
defer db.Close()
// Create the users table if it doesn't exist
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT CHECK (length(name) = 5)
)`)
if err != nil {
log.Fatal(err)
}
_, err = db.Exec(`INSERT INTO users (name) VALUES (?)`, "Alice")
if err != nil {
log.Fatal("should not fail: ", err)
} else {
log.Println("insert success: expected")
}
_, err = db.Exec(`INSERT INTO users (name) VALUES (?)`, "Alice-should-fail")
if err != nil {
log.Fatal("should fail: ", err)
} else {
log.Println("insert success: unexpected")
}
}
Hi,
Thanks in advance for checking out. I've asked this on the turso discord as well, and if you've come across it as a duplicate spam, apologies. Wanted to reach out to a larger audience about this.
Problem
db.Exec
won't return an error when there are sqlite constraint errors. (SQLITE_CONSTRAINT_CHECK
to be specific, but I've checked that it's the same forSQLITE_CONSTRAINT_PRIMARYKEY
errors as well)go-libsql
issue ordatabase/sql
issue. Please let me know if someone knows.)Environment
.db
file created withturso dev --db-file local.db
Manual Query
If I run a SQL query directly, as below, it fails due to CONSTRAINTS. (It fails for the 3rd column since I gave a string with length of 3
EMDNumber TEXT NOT NULL CHECK (length(EMDNumber) = 5),
)Using
database/sql
However, if i use
database/sql
'sdb.Exec
, no error occurs. Also,sql.Result
returns 0 rows affected, meaning that theINSERT
operation failed.