@@ -523,7 +523,8 @@ var zeroDateTime = []byte("0000-00-00 00:00:00.000000")
523
523
func formatBinaryDateTime (src []byte , length uint8 , justTime bool ) (driver.Value , error ) {
524
524
// length expects the deterministic length of the zero value,
525
525
// negative time and 100+ hours are automatically added if needed
526
- const pairs = "00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"
526
+ const digits01 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
527
+ const digits10 = "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
527
528
if len (src ) == 0 {
528
529
if justTime {
529
530
return zeroDateTime [11 : 11 + length ], nil
@@ -555,7 +556,7 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
555
556
hour := uint16 (src [1 ])* 24 + uint16 (src [5 ])
556
557
pt = byte (hour / 100 )
557
558
p1 = byte (hour - 100 * uint16 (pt ))
558
- dst = append (dst , '0' + pt )
559
+ dst = append (dst , digits01 [ pt ] )
559
560
} else {
560
561
p1 = src [5 ]
561
562
}
@@ -587,10 +588,10 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
587
588
p1 = byte (year - 100 * uint16 (pt ))
588
589
p2 , p3 = src [2 ], src [3 ]
589
590
dst = append (dst ,
590
- pairs [ 2 * pt ], pairs [ 2 * pt + 1 ],
591
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ], '-' ,
592
- pairs [ 2 * p2 ], pairs [ 2 * p2 + 1 ], '-' ,
593
- pairs [ 2 * p3 ], pairs [ 2 * p3 + 1 ],
591
+ digits10 [ pt ], digits01 [ pt ],
592
+ digits10 [ p1 ], digits01 [ p1 ], '-' ,
593
+ digits10 [ p2 ], digits01 [ p2 ], '-' ,
594
+ digits10 [ p3 ], digits01 [ p3 ],
594
595
)
595
596
if length == 10 {
596
597
return dst , nil
@@ -605,9 +606,9 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
605
606
// p1 is 2-digit hour, src is after hour
606
607
p2 , p3 = src [0 ], src [1 ]
607
608
dst = append (dst ,
608
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ], ':' ,
609
- pairs [ 2 * p2 ], pairs [ 2 * p2 + 1 ], ':' ,
610
- pairs [ 2 * p3 ], pairs [ 2 * p3 + 1 ],
609
+ digits10 [ p1 ], digits01 [ p1 ], ':' ,
610
+ digits10 [ p2 ], digits01 [ p2 ], ':' ,
611
+ digits10 [ p3 ], digits01 [ p3 ],
611
612
)
612
613
if length <= byte (len (dst )) {
613
614
return dst , nil
@@ -625,33 +626,33 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
625
626
switch decimals := zOffs + length - 20 ; decimals {
626
627
default :
627
628
return append (dst , '.' ,
628
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
629
- pairs [ 2 * p2 ], pairs [ 2 * p2 + 1 ],
630
- pairs [ 2 * p3 ], pairs [ 2 * p3 + 1 ],
629
+ digits10 [ p1 ], digits01 [ p1 ],
630
+ digits10 [ p2 ], digits01 [ p2 ],
631
+ digits10 [ p3 ], digits01 [ p3 ],
631
632
), nil
632
633
case 1 :
633
634
return append (dst , '.' ,
634
- pairs [ 2 * p1 ],
635
+ digits10 [ p1 ],
635
636
), nil
636
637
case 2 :
637
638
return append (dst , '.' ,
638
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
639
+ digits10 [ p1 ], digits01 [ p1 ],
639
640
), nil
640
641
case 3 :
641
642
return append (dst , '.' ,
642
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
643
- pairs [ 2 * p2 ],
643
+ digits10 [ p1 ], digits01 [ p1 ],
644
+ digits10 [ p2 ],
644
645
), nil
645
646
case 4 :
646
647
return append (dst , '.' ,
647
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
648
- pairs [ 2 * p2 ], pairs [ 2 * p2 + 1 ],
648
+ digits10 [ p1 ], digits01 [ p1 ],
649
+ digits10 [ p2 ], digits01 [ p2 ],
649
650
), nil
650
651
case 5 :
651
652
return append (dst , '.' ,
652
- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
653
- pairs [ 2 * p2 ], pairs [ 2 * p2 + 1 ],
654
- pairs [ 2 * p3 ],
653
+ digits10 [ p1 ], digits01 [ p1 ],
654
+ digits10 [ p2 ], digits01 [ p2 ],
655
+ digits10 [ p3 ],
655
656
), nil
656
657
}
657
658
}
0 commit comments