Browse Source

trying to get more information out of Travis II

Arne Hormann 11 years ago
parent
commit
e941c93942
2 changed files with 51 additions and 23 deletions
  1. 48 22
      driver_test.go
  2. 3 1
      packets.go

+ 48 - 22
driver_test.go

@@ -338,9 +338,37 @@ type timeTest struct {
 	t time.Time
 }
 
-func (t timeTest) genQuery(dbtype string, binaryProtocol bool) string {
+type timeMode byte
+
+func (t timeMode) String() string {
+	switch t {
+	case binaryString:
+		return "binary:string"
+	case binaryTime:
+		return "binary:time.Time"
+	case textString:
+		return "text:string"
+	}
+	panic("unsupported timeMode")
+}
+
+func (t timeMode) Binary() bool {
+	switch t {
+	case binaryString, binaryTime:
+		return true
+	}
+	return false
+}
+
+const (
+	binaryString timeMode = iota
+	binaryTime
+	textString
+)
+
+func (t timeTest) genQuery(dbtype string, mode timeMode) string {
 	var inner string
-	if binaryProtocol {
+	if mode.Binary() {
 		inner = "?"
 	} else {
 		inner = `"%s"`
@@ -351,17 +379,15 @@ func (t timeTest) genQuery(dbtype string, binaryProtocol bool) string {
 	return `SELECT CAST(` + inner + ` AS ` + dbtype + `)`
 }
 
-func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode int) {
+func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode timeMode) {
 	var rows *sql.Rows
-	query := t.genQuery(dbtype, mode < 2)
-	var protocol = "binary"
+	query := t.genQuery(dbtype, mode)
 	switch mode {
-	case 0:
+	case binaryString:
 		rows = dbt.mustQuery(query, t.s)
-	case 1:
+	case binaryTime:
 		rows = dbt.mustQuery(query, t.t)
-	case 2:
-		protocol = "text"
+	case textString:
 		query = fmt.Sprintf(query, t.s)
 		rows = dbt.mustQuery(query)
 	default:
@@ -374,13 +400,13 @@ func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode int) {
 		if err == nil {
 			err = fmt.Errorf("no data")
 		}
-		dbt.Errorf("%s [%s]: %s", dbtype, protocol, err)
+		dbt.Errorf("%s [%s]: %s", dbtype, mode, err)
 		return
 	}
 	var dst interface{}
 	err = rows.Scan(&dst)
 	if err != nil {
-		dbt.Errorf("%s [%s]: %s", dbtype, protocol, err)
+		dbt.Errorf("%s [%s]: %s", dbtype, mode, err)
 		return
 	}
 	switch val := dst.(type) {
@@ -389,22 +415,22 @@ func (t timeTest) run(dbt *DBTest, dbtype, tlayout string, mode int) {
 		if str == t.s {
 			return
 		}
-		dbt.Errorf("%s to string [%s]: expected %q, got %q",
-			dbtype, protocol,
+		dbt.Errorf("%s [%s] to string: expected %q, got %q",
+			dbtype, mode,
 			t.s, str,
 		)
 	case time.Time:
 		if val == t.t {
 			return
 		}
-		dbt.Errorf("%s to string [%s]: expected %q, got %q",
-			dbtype, protocol,
+		dbt.Errorf("%s [%s] to string: expected %q, got %q",
+			dbtype, mode,
 			t.s, val.Format(tlayout),
 		)
 	default:
 		fmt.Printf("%#v\n", []interface{}{dbtype, tlayout, mode, t.s, t.t})
 		dbt.Errorf("%s [%s]: unhandled type %T (is '%v')",
-			dbtype, protocol,
+			dbtype, mode,
 			val, val,
 		)
 	}
@@ -514,13 +540,13 @@ func TestDateTime(t *testing.T) {
 					continue
 				}
 				for _, setup := range setups.tests {
-					timeArgBinary := true
+					allowBinTime := true
 					if setup.s == "" {
 						// fill time string whereever Go can reliable produce it
 						setup.s = setup.t.Format(setups.tlayout)
 					} else if setup.s[0] == '!' {
 						// skip tests using setup.t as source in queries
-						timeArgBinary = false
+						allowBinTime = false
 						// fix setup.s - remove the "!"
 						setup.s = setup.s[1:]
 					}
@@ -528,11 +554,11 @@ func TestDateTime(t *testing.T) {
 						// skip disallowed 0000-00-00 date
 						continue
 					}
-					setup.run(dbt, setups.dbtype, setups.tlayout, 0)
-					if timeArgBinary {
-						setup.run(dbt, setups.dbtype, setups.tlayout, 1)
+					setup.run(dbt, setups.dbtype, setups.tlayout, textString)
+					setup.run(dbt, setups.dbtype, setups.tlayout, binaryString)
+					if allowBinTime {
+						setup.run(dbt, setups.dbtype, setups.tlayout, binaryTime)
 					}
-					setup.run(dbt, setups.dbtype, setups.tlayout, 2)
 				}
 			}
 		})

+ 3 - 1
packets.go

@@ -1094,7 +1094,9 @@ func (rows *binaryRows) readRow(dest []driver.Value) error {
 					case 1, 2, 3, 4, 5, 6:
 						dstlen = 19 + 1 + decimals
 					default:
-						panic(fmt.Sprintf("%#v", rows.columns[i]))
+						panic(fmt.Sprintf("unexpected decimals value in column %d: %#v",
+							i, rows.columns[i],
+						))
 					}
 				}
 				dest[i], err = formatBinaryDateTime(data[pos:pos+int(num)], dstlen, false)