in sqldriver/row.go [52:128]
func (rr *rowsReader) Next(dst []driver.Value) error {
record, err := rr.inner.Read()
if errors.Is(err, io.EOF) {
return io.EOF
}
if err != nil {
return errors.WithStack(err)
}
if record.Len() != len(dst) {
return errors.Errorf("expect %d columns, but get %d", len(dst), record.Len())
}
for i := range dst {
ri := record.Get(i)
dst[i] = ri
if ri == nil {
continue
}
switch ri.Type().ID() {
case datatype.BIGINT:
dst[i] = int64(ri.(data.BigInt))
case datatype.INT:
dst[i] = int(ri.(data.Int))
case datatype.SMALLINT:
dst[i] = int16(ri.(data.SmallInt))
case datatype.TINYINT:
dst[i] = int8(ri.(data.TinyInt))
case datatype.DOUBLE:
dst[i] = float64(ri.(data.Double))
case datatype.FLOAT:
dst[i] = float32(ri.(data.Float))
case datatype.STRING:
dst[i] = string(ri.(data.String))
case datatype.CHAR:
char := ri.(data.Char)
dst[i] = char.Data()
case datatype.VARCHAR:
char := ri.(data.VarChar)
dst[i] = char.Data()
case datatype.BINARY:
dst[i] = []byte(ri.(data.Binary))
case datatype.BOOLEAN:
dst[i] = bool(ri.(data.Bool))
case datatype.DATETIME:
dst[i] = time.Time(ri.(data.DateTime))
case datatype.DATE:
dst[i] = time.Time(ri.(data.Date))
case datatype.TIMESTAMP:
dst[i] = time.Time(ri.(data.Timestamp))
case datatype.TIMESTAMP_NTZ:
dst[i] = time.Time(ri.(data.TimestampNtz))
// case datatype.DECIMAL:
// dst[i] = ri
// case datatype.MAP:
// dst[i] = ri
// case datatype.ARRAY:
// dst[i] = ri
// case datatype.STRUCT:
// dst[i] = ri
// case datatype.VOID:
// dst[i] = ri
// case datatype.IntervalDayTime:
// dst[i] = ri
// case datatype.IntervalYearMonth:
// dst[i] = ri
default:
dst[i] = ri
}
}
return nil
}