func()

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
}