-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathtransaction.go
37 lines (31 loc) · 1 KB
/
transaction.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package lodbc
import (
"github.com/LukeMauldin/lodbc/odbc"
)
// Implements type database/sql/driver TX interface
type transaction struct {
conn *connection
}
// Commit transaction
func (tx *transaction) Commit() error {
return tx.completeTransaction(odbc.SQL_COMMIT)
}
// Rollback transaction
func (tx *transaction) Rollback() error {
return tx.completeTransaction(odbc.SQL_ROLLBACK)
}
// Commit or rollback transaction in consistent manner
func (tx *transaction) completeTransaction(completeType odbc.SQLSMALLINT) error {
//Complete transaction by either committing or rolling back
ret := odbc.SQLEndTran(odbc.SQL_HANDLE_DBC, tx.conn.handle, completeType)
if isError(ret) {
return errorConnection(tx.conn.handle)
}
//Make transaction as finished and turn auto commit back on
tx.conn.isTransactionActive = false
ret = odbc.SQLSetConnectAttr(tx.conn.handle, odbc.SQL_ATTR_AUTOCOMMIT, odbc.SQLPOINTER(odbc.SQL_AUTOCOMMIT_ON), 0, nil)
if isError(ret) {
return errorConnection(tx.conn.handle)
}
return nil
}