VoltDB / voltdb-client-go

VoltDB Golang Client Library
MIT License
32 stars 19 forks source link

Transaction is not supported in drive mode? #65

Closed dxvgef closed 3 years ago

dxvgef commented 3 years ago

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)
    }
}
dxvgef commented 3 years ago

I know, VoltDB does not support Begin and Rollback the transaction