Browse Source

skip offending test on misbehaving servers

Arne Hormann 11 years ago
parent
commit
7e893ef8a1
2 changed files with 25 additions and 4 deletions
  1. 11 0
      CHANGELOG.md
  2. 14 4
      driver_test.go

+ 11 - 0
CHANGELOG.md

@@ -1,3 +1,14 @@
+## HEAD
+
+Changes:
+
+ - Use decimals field from MySQL to format time types
+
+Bugfixes:
+
+ - Enable microsecond resolution on TIME, DATETIME and TIMESTAMP
+
+
 ## Version 1.2 (2014-06-03)
 
 Changes:

+ 14 - 4
driver_test.go

@@ -374,9 +374,9 @@ func (t timeTest) genQuery(dbtype string, mode timeMode) string {
 		inner = `"%s"`
 	}
 	if len(dbtype) >= 9 && dbtype[:9] == "TIMESTAMP" {
-		return `SELECT TIMESTAMPADD(SECOND,0,CAST(` + inner + ` AS DATETIME` + dbtype[9:] + `))`
+		return `SELECT timestampadd(second,0,cast(` + inner + ` as DATETIME` + dbtype[9:] + `))`
 	}
-	return `SELECT CAST(` + inner + ` AS ` + dbtype + `)`
+	return `SELECT cast(` + inner + ` as ` + dbtype + `)`
 }
 
 func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode timeMode) {
@@ -524,16 +524,23 @@ func TestDateTime(t *testing.T) {
 			var withFrac, allowsZero bool
 			var rows *sql.Rows
 			var err error
-			rows, err = dbt.db.Query(`SELECT CAST("00:00:00.1" AS TIME(1)) = "00:00:00.1"`)
+			rows, err = dbt.db.Query(`SELECT cast("00:00:00.1" as TIME(1)) = "00:00:00.1"`)
 			if err == nil {
 				rows.Scan(&withFrac)
 				rows.Close()
 			}
-			rows, err = dbt.db.Query(`SELECT CAST("0000-00-00" AS DATE) = "0000-00-00"`)
+			rows, err = dbt.db.Query(`SELECT cast("0000-00-00" as DATE) = "0000-00-00"`)
 			if err == nil {
 				rows.Scan(&allowsZero)
 				rows.Close()
 			}
+			// Fix for TravisCI with its "special" MySQL version
+			var datetimeAutofracs bool
+			rows, err = dbt.db.Query(`SELECT length(concat('',cast(? as DATETIME))) != 19`, "2011-11-20 21:27:37")
+			if err == nil {
+				rows.Scan(&datetimeAutofracs)
+				rows.Close()
+			}
 			for _, setups := range testcases {
 				if t := setups.dbtype; !withFrac && t[len(t)-1:] == ")" {
 					// skip fractional second tests if unsupported by server
@@ -554,6 +561,9 @@ func TestDateTime(t *testing.T) {
 						// skip disallowed 0000-00-00 date
 						continue
 					}
+					if datetimeAutofracs && setups.dbtype == "DATETIME" && setup.t != t0 {
+						continue
+					}
 					setup.run(dbt, setups.dbtype, setups.tlayout, textString)
 					setup.run(dbt, setups.dbtype, setups.tlayout, binaryString)
 					if allowBinTime {