Skip to content

Commit 22a4cd3

Browse files
committed
sqlx tests
1 parent 89a68fe commit 22a4cd3

File tree

1 file changed

+277
-0
lines changed

1 file changed

+277
-0
lines changed
Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
package test
2+
3+
import (
4+
"context"
5+
6+
"github.com/jmoiron/sqlx"
7+
)
8+
9+
func test_sqlx(q sqlx.Queryer) {
10+
var user User
11+
12+
err := sqlx.Get(q, &user, "SELECT * FROM users WHERE id = 1") // $ source
13+
ignore(err)
14+
15+
err = sqlx.Select(q, &user, "SELECT * FROM users WHERE id = 1") // $ source
16+
ignore(err)
17+
18+
rows, err := sqlx.NamedQuery(q, "SELECT * FROM users WHERE id = :id", map[string]any{"id": 1}) // $ source
19+
ignore(err)
20+
21+
rows.StructScan(&user)
22+
23+
sink(user) // $ hasTaintFlow="user"
24+
}
25+
26+
func test_sqlx_ctx(ctx context.Context, q sqlx.ExtContext) {
27+
var user User
28+
29+
err := sqlx.GetContext(ctx, q, &user, "SELECT * FROM users WHERE id = 1") // $ source
30+
ignore(err)
31+
32+
err = sqlx.SelectContext(ctx, q, &user, "SELECT * FROM users WHERE id = 1") // $ source
33+
ignore(err)
34+
35+
rows, err := sqlx.NamedQueryContext(ctx, q, "SELECT * FROM users WHERE id = :id", map[string]any{"id": 1}) // $ source
36+
ignore(err)
37+
38+
rows.StructScan(&user)
39+
40+
sink(user) // $ hasTaintFlow="user"
41+
}
42+
43+
func test_sqlx_DB(db *sqlx.DB) {
44+
example, err := db.Query("SELECT * FROM users") // $ source
45+
ignore(example, err)
46+
47+
rows, err := db.Queryx("SELECT * FROM users") // $ source
48+
49+
if err != nil {
50+
return
51+
}
52+
53+
defer rows.Close()
54+
55+
for rows.Next() {
56+
var id int
57+
var name string
58+
err = rows.Scan(&id, &name)
59+
60+
if err != nil {
61+
return
62+
}
63+
64+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
65+
66+
valmap := make(map[string]interface{})
67+
rows.MapScan(valmap)
68+
69+
id = valmap["id"].(int)
70+
sink(id) // $ hasTaintFlow="id"
71+
72+
var user User
73+
rows.StructScan(&user)
74+
sink(user) // $ hasTaintFlow="user"
75+
}
76+
77+
row := db.QueryRowx("SELECT * FROM users WHERE id = 1") // $ source
78+
79+
userMap := make(map[string]interface{})
80+
row.MapScan(userMap)
81+
82+
id := userMap["id"].(int)
83+
sink(id) // $ hasTaintFlow="id"
84+
85+
var user User
86+
row.StructScan(&user)
87+
sink(user) // $ hasTaintFlow="user"
88+
89+
var user2 User
90+
db.Get(&user2, "SELECT * FROM users WHERE id = 1") // $ source
91+
92+
var user3 User
93+
db.GetContext(nil, &user3, "SELECT * FROM users WHERE id = 1") // $ source
94+
95+
var user4 User
96+
rows, err = db.NamedQueryContext(nil, "SELECT * FROM users WHERE id = :id", map[string]any{"id": 1}) // $ source
97+
ignore(err)
98+
rows.StructScan(&user4)
99+
sink(user4) // $ hasTaintFlow="user4"
100+
101+
var user5 User
102+
db.Select(&user5, "SELECT * FROM users WHERE id = 1") // $ source
103+
}
104+
105+
func test_sqlx_Tx(tx *sqlx.Tx) {
106+
example, err := tx.Query("SELECT * FROM users") // $ source
107+
ignore(example, err)
108+
109+
rows, err := tx.Queryx("SELECT * FROM users") // $ source
110+
111+
if err != nil {
112+
return
113+
}
114+
115+
defer rows.Close()
116+
117+
for rows.Next() {
118+
var id int
119+
var name string
120+
err = rows.Scan(&id, &name)
121+
122+
if err != nil {
123+
return
124+
}
125+
126+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
127+
128+
valmap := make(map[string]interface{})
129+
rows.MapScan(valmap)
130+
131+
id = valmap["id"].(int)
132+
sink(id) // $ hasTaintFlow="id"
133+
134+
var user User
135+
rows.StructScan(&user)
136+
sink(user) // $ hasTaintFlow="user"
137+
}
138+
139+
row := tx.QueryRowx("SELECT * FROM users WHERE id = 1") // $ source
140+
141+
userMap := make(map[string]interface{})
142+
row.MapScan(userMap)
143+
144+
id := userMap["id"].(int)
145+
sink(id) // $ hasTaintFlow="id"
146+
147+
var user User
148+
row.StructScan(&user)
149+
sink(user) // $ hasTaintFlow="user"
150+
151+
var user2 User
152+
tx.Get(&user2, "SELECT * FROM users WHERE id = 1") // $ source
153+
154+
var user3 User
155+
tx.GetContext(nil, &user3, "SELECT * FROM users WHERE id = 1") // $ source
156+
157+
var user4 User
158+
rows, err = tx.NamedQuery("SELECT * FROM users WHERE id = :id", map[string]any{"id": 1}) // $ source
159+
ignore(err)
160+
rows.StructScan(&user4)
161+
sink(user4) // $ hasTaintFlow="user4"
162+
163+
var user5 User
164+
tx.Select(&user5, "SELECT * FROM users WHERE id = 1") // $ source
165+
}
166+
167+
func test_sqlx_Stmt(stmt *sqlx.Stmt) {
168+
example, err := stmt.Query("SELECT * FROM users") // $ source
169+
ignore(example, err)
170+
171+
rows, err := stmt.Queryx("SELECT * FROM users") // $ source
172+
173+
if err != nil {
174+
return
175+
}
176+
177+
defer rows.Close()
178+
179+
for rows.Next() {
180+
var id int
181+
var name string
182+
err = rows.Scan(&id, &name)
183+
184+
if err != nil {
185+
return
186+
}
187+
188+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
189+
190+
valmap := make(map[string]interface{})
191+
rows.MapScan(valmap)
192+
193+
id = valmap["id"].(int)
194+
sink(id) // $ hasTaintFlow="id"
195+
196+
var user User
197+
rows.StructScan(&user)
198+
sink(user) // $ hasTaintFlow="user"
199+
}
200+
201+
row := stmt.QueryRowx("SELECT * FROM users WHERE id = 1") // $ source
202+
203+
userMap := make(map[string]interface{})
204+
row.MapScan(userMap)
205+
206+
id := userMap["id"].(int)
207+
sink(id) // $ hasTaintFlow="id"
208+
209+
var user User
210+
row.StructScan(&user)
211+
sink(user) // $ hasTaintFlow="user"
212+
213+
var user2 User
214+
stmt.Get(&user2, "SELECT * FROM users WHERE id = 1") // $ source
215+
216+
var user3 User
217+
stmt.GetContext(nil, &user3, "SELECT * FROM users WHERE id = 1") // $ source
218+
219+
var user4 User
220+
stmt.Select(&user4, "SELECT * FROM users WHERE id = 1") // $ source
221+
}
222+
223+
func test_sqlx_NamedStmt(stmt *sqlx.NamedStmt) {
224+
example, err := stmt.Query("SELECT * FROM users") // $ source
225+
ignore(example, err)
226+
227+
rows, err := stmt.Queryx("SELECT * FROM users") // $ source
228+
229+
if err != nil {
230+
return
231+
}
232+
233+
defer rows.Close()
234+
235+
for rows.Next() {
236+
var id int
237+
var name string
238+
err = rows.Scan(&id, &name)
239+
240+
if err != nil {
241+
return
242+
}
243+
244+
sink(id, name) // $ hasTaintFlow="id" hasTaintFlow="name"
245+
246+
valmap := make(map[string]interface{})
247+
rows.MapScan(valmap)
248+
249+
id = valmap["id"].(int)
250+
sink(id) // $ hasTaintFlow="id"
251+
252+
var user User
253+
rows.StructScan(&user)
254+
sink(user) // $ hasTaintFlow="user"
255+
}
256+
257+
row := stmt.QueryRowx("SELECT * FROM users WHERE id = 1") // $ source
258+
259+
userMap := make(map[string]interface{})
260+
row.MapScan(userMap)
261+
262+
id := userMap["id"].(int)
263+
sink(id) // $ hasTaintFlow="id"
264+
265+
var user User
266+
row.StructScan(&user)
267+
sink(user) // $ hasTaintFlow="user"
268+
269+
var user2 User
270+
stmt.Get(&user2, "SELECT * FROM users WHERE id = 1") // $ source
271+
272+
var user3 User
273+
stmt.GetContext(nil, &user3, "SELECT * FROM users WHERE id = 1") // $ source
274+
275+
var user4 User
276+
stmt.Select(&user4, "SELECT * FROM users WHERE id = 1") // $ source
277+
}

0 commit comments

Comments
 (0)