|
| 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