MCPcopy
hub / github.com/jackc/pgx / Scan

Method Scan

rows.go:235–290  ·  view source on GitHub ↗
(dest ...any)

Source from the content-addressed store, hash-verified

233}
234
235func (rows *baseRows) Scan(dest ...any) error {
236 m := rows.typeMap
237 fieldDescriptions := rows.FieldDescriptions()
238 values := rows.values
239
240 if len(fieldDescriptions) != len(values) {
241 err := fmt.Errorf("number of field descriptions must equal number of values, got %d and %d", len(fieldDescriptions), len(values))
242 rows.fatal(err)
243 return err
244 }
245
246 if len(dest) == 1 {
247 if rc, ok := dest[0].(RowScanner); ok {
248 err := rc.ScanRow(rows)
249 if err != nil {
250 rows.fatal(err)
251 }
252 return err
253 }
254 }
255
256 if len(fieldDescriptions) != len(dest) {
257 err := fmt.Errorf("number of field descriptions must equal number of destinations, got %d and %d", len(fieldDescriptions), len(dest))
258 rows.fatal(err)
259 return err
260 }
261
262 if rows.scanPlans == nil {
263 rows.scanPlans = make([]pgtype.ScanPlan, len(values))
264 rows.scanTypes = make([]reflect.Type, len(values))
265 for i := range dest {
266 rows.scanPlans[i] = m.PlanScan(fieldDescriptions[i].DataTypeOID, fieldDescriptions[i].Format, dest[i])
267 rows.scanTypes[i] = reflect.TypeOf(dest[i])
268 }
269 }
270
271 for i, dst := range dest {
272 if dst == nil {
273 continue
274 }
275
276 if rows.scanTypes[i] != reflect.TypeOf(dst) {
277 rows.scanPlans[i] = m.PlanScan(fieldDescriptions[i].DataTypeOID, fieldDescriptions[i].Format, dest[i])
278 rows.scanTypes[i] = reflect.TypeOf(dest[i])
279 }
280
281 err := rows.scanPlans[i].Scan(values[i], dst)
282 if err != nil {
283 err = ScanArgError{ColumnIndex: i, FieldName: fieldDescriptions[i].Name, Err: err}
284 rows.fatal(err)
285 return err
286 }
287 }
288
289 return nil
290}
291
292func (rows *baseRows) Values() ([]any, error) {

Callers

nothing calls this directly

Calls 5

FieldDescriptionsMethod · 0.95
fatalMethod · 0.95
ScanRowMethod · 0.65
PlanScanMethod · 0.65
ScanMethod · 0.65

Tested by

no test coverage detected