I want to use the sql.Tx of database/sql to use the VoltDB transaction, but the tx.Commit() in this code will always cause a null pointer panic.
Is it because it is not fully compatible with database/sql?
package main
import (
"database/sql"
"database/sql/driver"
"log"
"github.com/VoltDB/voltdb-client-go/voltdbclient"
)
func main() {
log.SetFlags(log.Lshortfile)
var (
err error
db *sql.DB
tx *sql.Tx
)
db, err = sql.Open("voltdb", "voltdb://localhost:21212")
if err != nil {
log.Fatalln(err)
}
tx, err = db.Begin()
if err != nil {
log.Fatalln(err)
}
defer func() {
err = db.Close()
if err != nil {
log.Println(err)
}
}()
_, err = tx.Exec("@AdHoc", "INSERT INTO users (id) VALUES (?)", "1")
if err != nil {
log.Fatalln(err)
}
_, err = tx.Exec("@AdHoc", "UPDATE users SET id=? WHERE id=1", "2")
if err != nil {
log.Fatalln(err)
}
if err = tx.Commit(); err != nil {
log.Fatalln(err)
}
}
I want to use the
sql.Tx
ofdatabase/sql
to use the VoltDB transaction, but thetx.Commit()
in this code will always cause a null pointer panic. Is it because it is not fully compatible withdatabase/sql
?