-
Notifications
You must be signed in to change notification settings - Fork 4
/
tx.go
107 lines (98 loc) · 2.58 KB
/
tx.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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package godynamo
import (
"fmt"
)
// TxResultNoResultSet is transaction-aware version of ResultNoResultSet.
//
// @Available since v0.2.0
type TxResultNoResultSet struct {
hasOutput bool
outputFn executeStatementOutputWrapper
affectedRows int64
}
// LastInsertId implements driver.Result/LastInsertId.
func (t *TxResultNoResultSet) LastInsertId() (int64, error) {
return 0, fmt.Errorf("this operation is not supported")
}
// RowsAffected implements driver.Result/RowsAffected.
func (t *TxResultNoResultSet) RowsAffected() (int64, error) {
if !t.hasOutput {
output := t.outputFn()
if output != nil {
t.hasOutput = true
t.affectedRows = 1
}
}
if !t.hasOutput {
return 0, ErrInTx
}
return t.affectedRows, nil
}
// // TxResultResultSet is transaction-aware version of ResultResultSet.
// //
// // @Available since v0.2.0
// type TxResultResultSet struct {
// wrap ResultResultSet
// hasOutput bool
// outputFn executeStatementOutputWrapper
// }
//
// func (r *TxResultResultSet) checkOutput() {
// if !r.hasOutput {
// r.wrap.stmtOutput = r.outputFn()
// fmt.Println("DEBUG", r.wrap.stmtOutput)
// if r.wrap.stmtOutput != nil {
// r.wrap.err = nil
// r.hasOutput = true
// r.wrap.init()
// }
// }
// }
//
// // Columns implements driver.Rows/Columns.
// func (r *TxResultResultSet) Columns() []string {
// r.checkOutput()
// return r.wrap.Columns()
// }
//
// // ColumnTypeScanType implements driver.RowsColumnTypeScanType/ColumnTypeScanType
// func (r *TxResultResultSet) ColumnTypeScanType(index int) reflect.Type {
// r.checkOutput()
// return r.wrap.ColumnTypeScanType(index)
// }
//
// // ColumnTypeDatabaseTypeName implements driver.RowsColumnTypeDatabaseTypeName/ColumnTypeDatabaseTypeName
// func (r *TxResultResultSet) ColumnTypeDatabaseTypeName(index int) string {
// r.checkOutput()
// return r.wrap.ColumnTypeDatabaseTypeName(index)
// }
//
// // Close implements driver.Rows/Close.
// func (r *TxResultResultSet) Close() error {
// r.checkOutput()
// if !r.hasOutput {
// return ErrInTx
// }
// return nil
// }
//
// // Next implements driver.Rows/Next.
// func (r *TxResultResultSet) Next(dest []driver.Value) error {
// r.checkOutput()
// return r.wrap.Next(dest)
// }
/*----------------------------------------------------------------------*/
// Tx is AWS DynamoDB implementation of driver.Tx.
//
// @Available since v0.2.0
type Tx struct {
conn *Conn
}
// Commit implements driver.Tx/Commit
func (t *Tx) Commit() error {
return t.conn.commit()
}
// Rollback implements driver.Tx/Rollback
func (t *Tx) Rollback() error {
return t.conn.rollback()
}