...

Source file src/github.com/jackc/pgx/v5/pgxpool/rows.go

Documentation: github.com/jackc/pgx/v5/pgxpool

     1  package pgxpool
     2  
     3  import (
     4  	"github.com/jackc/pgx/v5"
     5  	"github.com/jackc/pgx/v5/pgconn"
     6  )
     7  
     8  type errRows struct {
     9  	err error
    10  }
    11  
    12  func (errRows) Close()                                       {}
    13  func (e errRows) Err() error                                 { return e.err }
    14  func (errRows) CommandTag() pgconn.CommandTag                { return pgconn.CommandTag{} }
    15  func (errRows) FieldDescriptions() []pgconn.FieldDescription { return nil }
    16  func (errRows) Next() bool                                   { return false }
    17  func (e errRows) Scan(dest ...any) error                     { return e.err }
    18  func (e errRows) Values() ([]any, error)                     { return nil, e.err }
    19  func (e errRows) RawValues() [][]byte                        { return nil }
    20  func (e errRows) Conn() *pgx.Conn                            { return nil }
    21  
    22  type errRow struct {
    23  	err error
    24  }
    25  
    26  func (e errRow) Scan(dest ...any) 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() []pgconn.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 ...any) 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() ([]any, 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  func (rows *poolRows) Conn() *pgx.Conn {
    90  	return rows.r.Conn()
    91  }
    92  
    93  type poolRow struct {
    94  	r   pgx.Row
    95  	c   *Conn
    96  	err error
    97  }
    98  
    99  func (row *poolRow) Scan(dest ...any) error {
   100  	if row.err != nil {
   101  		return row.err
   102  	}
   103  
   104  	panicked := true
   105  	defer func() {
   106  		if panicked && row.c != nil {
   107  			row.c.Release()
   108  		}
   109  	}()
   110  	err := row.r.Scan(dest...)
   111  	panicked = false
   112  	if row.c != nil {
   113  		row.c.Release()
   114  	}
   115  	return err
   116  }
   117  

View as plain text