in sqldriver/row.go [134:218]
func (rr *rowsReader) ColumnTypeScanType(index int) reflect.Type {
column := rr.columns[index]
dataType := column.Type
nullable := !column.NotNull
switch dataType.ID() {
case datatype.BIGINT:
if nullable {
return reflect.TypeOf(NullInt64{})
}
return reflect.TypeOf(int64(0))
case datatype.INT:
if nullable {
return reflect.TypeOf(NullInt32{})
}
return reflect.TypeOf(int(0))
case datatype.SMALLINT:
if nullable {
return reflect.TypeOf(NullInt16{})
}
return reflect.TypeOf(int16(0))
case datatype.TINYINT:
if nullable {
return reflect.TypeOf(NullInt8{})
}
return reflect.TypeOf(int8(0))
case datatype.DOUBLE:
if nullable {
return reflect.TypeOf(NullFloat64{})
}
return reflect.TypeOf(float64(0))
case datatype.FLOAT:
if nullable {
return reflect.TypeOf(NullFloat32{})
}
return reflect.TypeOf(float32(0))
case datatype.STRING, datatype.CHAR, datatype.VARCHAR:
if nullable {
return reflect.TypeOf(NullString{})
}
return reflect.TypeOf("")
case datatype.BINARY:
return reflect.TypeOf(Binary{})
case datatype.BOOLEAN:
if nullable {
return reflect.TypeOf(NullBool{})
}
return reflect.TypeOf(false)
case datatype.DATETIME:
return reflect.TypeOf(NullDateTime{})
case datatype.DATE:
return reflect.TypeOf(NullDate{})
case datatype.TIMESTAMP:
return reflect.TypeOf(NullTimeStamp{})
case datatype.TIMESTAMP_NTZ:
return reflect.TypeOf(NullTimeStampNtz{})
case datatype.DECIMAL:
return reflect.TypeOf(Decimal{})
case datatype.MAP:
return reflect.TypeOf(Map{})
case datatype.ARRAY:
return reflect.TypeOf(Array{})
case datatype.STRUCT:
return reflect.TypeOf(Struct{})
case datatype.JSON:
return reflect.TypeOf(Json{})
case datatype.VOID:
return reflect.TypeOf(data.Null)
case datatype.IntervalDayTime:
return reflect.TypeOf(data.IntervalDayTime{})
case datatype.IntervalYearMonth:
return reflect.TypeOf(data.IntervalYearMonth(0))
}
return nil
}