@@ -523,7 +523,8 @@ var zeroDateTime = []byte("0000-00-00 00:00:00.000000")
523523func formatBinaryDateTime (src []byte , length uint8 , justTime bool ) (driver.Value , error ) {
524524 // length expects the deterministic length of the zero value,
525525 // negative time and 100+ hours are automatically added if needed
526- const pairs = "00010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899"
526+ const digits01 = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
527+ const digits10 = "0000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999"
527528 if len (src ) == 0 {
528529 if justTime {
529530 return zeroDateTime [11 : 11 + length ], nil
@@ -555,7 +556,7 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
555556 hour := uint16 (src [1 ])* 24 + uint16 (src [5 ])
556557 pt = byte (hour / 100 )
557558 p1 = byte (hour - 100 * uint16 (pt ))
558- dst = append (dst , '0' + pt )
559+ dst = append (dst , digits01 [ pt ] )
559560 } else {
560561 p1 = src [5 ]
561562 }
@@ -587,10 +588,10 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
587588 p1 = byte (year - 100 * uint16 (pt ))
588589 p2 , p3 = src [2 ], src [3 ]
589590 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 ],
594595 )
595596 if length == 10 {
596597 return dst , nil
@@ -605,9 +606,9 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
605606 // p1 is 2-digit hour, src is after hour
606607 p2 , p3 = src [0 ], src [1 ]
607608 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 ],
611612 )
612613 if length <= byte (len (dst )) {
613614 return dst , nil
@@ -625,33 +626,33 @@ func formatBinaryDateTime(src []byte, length uint8, justTime bool) (driver.Value
625626 switch decimals := zOffs + length - 20 ; decimals {
626627 default :
627628 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 ],
631632 ), nil
632633 case 1 :
633634 return append (dst , '.' ,
634- pairs [ 2 * p1 ],
635+ digits10 [ p1 ],
635636 ), nil
636637 case 2 :
637638 return append (dst , '.' ,
638- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
639+ digits10 [ p1 ], digits01 [ p1 ],
639640 ), nil
640641 case 3 :
641642 return append (dst , '.' ,
642- pairs [ 2 * p1 ], pairs [ 2 * p1 + 1 ],
643- pairs [ 2 * p2 ],
643+ digits10 [ p1 ], digits01 [ p1 ],
644+ digits10 [ p2 ],
644645 ), nil
645646 case 4 :
646647 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 ],
649650 ), nil
650651 case 5 :
651652 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 ],
655656 ), nil
656657 }
657658}
0 commit comments