@@ -314,20 +314,101 @@ func TestNULL(t *testing.T) {
314314
315315 defer db .Close ()
316316
317- stmt , err := db .Prepare ("SELECT NULL" )
317+ nullStmt , err := db .Prepare ("SELECT NULL" )
318318 if err != nil {
319319 t .Fatal (err )
320320 }
321- defer stmt .Close ()
321+ defer nullStmt .Close ()
322322
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
323393 var ns sql.NullString
324- err = stmt .QueryRow ().Scan (& ns )
394+ // Invalid
395+ err = nullStmt .QueryRow ().Scan (& ns )
325396 if err != nil {
326397 t .Fatal (err )
327398 }
328399 if ns .Valid {
329400 t .Error ("Valid NullString which should be invalid" )
330401 }
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+ }
331412}
332413
333414// Special cases
0 commit comments