@@ -92,7 +92,7 @@ func (dbt *DBTest) fail(method, query string, err error) {
92
92
if len (query ) > 300 {
93
93
query = "[query too large to print]"
94
94
}
95
- dbt .Fatalf ("error on %s %s : %s" , method , query , err .Error ())
95
+ dbt .Fatalf ("error on %s [%s] : %s" , method , query , err .Error ())
96
96
}
97
97
98
98
func (dbt * DBTest ) mustExec (query string , args ... interface {}) (res sql.Result ) {
@@ -119,6 +119,22 @@ func runTests(t *testing.T, dsn string, tests ...func(dbt *DBTest)) {
119
119
}
120
120
}
121
121
122
+ func TestEmptyQuery (t * testing.T ) {
123
+ runTests (t , dsn , func (dbt * DBTest ) {
124
+ query := "--"
125
+ // just a comment, no query
126
+ _ , err := dbt .db .Query (query )
127
+ if err == nil {
128
+ dbt .fail ("query" , query , err )
129
+ }
130
+ if driverErr , ok := err .(* SnowflakeError ); ok {
131
+ if driverErr .Number != 900 { // syntax error
132
+ dbt .fail ("query" , query , err )
133
+ }
134
+ }
135
+ })
136
+ }
137
+
122
138
func TestCRUD (t * testing.T ) {
123
139
runTests (t , dsn , func (dbt * DBTest ) {
124
140
// Create Table
@@ -211,3 +227,148 @@ func TestCRUD(t *testing.T) {
211
227
}
212
228
})
213
229
}
230
+
231
+ func TestInt (t * testing.T ) {
232
+ runTests (t , dsn , func (dbt * DBTest ) {
233
+ types := []string {"INT" , "INTEGER" }
234
+ in := int64 (42 )
235
+ var out int64
236
+ var rows * sql.Rows
237
+
238
+ // SIGNED
239
+ for _ , v := range types {
240
+ dbt .mustExec ("CREATE TABLE test (value " + v + ")" )
241
+
242
+ dbt .mustExec ("INSERT INTO test VALUES (?)" , in )
243
+
244
+ rows = dbt .mustQuery ("SELECT value FROM test" )
245
+ if rows .Next () {
246
+ rows .Scan (& out )
247
+ if in != out {
248
+ dbt .Errorf ("%s: %d != %d" , v , in , out )
249
+ }
250
+ } else {
251
+ dbt .Errorf ("%s: no data" , v )
252
+ }
253
+
254
+ dbt .mustExec ("DROP TABLE IF EXISTS test" )
255
+ }
256
+ })
257
+ }
258
+
259
+ func TestFloat32 (t * testing.T ) {
260
+ runTests (t , dsn , func (dbt * DBTest ) {
261
+ types := [2 ]string {"FLOAT" , "DOUBLE" }
262
+ in := float32 (42.23 )
263
+ var out float32
264
+ var rows * sql.Rows
265
+ for _ , v := range types {
266
+ dbt .mustExec ("CREATE TABLE test (value " + v + ")" )
267
+ dbt .mustExec ("INSERT INTO test VALUES (?)" , in )
268
+ rows = dbt .mustQuery ("SELECT value FROM test" )
269
+ if rows .Next () {
270
+ rows .Scan (& out )
271
+ if in != out {
272
+ dbt .Errorf ("%s: %g != %g" , v , in , out )
273
+ }
274
+ } else {
275
+ dbt .Errorf ("%s: no data" , v )
276
+ }
277
+ dbt .mustExec ("DROP TABLE IF EXISTS test" )
278
+ }
279
+ })
280
+ }
281
+
282
+ func TestFloat64 (t * testing.T ) {
283
+ runTests (t , dsn , func (dbt * DBTest ) {
284
+ types := [2 ]string {"FLOAT" , "DOUBLE" }
285
+ var expected float64 = 42.23
286
+ var out float64
287
+ var rows * sql.Rows
288
+ for _ , v := range types {
289
+ dbt .mustExec ("CREATE TABLE test (value " + v + ")" )
290
+ dbt .mustExec ("INSERT INTO test VALUES (42.23)" )
291
+ rows = dbt .mustQuery ("SELECT value FROM test" )
292
+ if rows .Next () {
293
+ rows .Scan (& out )
294
+ if expected != out {
295
+ dbt .Errorf ("%s: %g != %g" , v , expected , out )
296
+ }
297
+ } else {
298
+ dbt .Errorf ("%s: no data" , v )
299
+ }
300
+ dbt .mustExec ("DROP TABLE IF EXISTS test" )
301
+ }
302
+ })
303
+ }
304
+
305
+ func TestFloat64Placeholder (t * testing.T ) {
306
+ runTests (t , dsn , func (dbt * DBTest ) {
307
+ types := [2 ]string {"FLOAT" , "DOUBLE" }
308
+ var expected float64 = 42.23
309
+ var out float64
310
+ var rows * sql.Rows
311
+ for _ , v := range types {
312
+ dbt .mustExec ("CREATE TABLE test (id int, value " + v + ")" )
313
+ dbt .mustExec ("INSERT INTO test VALUES (1, 42.23)" )
314
+ rows = dbt .mustQuery ("SELECT value FROM test WHERE id = ?" , 1 )
315
+ if rows .Next () {
316
+ rows .Scan (& out )
317
+ if expected != out {
318
+ dbt .Errorf ("%s: %g != %g" , v , expected , out )
319
+ }
320
+ } else {
321
+ dbt .Errorf ("%s: no data" , v )
322
+ }
323
+ dbt .mustExec ("DROP TABLE IF EXISTS test" )
324
+ }
325
+ })
326
+ }
327
+
328
+ func TestString (t * testing.T ) {
329
+ runTests (t , dsn , func (dbt * DBTest ) {
330
+ types := []string {"CHAR(255)" , "VARCHAR(255)" , "TEXT" , "STRING" }
331
+ in := "κόσμε üöäßñóùéàâÿœ'îë Árvíztűrő いろはにほへとちりぬるを イロハニホヘト דג סקרן чащах น่าฟังเอย"
332
+ var out string
333
+ var rows * sql.Rows
334
+
335
+ for _ , v := range types {
336
+ dbt .mustExec ("CREATE TABLE test (value " + v + ")" )
337
+
338
+ dbt .mustExec ("INSERT INTO test VALUES (?)" , in )
339
+
340
+ rows = dbt .mustQuery ("SELECT value FROM test" )
341
+ if rows .Next () {
342
+ rows .Scan (& out )
343
+ if in != out {
344
+ dbt .Errorf ("%s: %s != %s" , v , in , out )
345
+ }
346
+ } else {
347
+ dbt .Errorf ("%s: no data" , v )
348
+ }
349
+
350
+ dbt .mustExec ("DROP TABLE IF EXISTS test" )
351
+ }
352
+
353
+ // BLOB (Snowflake doesn't support BLOB type but STRING covers large text data)
354
+ dbt .mustExec ("CREATE TABLE test (id int, value STRING)" )
355
+
356
+ id := 2
357
+ in = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " +
358
+ "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
359
+ "sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " +
360
+ "Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. " +
361
+ "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " +
362
+ "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, " +
363
+ "sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. " +
364
+ "Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."
365
+ dbt .mustExec ("INSERT INTO test VALUES (?, ?)" , id , in )
366
+
367
+ err := dbt .db .QueryRow ("SELECT value FROM test WHERE id = ?" , id ).Scan (& out )
368
+ if err != nil {
369
+ dbt .Fatalf ("Error on BLOB-Query: %s" , err .Error ())
370
+ } else if out != in {
371
+ dbt .Errorf ("BLOB: %s != %s" , in , out )
372
+ }
373
+ })
374
+ }
0 commit comments