Add support for database enum types.

This commit is contained in:
zer0sub 2019-04-03 19:21:46 +02:00
parent 273bf1ed4c
commit 2c7a9f5058
9 changed files with 202 additions and 22 deletions

View file

@ -419,7 +419,23 @@ func mapRowToStruct(scanContext *scanContext, groupKey string, typesProcessed ma
fieldName := field.Name
if !isDbBaseType(field.Type) {
if _, ok := fieldValue.Interface().(sql.Scanner); ok {
cellValue := getCellValue(scanContext, tableName, fieldName, row)
if cellValue == nil {
continue
}
initializeValue(fieldValue)
scanner := fieldValue.Interface().(sql.Scanner)
err := scanner.Scan(cellValue)
if err != nil {
return err
}
} else if !isDbBaseType(field.Type) {
//var fieldValueInterface interface{}
err := mapRowToDestinationValue(scanContext, groupKey, typesProcessed, row, fieldValue, &field)
@ -427,18 +443,7 @@ func mapRowToStruct(scanContext *scanContext, groupKey string, typesProcessed ma
return err
}
} else {
columnName := tableName + "." + snaker.CamelToSnake(fieldName)
//columnName := snaker.CamelToSnake(fieldName)
////fmt.Println(columnName)
index := getIndex(scanContext.columnNames, columnName)
if index < 0 {
continue
}
////spew.Dump(row[index])
cellValue := cellValue(row, index)
cellValue := getCellValue(scanContext, tableName, fieldName, row)
//spew.Dump(cellValue)
//spew.Dump(rowColumnValue, fieldValue)
@ -451,6 +456,29 @@ func mapRowToStruct(scanContext *scanContext, groupKey string, typesProcessed ma
return nil
}
func initializeValue(value reflect.Value) {
newValuePtr := reflect.New(value.Type().Elem())
if value.Kind() == reflect.Ptr {
value.Set(newValuePtr)
} else {
value.Set(newValuePtr.Elem())
}
}
func getCellValue(scanContext *scanContext, tableName, fieldName string, row []interface{}) interface{} {
columnName := tableName + "." + snaker.CamelToSnake(fieldName)
//columnName := snaker.CamelToSnake(fieldName)
////fmt.Println(columnName)
index := getIndex(scanContext.columnNames, columnName)
if index < 0 {
return nil
}
return cellValue(row, index)
}
func reflectValueToString(val interface{}) string {
//spew.Dump(val)
@ -549,6 +577,7 @@ var nullTimeType = reflect.TypeOf(NullTime{})
func newScanType(columnType *sql.ColumnType) reflect.Type {
//spew.Dump(columnType)
//fmt.Println(columnType.DatabaseTypeName())
switch columnType.DatabaseTypeName() {
case "INT2":
return nullInt16Type