@@ -314,20 +314,101 @@ func TestNULL(t *testing.T) {
314
314
315
315
defer db .Close ()
316
316
317
- stmt , err := db .Prepare ("SELECT NULL" )
317
+ nullStmt , err := db .Prepare ("SELECT NULL" )
318
318
if err != nil {
319
319
t .Fatal (err )
320
320
}
321
- defer stmt .Close ()
321
+ defer nullStmt .Close ()
322
322
323
+ nonNullStmt , err := db .Prepare ("SELECT 1" )
324
+ if err != nil {
325
+ t .Fatal (err )
326
+ }
327
+ defer nonNullStmt .Close ()
328
+
329
+ // NullBool
330
+ var nb sql.NullBool
331
+ // Invalid
332
+ err = nullStmt .QueryRow ().Scan (& nb )
333
+ if err != nil {
334
+ t .Fatal (err )
335
+ }
336
+ if nb .Valid {
337
+ t .Error ("Valid NullBool which should be invalid" )
338
+ }
339
+ // Valid
340
+ err = nonNullStmt .QueryRow ().Scan (& nb )
341
+ if err != nil {
342
+ t .Fatal (err )
343
+ }
344
+ if ! nb .Valid {
345
+ t .Error ("Invalid NullBool which should be valid" )
346
+ } else if nb .Bool != true {
347
+ t .Errorf ("Unexpected NullBool value: %t (should be true)" , nb .Bool )
348
+ }
349
+
350
+ // NullFloat64
351
+ var nf sql.NullFloat64
352
+ // Invalid
353
+ err = nullStmt .QueryRow ().Scan (& nf )
354
+ if err != nil {
355
+ t .Fatal (err )
356
+ }
357
+ if nf .Valid {
358
+ t .Error ("Valid NullFloat64 which should be invalid" )
359
+ }
360
+ // Valid
361
+ err = nonNullStmt .QueryRow ().Scan (& nf )
362
+ if err != nil {
363
+ t .Fatal (err )
364
+ }
365
+ if ! nf .Valid {
366
+ t .Error ("Invalid NullFloat64 which should be valid" )
367
+ } else if nf .Float64 != float64 (1 ) {
368
+ t .Errorf ("Unexpected NullFloat64 value: %f (should be 1.0)" , nf .Float64 )
369
+ }
370
+
371
+ // NullInt64
372
+ var ni sql.NullInt64
373
+ // Invalid
374
+ err = nullStmt .QueryRow ().Scan (& ni )
375
+ if err != nil {
376
+ t .Fatal (err )
377
+ }
378
+ if ni .Valid {
379
+ t .Error ("Valid NullInt64 which should be invalid" )
380
+ }
381
+ // Valid
382
+ err = nonNullStmt .QueryRow ().Scan (& ni )
383
+ if err != nil {
384
+ t .Fatal (err )
385
+ }
386
+ if ! ni .Valid {
387
+ t .Error ("Invalid NullInt64 which should be valid" )
388
+ } else if ni .Int64 != int64 (1 ) {
389
+ t .Errorf ("Unexpected NullInt64 value: %d (should be 1)" , ni .Int64 )
390
+ }
391
+
392
+ // NullString
323
393
var ns sql.NullString
324
- err = stmt .QueryRow ().Scan (& ns )
394
+ // Invalid
395
+ err = nullStmt .QueryRow ().Scan (& ns )
325
396
if err != nil {
326
397
t .Fatal (err )
327
398
}
328
399
if ns .Valid {
329
400
t .Error ("Valid NullString which should be invalid" )
330
401
}
402
+ // Valid
403
+ err = nonNullStmt .QueryRow ().Scan (& ns )
404
+ if err != nil {
405
+ t .Fatal (err )
406
+ }
407
+ if ! ns .Valid {
408
+ t .Error ("Invalid NullString which should be valid" )
409
+ } else if ns .String != `1` {
410
+ t .Error ("Unexpected NullString value:" + ns .String + " (should be `1`)" )
411
+ }
331
412
}
332
413
333
414
// Special cases
0 commit comments