1package pgxpool 2 3import ( 4 "github.com/jackc/pgconn" 5 "github.com/jackc/pgproto3/v2" 6 "github.com/jackc/pgx/v4" 7) 8 9type errRows struct { 10 err error 11} 12 13func (errRows) Close() {} 14func (e errRows) Err() error { return e.err } 15func (errRows) CommandTag() pgconn.CommandTag { return nil } 16func (errRows) FieldDescriptions() []pgproto3.FieldDescription { return nil } 17func (errRows) Next() bool { return false } 18func (e errRows) Scan(dest ...interface{}) error { return e.err } 19func (e errRows) Values() ([]interface{}, error) { return nil, e.err } 20func (e errRows) RawValues() [][]byte { return nil } 21 22type errRow struct { 23 err error 24} 25 26func (e errRow) Scan(dest ...interface{}) error { return e.err } 27 28type poolRows struct { 29 r pgx.Rows 30 c *Conn 31 err error 32} 33 34func (rows *poolRows) Close() { 35 rows.r.Close() 36 if rows.c != nil { 37 rows.c.Release() 38 rows.c = nil 39 } 40} 41 42func (rows *poolRows) Err() error { 43 if rows.err != nil { 44 return rows.err 45 } 46 return rows.r.Err() 47} 48 49func (rows *poolRows) CommandTag() pgconn.CommandTag { 50 return rows.r.CommandTag() 51} 52 53func (rows *poolRows) FieldDescriptions() []pgproto3.FieldDescription { 54 return rows.r.FieldDescriptions() 55} 56 57func (rows *poolRows) Next() bool { 58 if rows.err != nil { 59 return false 60 } 61 62 n := rows.r.Next() 63 if !n { 64 rows.Close() 65 } 66 return n 67} 68 69func (rows *poolRows) Scan(dest ...interface{}) error { 70 err := rows.r.Scan(dest...) 71 if err != nil { 72 rows.Close() 73 } 74 return err 75} 76 77func (rows *poolRows) Values() ([]interface{}, error) { 78 values, err := rows.r.Values() 79 if err != nil { 80 rows.Close() 81 } 82 return values, err 83} 84 85func (rows *poolRows) RawValues() [][]byte { 86 return rows.r.RawValues() 87} 88 89type poolRow struct { 90 r pgx.Row 91 c *Conn 92 err error 93} 94 95func (row *poolRow) Scan(dest ...interface{}) error { 96 if row.err != nil { 97 return row.err 98 } 99 100 err := row.r.Scan(dest...) 101 if row.c != nil { 102 row.c.Release() 103 } 104 return err 105} 106