...
1 package pgxpool
2
3 import (
4 "github.com/jackc/pgconn"
5 "github.com/jackc/pgproto3/v2"
6 "github.com/jackc/pgx/v4"
7 )
8
9 type errRows struct {
10 err error
11 }
12
13 func (errRows) Close() {}
14 func (e errRows) Err() error { return e.err }
15 func (errRows) CommandTag() pgconn.CommandTag { return nil }
16 func (errRows) FieldDescriptions() []pgproto3.FieldDescription { return nil }
17 func (errRows) Next() bool { return false }
18 func (e errRows) Scan(dest ...interface{}) error { return e.err }
19 func (e errRows) Values() ([]interface{}, error) { return nil, e.err }
20 func (e errRows) RawValues() [][]byte { return nil }
21
22 type errRow struct {
23 err error
24 }
25
26 func (e errRow) Scan(dest ...interface{}) error { return e.err }
27
28 type poolRows struct {
29 r pgx.Rows
30 c *Conn
31 err error
32 }
33
34 func (rows *poolRows) Close() {
35 rows.r.Close()
36 if rows.c != nil {
37 rows.c.Release()
38 rows.c = nil
39 }
40 }
41
42 func (rows *poolRows) Err() error {
43 if rows.err != nil {
44 return rows.err
45 }
46 return rows.r.Err()
47 }
48
49 func (rows *poolRows) CommandTag() pgconn.CommandTag {
50 return rows.r.CommandTag()
51 }
52
53 func (rows *poolRows) FieldDescriptions() []pgproto3.FieldDescription {
54 return rows.r.FieldDescriptions()
55 }
56
57 func (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
69 func (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
77 func (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
85 func (rows *poolRows) RawValues() [][]byte {
86 return rows.r.RawValues()
87 }
88
89 type poolRow struct {
90 r pgx.Row
91 c *Conn
92 err error
93 }
94
95 func (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
View as plain text