nakagami / firebirdsql

Firebird RDBMS sql driver for Go (golang)
MIT License
227 stars 60 forks source link

tx.Rollback() returns "op_response:0" #38

Closed KostovP closed 7 years ago

KostovP commented 7 years ago

I have the following table created:

CREATE TABLE my_table (
  id  INTEGER NOT NULL
  key VARCHAR(64) NOT NULL
  value VARCHAR(64)
);

Respectively in go:

// db.go
package utils
import (
    "database/sql"
    _ "github.com/nakagami/firebirdsql"
    "log"
)

var DB *sql.DB

func InitDB(dataSourceName string) {
    var err error
    DB, err = sql.Open("firebirdsql", dataSourceName)
    if err != nil {
        log.Panic(err)
    }

    if err = DB.Ping(); err != nil {
        log.Panic(err)
    }
}
//main.go
package main

import (
    "log"
    "test/utils"
    "database/sql"
)

utils.InitDB("sysdba:masterkey@127.0.0.1/TEST")

trans, err := utils.DB.Begin()
if err != nil {
    log.Println(err)
}
var rowId = sql.NullInt64{}

err = trans.QueryRow(
    "INSERT INTO my_table (id, key, value) VALUES (?, ?, ?) RETURNING id",
    1, "testKey", "testValue").
    Scan(&rowId)

if (err != nil) || (!rowId.Valid) || (rowId.Int64 <= 0) {
    log.Println(err)
    err = trans.Rollback()  // returns "op_response:0"
    if err != nil {
        log.Println(err.Error())
    }
} else {
       trans.Commit()
}

I tried x86,x64 versions of Firebird 2.5, different ways to execute the query - via stored procedure; just a tx.Execute() without a returning clause.

nakagami commented 7 years ago

I have add test for this issue. But I can't found this problem.

https://travis-ci.org/nakagami/firebirdsql/builds/228555786

Please fix this test code and send pull request