Skip to content

Commit f2e81dd

Browse files
committed
Implement the new database/sql#RowsColumnTypeDatabaseTypeName interface (go 1.8).
1 parent 2e00b5c commit f2e81dd

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

rows_columntypes.go

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package mysql
2+
3+
const (
4+
// In case we get something unexpected
5+
FieldTypeUnknown = "UNKNOWN"
6+
7+
// Human-readable names for each distinct type byte
8+
FieldTypeNameDecimal = "DECIMAL"
9+
FieldTypeNameTiny = "TINY"
10+
FieldTypeNameShort = "SHORT"
11+
FieldTypeNameLong = "LONG"
12+
FieldTypeNameFloat = "FLOAT"
13+
FieldTypeNameDouble = "DOUBLE"
14+
FieldTypeNameNULL = "NULL"
15+
FieldTypeNameTimestamp = "TIMESTAMP"
16+
FieldTypeNameLongLong = "LONGLONG"
17+
FieldTypeNameInt24 = "INT24"
18+
FieldTypeNameDate = "DATE"
19+
FieldTypeNameTime = "TIME"
20+
FieldTypeNameDateTime = "DATETIME"
21+
FieldTypeNameYear = "YEAR"
22+
FieldTypeNameNewDate = "NEWDATE"
23+
FieldTypeNameVarChar = "VARCHAR"
24+
FieldTypeNameBit = "BIT"
25+
FieldTypeNameJSON = "JSON"
26+
FieldTypeNameNewDecimal = "NEWDECIMAL"
27+
FieldTypeNameEnum = "ENUM"
28+
FieldTypeNameSet = "SET"
29+
FieldTypeNameTinyBLOB = "TINYBLOB"
30+
FieldTypeNameMediumBLOB = "MEDIUMBLOB"
31+
FieldTypeNameLongBLOB = "LONGBLOB"
32+
FieldTypeNameBLOB = "BLOB"
33+
FieldTypeNameVarString = "VARSTRING"
34+
FieldTypeNameString = "STRING"
35+
FieldTypeNameGeometry = "GEOMETRY"
36+
)
37+
38+
// mapping from each type identifier to human readable string
39+
var mysqlTypeMap = map[byte]string{
40+
fieldTypeDecimal: FieldTypeNameDecimal,
41+
fieldTypeTiny: FieldTypeNameTiny,
42+
fieldTypeShort: FieldTypeNameShort,
43+
fieldTypeLong: FieldTypeNameLong,
44+
fieldTypeFloat: FieldTypeNameFloat,
45+
fieldTypeDouble: FieldTypeNameDouble,
46+
fieldTypeNULL: FieldTypeNameNULL,
47+
fieldTypeTimestamp: FieldTypeNameTimestamp,
48+
fieldTypeLongLong: FieldTypeNameLongLong,
49+
fieldTypeInt24: FieldTypeNameInt24,
50+
fieldTypeDate: FieldTypeNameDate,
51+
fieldTypeTime: FieldTypeNameTime,
52+
fieldTypeDateTime: FieldTypeNameDateTime,
53+
fieldTypeYear: FieldTypeNameYear,
54+
fieldTypeNewDate: FieldTypeNameNewDate,
55+
fieldTypeVarChar: FieldTypeNameVarChar,
56+
fieldTypeBit: FieldTypeNameBit,
57+
fieldTypeJSON: FieldTypeNameJSON,
58+
fieldTypeNewDecimal: FieldTypeNameNewDecimal,
59+
fieldTypeEnum: FieldTypeNameEnum,
60+
fieldTypeSet: FieldTypeNameSet,
61+
fieldTypeTinyBLOB: FieldTypeNameTinyBLOB,
62+
fieldTypeMediumBLOB: FieldTypeNameMediumBLOB,
63+
fieldTypeLongBLOB: FieldTypeNameLongBLOB,
64+
fieldTypeBLOB: FieldTypeNameBLOB,
65+
fieldTypeVarString: FieldTypeNameVarString,
66+
fieldTypeString: FieldTypeNameString,
67+
fieldTypeGeometry: FieldTypeNameGeometry,
68+
}
69+
70+
// Make Rows implement the optional RowsColumnTypeDatabaseTypeName interface.
71+
// See https://github.com/golang/go/commit/2a85578b0ecd424e95b29d810b7a414a299fd6a7
72+
// - (go 1.8 required for this to have any effect)
73+
func (rows *mysqlRows) ColumnTypeDatabaseTypeName(index int) string {
74+
if typeName, ok := mysqlTypeMap[rows.columns[index].fieldType]; ok {
75+
return typeName
76+
}
77+
return FieldTypeUnknown
78+
}

0 commit comments

Comments
 (0)