You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.0 KiB

  1. package pool
  2. import "context"
  3. type SingleConnPool struct {
  4. pool Pooler
  5. cn *Conn
  6. stickyErr error
  7. }
  8. var _ Pooler = (*SingleConnPool)(nil)
  9. func NewSingleConnPool(pool Pooler, cn *Conn) *SingleConnPool {
  10. return &SingleConnPool{
  11. pool: pool,
  12. cn: cn,
  13. }
  14. }
  15. func (p *SingleConnPool) NewConn(ctx context.Context) (*Conn, error) {
  16. return p.pool.NewConn(ctx)
  17. }
  18. func (p *SingleConnPool) CloseConn(cn *Conn) error {
  19. return p.pool.CloseConn(cn)
  20. }
  21. func (p *SingleConnPool) Get(ctx context.Context) (*Conn, error) {
  22. if p.stickyErr != nil {
  23. return nil, p.stickyErr
  24. }
  25. return p.cn, nil
  26. }
  27. func (p *SingleConnPool) Put(ctx context.Context, cn *Conn) {}
  28. func (p *SingleConnPool) Remove(ctx context.Context, cn *Conn, reason error) {
  29. p.cn = nil
  30. p.stickyErr = reason
  31. }
  32. func (p *SingleConnPool) Close() error {
  33. p.cn = nil
  34. p.stickyErr = ErrClosed
  35. return nil
  36. }
  37. func (p *SingleConnPool) Len() int {
  38. return 0
  39. }
  40. func (p *SingleConnPool) IdleLen() int {
  41. return 0
  42. }
  43. func (p *SingleConnPool) Stats() *Stats {
  44. return &Stats{}
  45. }