@@ -338,9 +338,37 @@ type timeTest struct {
338
338
t time.Time
339
339
}
340
340
341
- func (t timeTest ) genQuery (dbtype string , binaryProtocol bool ) string {
341
+ type timeMode byte
342
+
343
+ func (t timeMode ) String () string {
344
+ switch t {
345
+ case binaryString :
346
+ return "binary:string"
347
+ case binaryTime :
348
+ return "binary:time.Time"
349
+ case textString :
350
+ return "text:string"
351
+ }
352
+ panic ("unsupported timeMode" )
353
+ }
354
+
355
+ func (t timeMode ) Binary () bool {
356
+ switch t {
357
+ case binaryString , binaryTime :
358
+ return true
359
+ }
360
+ return false
361
+ }
362
+
363
+ const (
364
+ binaryString timeMode = iota
365
+ binaryTime
366
+ textString
367
+ )
368
+
369
+ func (t timeTest ) genQuery (dbtype string , mode timeMode ) string {
342
370
var inner string
343
- if binaryProtocol {
371
+ if mode . Binary () {
344
372
inner = "?"
345
373
} else {
346
374
inner = `"%s"`
@@ -351,17 +379,15 @@ func (t timeTest) genQuery(dbtype string, binaryProtocol bool) string {
351
379
return `SELECT CAST(` + inner + ` AS ` + dbtype + `)`
352
380
}
353
381
354
- func (t timeTest ) run (dbt * DBTest , dbtype , tlayout string , mode int ) {
382
+ func (t timeTest ) run (dbt * DBTest , dbtype , tlayout string , mode timeMode ) {
355
383
var rows * sql.Rows
356
- query := t .genQuery (dbtype , mode < 2 )
357
- var protocol = "binary"
384
+ query := t .genQuery (dbtype , mode )
358
385
switch mode {
359
- case 0 :
386
+ case binaryString :
360
387
rows = dbt .mustQuery (query , t .s )
361
- case 1 :
388
+ case binaryTime :
362
389
rows = dbt .mustQuery (query , t .t )
363
- case 2 :
364
- protocol = "text"
390
+ case textString :
365
391
query = fmt .Sprintf (query , t .s )
366
392
rows = dbt .mustQuery (query )
367
393
default :
@@ -374,13 +400,13 @@ func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode int) {
374
400
if err == nil {
375
401
err = fmt .Errorf ("no data" )
376
402
}
377
- dbt .Errorf ("%s [%s]: %s" , dbtype , protocol , err )
403
+ dbt .Errorf ("%s [%s]: %s" , dbtype , mode , err )
378
404
return
379
405
}
380
406
var dst interface {}
381
407
err = rows .Scan (& dst )
382
408
if err != nil {
383
- dbt .Errorf ("%s [%s]: %s" , dbtype , protocol , err )
409
+ dbt .Errorf ("%s [%s]: %s" , dbtype , mode , err )
384
410
return
385
411
}
386
412
switch val := dst .(type ) {
@@ -389,22 +415,22 @@ func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode int) {
389
415
if str == t .s {
390
416
return
391
417
}
392
- dbt .Errorf ("%s to string [%s]: expected %q, got %q" ,
393
- dbtype , protocol ,
418
+ dbt .Errorf ("%s [%s] to string : expected %q, got %q" ,
419
+ dbtype , mode ,
394
420
t .s , str ,
395
421
)
396
422
case time.Time :
397
423
if val == t .t {
398
424
return
399
425
}
400
- dbt .Errorf ("%s to string [%s]: expected %q, got %q" ,
401
- dbtype , protocol ,
426
+ dbt .Errorf ("%s [%s] to string : expected %q, got %q" ,
427
+ dbtype , mode ,
402
428
t .s , val .Format (tlayout ),
403
429
)
404
430
default :
405
431
fmt .Printf ("%#v\n " , []interface {}{dbtype , tlayout , mode , t .s , t .t })
406
432
dbt .Errorf ("%s [%s]: unhandled type %T (is '%v')" ,
407
- dbtype , protocol ,
433
+ dbtype , mode ,
408
434
val , val ,
409
435
)
410
436
}
@@ -514,25 +540,25 @@ func TestDateTime(t *testing.T) {
514
540
continue
515
541
}
516
542
for _ , setup := range setups .tests {
517
- timeArgBinary := true
543
+ allowBinTime := true
518
544
if setup .s == "" {
519
545
// fill time string whereever Go can reliable produce it
520
546
setup .s = setup .t .Format (setups .tlayout )
521
547
} else if setup .s [0 ] == '!' {
522
548
// skip tests using setup.t as source in queries
523
- timeArgBinary = false
549
+ allowBinTime = false
524
550
// fix setup.s - remove the "!"
525
551
setup .s = setup .s [1 :]
526
552
}
527
553
if ! allowsZero && setup .s == tstr0 [:len (setup .s )] {
528
554
// skip disallowed 0000-00-00 date
529
555
continue
530
556
}
531
- setup .run (dbt , setups .dbtype , setups .tlayout , 0 )
532
- if timeArgBinary {
533
- setup .run (dbt , setups .dbtype , setups .tlayout , 1 )
557
+ setup .run (dbt , setups .dbtype , setups .tlayout , textString )
558
+ setup .run (dbt , setups .dbtype , setups .tlayout , binaryString )
559
+ if allowBinTime {
560
+ setup .run (dbt , setups .dbtype , setups .tlayout , binaryTime )
534
561
}
535
- setup .run (dbt , setups .dbtype , setups .tlayout , 2 )
536
562
}
537
563
}
538
564
})
0 commit comments