-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexector_test.go
168 lines (129 loc) · 3.41 KB
/
exector_test.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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package oci8
import (
"context"
"database/sql"
"database/sql/driver"
"fmt"
"io/ioutil"
"log"
"testing"
)
var (
testDSN string = "C##STUDENT/[email protected]:1521/ORCL"
testXID string = "192.2:1231:120301"
testBranchID int64 = 1231
testResourceID string = "41"
)
func get_conn(dbname string) *Conn {
db := DriverStruct{Logger: log.New(ioutil.Discard, "", 0)}
conn, err := db.Open(testDSN)
if err != nil {
panic("connect erroe")
}
oc := conn.(*Conn)
return oc
}
func get_tx(dbname string) *Tx {
conn := get_conn(dbname)
ctx := context.WithValue(
context.Background(),
XID,
testXID)
tx, err := conn.BeginTx(ctx, driver.TxOptions{
ReadOnly: false,
})
if err != nil {
panic("Get Tx error")
}
ret, _ := tx.(*Tx)
return ret
}
func TestConn(t *testing.T) {
oc := get_conn(testDSN)
defer oc.Close()
}
func TestExctor(t *testing.T) {
db, err := sql.Open("oci8", "C##STUDENT/[email protected]:1521/ORCL")
if err != nil {
log.Fatal(err)
}
defer db.Close()
InitTableMetaCache("C##STUDENT")
ctx := context.WithValue(
context.Background(),
XID,
testXID)
tx, err := db.BeginTx(ctx, &sql.TxOptions{
Isolation: sql.LevelDefault,
ReadOnly: false,
})
if err != nil {
t.Errorf("begin Tx error")
}
col1Val := "a"
// col2Val := 123
// col3Val := 12.33
// col4Val := []byte{1, 2, 3}
// Insert
// tx.Exec("insert into test (col1, col2, col3, col4 ) values ( :1, :2, :3, :4)", col1Val, col2Val, col3Val, col4Val)
// Delete
// tx.Exec("DELETE FROM TEST WHERE COL1 = :1 AND col2 = :2", col1Val, col2Val)
// Update
tx.Exec("UPDATE TEST SET COL1 = :1, COL2 = :2, COL3 = :3 WHERE COL1 = :4", "X", 88, 88.88, col1Val)
// Normal Qury
// rows, err := tx.Query("SELECT COL1, COL2, COL3, COL4 FROM TEST WHERE COL1 = :1 AND COL2 = :2", "X", 88)
// Update Qury
// rows, err := tx.Query("SELECT COL1, COL2, COL3, COL4 FROM TEST WHERE COL1 = :1 AND COL2 = :2 FOR UPDATE", "X", 88)
// for rows.Next() {
// rows.Scan(&col1Val, &col2Val, &col3Val, &col4Val)
// fmt.Println(col1Val)
// fmt.Println(col2Val)
// fmt.Println(col3Val)
// for _, b := range col4Val {
// fmt.Printf("%x", b)
// }
// fmt.Printf("/n")
// }
tx.Commit()
}
func TestBasicUse(t *testing.T) {
db, err := sql.Open("oci8", "C##STUDENT/[email protected]:1521/ORCL")
if err != nil {
t.Errorf("Open sql Error")
}
col1Val := "a"
col2Val := 123
col3Val := 12.33
col4Val := []byte{1, 2, 3}
// INSERT
for i := 0; i < 3; i++ {
if i != 0 {
_, err = db.Exec("insert into test ( col1, col2, col3, col4 ) values ( :1, :2, :3, :4)", col1Val+fmt.Sprint(i), col2Val+i, col3Val+float64(i), col4Val)
} else {
_, err = db.Exec("insert into test ( col1, col2, col3, col4 ) values ( :1, :2, :3, :4)", col1Val, col2Val+i, col3Val+float64(i), col4Val)
}
if err != nil {
t.Errorf("INSERT error")
}
}
// DELETE
_, err = db.Exec("DELETE FROM TEST WHERE \"COL1\" = :1 AND \"COL2\" = :2", col1Val+fmt.Sprint(1), col2Val+1)
if err != nil {
t.Errorf("DELETE error")
}
// UPDATE
_, err = db.Exec("UPDATE TEST SET COL1 = :1 ,col2 = :2 WHERE col1 = :3", col1Val, col2Val, col1Val+fmt.Sprint(2))
if err != nil {
t.Errorf("UPDATE error")
}
db.Close()
}
func insertDataN(x int, db *sql.DB) error {
for i := 0; i < x; i++ {
_, err := db.Exec("insert into test ( col1, col2, col3, col4 ) values ( :1, :2, :3, :4)", col1Val, col2Val, col3Val, col4Val)
if err != nil {
return err
}
}
return nil
}