@@ -552,6 +552,58 @@ func TestDateTime(t *testing.T) {
552
552
}
553
553
}
554
554
555
+ func TestTimestampMicros (t * testing.T ) {
556
+ format := "2006-01-02 15:04:05.999999"
557
+ f0 := format [:19 ]
558
+ f1 := format [:21 ]
559
+ f6 := format [:26 ]
560
+ runTests (t , dsn , func (dbt * DBTest ) {
561
+ // check if microseconds are supported.
562
+ // Do not use timestamp(x) for that check - before 5.5.6, x would mean display width
563
+ // and not precision.
564
+ // Se last paragraph at http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html
565
+ microsecsSupported := false
566
+ if rows , err := dbt .db .Query (`SELECT cast("00:00:00.1" as TIME(1)) = "00:00:00.1"` ); err == nil {
567
+ rows .Scan (& microsecsSupported )
568
+ rows .Close ()
569
+ }
570
+ if ! microsecsSupported {
571
+ // skip test
572
+ return
573
+ }
574
+ _ , err := dbt .db .Exec (`
575
+ CREATE TABLE test (
576
+ value0 TIMESTAMP NOT NULL DEFAULT '` + f0 + `',
577
+ value1 TIMESTAMP(1) NOT NULL DEFAULT '` + f1 + `',
578
+ value6 TIMESTAMP(6) NOT NULL DEFAULT '` + f6 + `'
579
+ )` ,
580
+ )
581
+ if err != nil {
582
+ dbt .Error (err )
583
+ }
584
+ defer dbt .mustExec ("DROP TABLE IF EXISTS test" )
585
+ dbt .mustExec ("INSERT INTO test SET value0=?, value1=?, value6=?" , f0 , f1 , f6 )
586
+ var res0 , res1 , res6 string
587
+ rows := dbt .mustQuery ("SELECT * FROM test" )
588
+ if ! rows .Next () {
589
+ dbt .Errorf ("test contained no selectable values" )
590
+ }
591
+ err = rows .Scan (& res0 , & res1 , & res6 )
592
+ if err != nil {
593
+ dbt .Error (err )
594
+ }
595
+ if res0 != f0 {
596
+ dbt .Errorf ("expected %q, got %q" , f0 , res0 )
597
+ }
598
+ if res1 != f1 {
599
+ dbt .Errorf ("expected %q, got %q" , f1 , res1 )
600
+ }
601
+ if res6 != f6 {
602
+ dbt .Errorf ("expected %q, got %q" , f6 , res6 )
603
+ }
604
+ })
605
+ }
606
+
555
607
func TestNULL (t * testing.T ) {
556
608
runTests (t , dsn , func (dbt * DBTest ) {
557
609
nullStmt , err := dbt .db .Prepare ("SELECT NULL" )
0 commit comments