@@ -373,9 +373,6 @@ func (t timeTest) genQuery(dbtype string, mode timeMode) string {
373
373
} else {
374
374
inner = `"%s"`
375
375
}
376
- if len (dbtype ) >= 9 && dbtype [:9 ] == "TIMESTAMP" {
377
- return `SELECT timestampadd(second,0,cast(` + inner + ` as DATETIME` + dbtype [9 :] + `))`
378
- }
379
376
return `SELECT cast(` + inner + ` as ` + dbtype + `)`
380
377
}
381
378
@@ -453,7 +450,6 @@ func TestDateTime(t *testing.T) {
453
450
// NOTE: MySQL rounds DATETIME(x) up - but that's not included in the tests
454
451
format := "2006-01-02 15:04:05.999999"
455
452
t0 := time.Time {}
456
- ts0 := time .Date (1970 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC )
457
453
tstr0 := "0000-00-00 00:00:00.000000"
458
454
testcases := []timeTests {
459
455
{"DATE" , format [:10 ], []timeTest {
@@ -504,44 +500,29 @@ func TestDateTime(t *testing.T) {
504
500
{s : "!838:59:58.999999" },
505
501
{t : t0 , s : tstr0 [11 :]},
506
502
}},
507
- {"TIMESTAMP" , format [:19 ], []timeTest {
508
- {t : afterTime (ts0 , "12345s" )},
509
- {t : ts0 , s : "1970-01-01 00:00:00" },
510
- }},
511
- {"TIMESTAMP(0)" , format [:19 ], []timeTest {
512
- {t : afterTime (ts0 , "12345s" )},
513
- {t : ts0 , s : "1970-01-01 00:00:00" },
514
- }},
515
- {"TIMESTAMP(1)" , format [:21 ], []timeTest {
516
- {t : afterTime (ts0 , "12345600ms" )},
517
- {t : ts0 , s : "1970-01-01 00:00:00.0" },
518
- }},
519
- {"TIMESTAMP(6)" , format , []timeTest {
520
- {t : afterTime (ts0 , "1234567890123000ns" )},
521
- {t : ts0 , s : "1970-01-01 00:00:00.000000" },
522
- }},
523
503
}
524
504
dsns := []string {
525
505
dsn + "&parseTime=true" ,
526
506
dsn + "&parseTime=false" ,
527
507
}
528
508
for _ , testdsn := range dsns {
529
509
runTests (t , testdsn , func (dbt * DBTest ) {
530
- var withFrac , allowsZero bool
510
+ microsecsSupported := false
511
+ zeroDateSupported := false
531
512
var rows * sql.Rows
532
513
var err error
533
514
rows , err = dbt .db .Query (`SELECT cast("00:00:00.1" as TIME(1)) = "00:00:00.1"` )
534
515
if err == nil {
535
- rows .Scan (& withFrac )
516
+ rows .Scan (& microsecsSupported )
536
517
rows .Close ()
537
518
}
538
519
rows , err = dbt .db .Query (`SELECT cast("0000-00-00" as DATE) = "0000-00-00"` )
539
520
if err == nil {
540
- rows .Scan (& allowsZero )
521
+ rows .Scan (& zeroDateSupported )
541
522
rows .Close ()
542
523
}
543
524
for _ , setups := range testcases {
544
- if t := setups .dbtype ; ! withFrac && t [len (t )- 1 :] == ")" {
525
+ if t := setups .dbtype ; ! microsecsSupported && t [len (t )- 1 :] == ")" {
545
526
// skip fractional second tests if unsupported by server
546
527
continue
547
528
}
@@ -556,7 +537,7 @@ func TestDateTime(t *testing.T) {
556
537
// fix setup.s - remove the "!"
557
538
setup .s = setup .s [1 :]
558
539
}
559
- if ! allowsZero && setup .s == tstr0 [:len (setup .s )] {
540
+ if ! zeroDateSupported && setup .s == tstr0 [:len (setup .s )] {
560
541
// skip disallowed 0000-00-00 date
561
542
continue
562
543
}
@@ -917,6 +898,17 @@ func TestFoundRows(t *testing.T) {
917
898
func TestStrict (t * testing.T ) {
918
899
// ALLOW_INVALID_DATES to get rid of stricter modes - we want to test for warnings, not errors
919
900
relaxedDsn := dsn + "&sql_mode=ALLOW_INVALID_DATES"
901
+ // make sure the MySQL version is recent enough with a separate connection
902
+ // before running the test
903
+ conn , err := MySQLDriver {}.Open (relaxedDsn )
904
+ if conn != nil {
905
+ conn .Close ()
906
+ }
907
+ if me , ok := err .(* MySQLError ); ok && me .Number == 1231 {
908
+ // Error 1231: Variable 'sql_mode' can't be set to the value of 'ALLOW_INVALID_DATES'
909
+ // => skip test, MySQL server version is too old
910
+ return
911
+ }
920
912
runTests (t , relaxedDsn , func (dbt * DBTest ) {
921
913
dbt .mustExec ("CREATE TABLE test (a TINYINT NOT NULL, b CHAR(4))" )
922
914
@@ -1107,7 +1099,7 @@ func TestCollation(t *testing.T) {
1107
1099
"latin1_general_ci" ,
1108
1100
"binary" ,
1109
1101
"utf8_unicode_ci" ,
1110
- "utf8mb4_general_ci " ,
1102
+ "cp1257_bin " ,
1111
1103
}
1112
1104
1113
1105
for _ , collation := range testCollations {
0 commit comments