@@ -0,0 +1,47 @@
|
||||
package pgx
|
||||
|
||||
type ConnectionPool struct {
|
||||
connectionChannel chan *Connection
|
||||
options map[string]string // options used when establishing connection
|
||||
MaxConnections int
|
||||
}
|
||||
|
||||
// options: options used by Connect
|
||||
// MaxConnections: max simultaneous connections to use (currently all are immediately connected)
|
||||
func NewConnectionPool(options map[string]string, MaxConnections int) (p *ConnectionPool, err error) {
|
||||
p = new(ConnectionPool)
|
||||
p.connectionChannel = make(chan *Connection, MaxConnections)
|
||||
p.MaxConnections = MaxConnections
|
||||
|
||||
p.options = make(map[string]string)
|
||||
for k, v := range options {
|
||||
p.options[k] = v
|
||||
}
|
||||
|
||||
for i := 0; i < p.MaxConnections; i++ {
|
||||
var c *Connection
|
||||
c, err = Connect(options)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
p.connectionChannel <- c
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (p *ConnectionPool) Acquire() (c *Connection) {
|
||||
c = <-p.connectionChannel
|
||||
return
|
||||
}
|
||||
|
||||
func (p *ConnectionPool) Release(c *Connection) {
|
||||
p.connectionChannel <- c
|
||||
}
|
||||
|
||||
func (p *ConnectionPool) Close() {
|
||||
for i := 0; i < p.MaxConnections; i++ {
|
||||
c := <-p.connectionChannel
|
||||
_ = c.Close()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user