| 255 | func (r *SqlBatchReader) Err() error { return r.err } |
| 256 | |
| 257 | func (r *SqlBatchReader) Next() bool { |
| 258 | if r.record != nil { |
| 259 | r.record.Release() |
| 260 | r.record = nil |
| 261 | } |
| 262 | |
| 263 | rows := 0 |
| 264 | for rows < maxBatchSize && r.rows.Next() { |
| 265 | if err := r.rows.Scan(r.rowdest...); err != nil { |
| 266 | // Not really useful except for testing Flight SQL clients |
| 267 | detail := wrapperspb.StringValue{Value: r.schema.String()} |
| 268 | if st, sterr := status.New(codes.Unknown, err.Error()).WithDetails(&detail); sterr != nil { |
| 269 | r.err = err |
| 270 | } else { |
| 271 | r.err = st.Err() |
| 272 | } |
| 273 | return false |
| 274 | } |
| 275 | |
| 276 | for i, v := range r.rowdest { |
| 277 | fb := r.bldr.Field(i) |
| 278 | |
| 279 | switch v := v.(type) { |
| 280 | case *uint8: |
| 281 | fb.(*array.Uint8Builder).Append(*v) |
| 282 | case *sql.NullByte: |
| 283 | if !v.Valid { |
| 284 | fb.AppendNull() |
| 285 | } else { |
| 286 | fb.(*array.Uint8Builder).Append(v.Byte) |
| 287 | } |
| 288 | case *int64: |
| 289 | fb.(*array.Int64Builder).Append(*v) |
| 290 | case *sql.NullInt64: |
| 291 | if !v.Valid { |
| 292 | fb.AppendNull() |
| 293 | } else { |
| 294 | fb.(*array.Int64Builder).Append(v.Int64) |
| 295 | } |
| 296 | case *int32: |
| 297 | fb.(*array.Int32Builder).Append(*v) |
| 298 | case *sql.NullInt32: |
| 299 | if !v.Valid { |
| 300 | fb.AppendNull() |
| 301 | } else { |
| 302 | fb.(*array.Int32Builder).Append(v.Int32) |
| 303 | } |
| 304 | case *float64: |
| 305 | switch b := fb.(type) { |
| 306 | case *array.Float64Builder: |
| 307 | b.Append(*v) |
| 308 | case *array.Float32Builder: |
| 309 | b.Append(float32(*v)) |
| 310 | } |
| 311 | case *sql.NullFloat64: |
| 312 | if !v.Valid { |
| 313 | fb.AppendNull() |
| 314 | } else { |