LEFT | RIGHT |
(no file at all) | |
1 // Copyright 2011 The Go Authors. All rights reserved. | 1 // Copyright 2011 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 package sql | 5 package sql |
6 | 6 |
7 import ( | 7 import ( |
8 "reflect" | 8 "reflect" |
9 "strings" | 9 "strings" |
10 "testing" | 10 "testing" |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 if err != nil { | 65 if err != nil { |
66 t.Fatalf("Err: %v", err) | 66 t.Fatalf("Err: %v", err) |
67 } | 67 } |
68 want := []row{ | 68 want := []row{ |
69 {age: 1, name: "Alice"}, | 69 {age: 1, name: "Alice"}, |
70 {age: 2, name: "Bob"}, | 70 {age: 2, name: "Bob"}, |
71 {age: 3, name: "Chris"}, | 71 {age: 3, name: "Chris"}, |
72 } | 72 } |
73 if !reflect.DeepEqual(got, want) { | 73 if !reflect.DeepEqual(got, want) { |
74 t.Logf(" got: %#v\nwant: %#v", got, want) | 74 t.Logf(" got: %#v\nwant: %#v", got, want) |
| 75 } |
| 76 } |
| 77 |
| 78 func TestRowsColumns(t *testing.T) { |
| 79 db := newTestDB(t, "people") |
| 80 defer closeDB(t, db) |
| 81 rows, err := db.Query("SELECT|people|age,name|") |
| 82 if err != nil { |
| 83 t.Fatalf("Query: %v", err) |
| 84 } |
| 85 cols, err := rows.Columns() |
| 86 if err != nil { |
| 87 t.Fatalf("Columns: %v", err) |
| 88 } |
| 89 want := []string{"age", "name"} |
| 90 if !reflect.DeepEqual(cols, want) { |
| 91 t.Errorf("got %#v; want %#v", cols, want) |
75 } | 92 } |
76 } | 93 } |
77 | 94 |
78 func TestQueryRow(t *testing.T) { | 95 func TestQueryRow(t *testing.T) { |
79 db := newTestDB(t, "people") | 96 db := newTestDB(t, "people") |
80 defer closeDB(t, db) | 97 defer closeDB(t, db) |
81 var name string | 98 var name string |
82 var age int | 99 var age int |
83 | 100 |
84 err := db.QueryRow("SELECT|people|age,name|age=?", 3).Scan(&age) | 101 err := db.QueryRow("SELECT|people|age,name|age=?", 3).Scan(&age) |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 wantErr string | 197 wantErr string |
181 } | 198 } |
182 execTests := []execTest{ | 199 execTests := []execTest{ |
183 // Okay: | 200 // Okay: |
184 {[]interface{}{"Brad", 31}, ""}, | 201 {[]interface{}{"Brad", 31}, ""}, |
185 {[]interface{}{"Brad", int64(31)}, ""}, | 202 {[]interface{}{"Brad", int64(31)}, ""}, |
186 {[]interface{}{"Bob", "32"}, ""}, | 203 {[]interface{}{"Bob", "32"}, ""}, |
187 {[]interface{}{7, 9}, ""}, | 204 {[]interface{}{7, 9}, ""}, |
188 | 205 |
189 // Invalid conversions: | 206 // Invalid conversions: |
190 » » {[]interface{}{"Brad", int64(0xFFFFFFFF)}, "db: converting Exec
argument #1's type: sql/driver: value 4294967295 overflows int32"}, | 207 » » {[]interface{}{"Brad", int64(0xFFFFFFFF)}, "sql: converting Exec
argument #1's type: sql/driver: value 4294967295 overflows int32"}, |
191 » » {[]interface{}{"Brad", "strconv fail"}, "db: converting Exec arg
ument #1's type: sql/driver: value \"strconv fail\" can't be converted to int32"
}, | 208 » » {[]interface{}{"Brad", "strconv fail"}, "sql: converting Exec ar
gument #1's type: sql/driver: value \"strconv fail\" can't be converted to int32
"}, |
192 | 209 |
193 // Wrong number of args: | 210 // Wrong number of args: |
194 » » {[]interface{}{}, "db: expected 2 arguments, got 0"}, | 211 » » {[]interface{}{}, "sql: expected 2 arguments, got 0"}, |
195 » » {[]interface{}{1, 2, 3}, "db: expected 2 arguments, got 3"}, | 212 » » {[]interface{}{1, 2, 3}, "sql: expected 2 arguments, got 3"}, |
196 } | 213 } |
197 for n, et := range execTests { | 214 for n, et := range execTests { |
198 _, err := stmt.Exec(et.args...) | 215 _, err := stmt.Exec(et.args...) |
199 errStr := "" | 216 errStr := "" |
200 if err != nil { | 217 if err != nil { |
201 errStr = err.Error() | 218 errStr = err.Error() |
202 } | 219 } |
203 if errStr != et.wantErr { | 220 if errStr != et.wantErr { |
204 t.Errorf("stmt.Execute #%d: for %v, got error %q, want e
rror %q", | 221 t.Errorf("stmt.Execute #%d: for %v, got error %q, want e
rror %q", |
205 n, et.args, errStr, et.wantErr) | 222 n, et.args, errStr, et.wantErr) |
(...skipping 28 matching lines...) Expand all Loading... |
234 func TestIssue2542Deadlock(t *testing.T) { | 251 func TestIssue2542Deadlock(t *testing.T) { |
235 db := newTestDB(t, "people") | 252 db := newTestDB(t, "people") |
236 closeDB(t, db) | 253 closeDB(t, db) |
237 for i := 0; i < 2; i++ { | 254 for i := 0; i < 2; i++ { |
238 _, err := db.Query("SELECT|people|age,name|") | 255 _, err := db.Query("SELECT|people|age,name|") |
239 if err == nil { | 256 if err == nil { |
240 t.Fatalf("expected error") | 257 t.Fatalf("expected error") |
241 } | 258 } |
242 } | 259 } |
243 } | 260 } |
LEFT | RIGHT |