@@ -21,8 +21,6 @@ import (
2121 "io"
2222 "time"
2323
24- "database/sql"
25-
2624 "entgo.io/ent/dialect"
2725 entsql "entgo.io/ent/dialect/sql"
2826
@@ -33,7 +31,9 @@ import (
3331 "github.com/google/wire"
3432
3533 // Load PGX driver
36- _ "github.com/jackc/pgx/v5/stdlib"
34+
35+ "github.com/jackc/pgx/v5/pgxpool"
36+ "github.com/jackc/pgx/v5/stdlib"
3737)
3838
3939// ProviderSet is data providers.
@@ -73,7 +73,7 @@ func (data *Data) SchemaLoad() error {
7373
7474type NewConfig struct {
7575 Driver , Source string
76- MaxIdleConns , MaxOpenConns int
76+ MinOpenConns , MaxOpenConns int32
7777 MaxConnIdleTime time.Duration
7878}
7979
@@ -100,47 +100,38 @@ func NewData(c *NewConfig, logger log.Logger) (*Data, func(), error) {
100100 return & Data {DB : db }, cleanup , nil
101101}
102102
103- const (
104- DefaultMaxIdleConns = 10
105- DefaultMaxOpenConns = 50
106- DefaultMaxIdleTime = 5 * time .Minute
107- )
108-
109103func initSQLDatabase (c * NewConfig , log * log.Helper ) (* ent.Client , error ) {
104+ if c .Driver != "pgx" {
105+ return nil , fmt .Errorf ("unsupported driver: %s" , c .Driver )
106+ }
107+
110108 log .Debugf ("connecting to db: driver=%s" , c .Driver )
111- db , err := sql .Open (
112- c .Driver ,
113- c .Source ,
114- )
109+ poolConfig , err := pgxpool .ParseConfig (c .Source )
115110 if err != nil {
116- return nil , fmt . Errorf ( "error opening the connection, driver=%s: %w" , c . Driver , err )
111+ log . Fatal ( err )
117112 }
118113
119- maxOpenConns := DefaultMaxOpenConns
120114 if c .MaxOpenConns > 0 {
121- maxOpenConns = c .MaxOpenConns
115+ log .Infof ("DB: setting max open conns: %d" , c .MaxOpenConns )
116+ poolConfig .MaxConns = c .MaxOpenConns
122117 }
123118
124- log .Infof ("DB: setting max open conns: %d" , maxOpenConns )
125- db .SetMaxOpenConns (maxOpenConns )
126-
127- maxIdleConns := DefaultMaxIdleConns
128- if c .MaxIdleConns > 0 {
129- maxIdleConns = c .MaxIdleConns
119+ if n := c .MinOpenConns ; n > 0 {
120+ log .Infof ("DB: setting min open conns: %v" , n )
121+ poolConfig .MinConns = c .MinOpenConns
130122 }
131123
132- log .Infof ("DB: setting max idle conns: %d" , maxIdleConns )
133- db .SetMaxIdleConns (maxIdleConns )
134-
135- maxIdleTime := DefaultMaxIdleTime
136- if c .MaxConnIdleTime > 0 {
137- maxIdleTime = c .MaxConnIdleTime
124+ if t := c .MaxConnIdleTime ; t > 0 {
125+ log .Infof ("DB: setting max conn idle time: %v" , t )
126+ poolConfig .MaxConnIdleTime = t
138127 }
139128
140- log .Infof ("DB: setting max conn idle time: %v" , maxIdleTime )
141- db .SetConnMaxIdleTime (maxIdleTime )
129+ pool , err := pgxpool .NewWithConfig (context .TODO (), poolConfig )
130+ if err != nil {
131+ return nil , fmt .Errorf ("error creating the pool: %w" , err )
132+ }
142133
143- // Create an ent.Driver from `db`.
134+ db := stdlib . OpenDBFromPool ( pool )
144135 drv := entsql .OpenDB (dialect .Postgres , db )
145136 client := ent .NewClient (ent .Driver (drv ))
146137
0 commit comments