2022-08-27 13:21:05 +00:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
2023-02-10 13:23:30 +00:00
|
|
|
"context"
|
2023-01-18 15:02:59 +00:00
|
|
|
"github.com/fthvgb1/wp-go/internal/pkg/config"
|
2023-02-10 13:23:30 +00:00
|
|
|
"github.com/fthvgb1/wp-go/model"
|
2023-04-05 12:54:38 +00:00
|
|
|
"github.com/fthvgb1/wp-go/safety"
|
2022-08-27 13:21:05 +00:00
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
|
|
"github.com/jmoiron/sqlx"
|
2023-02-10 13:23:30 +00:00
|
|
|
"log"
|
2022-08-27 13:21:05 +00:00
|
|
|
)
|
|
|
|
|
2023-04-05 12:54:38 +00:00
|
|
|
var safeDb = safety.NewVar[*sqlx.DB](nil)
|
2022-08-27 13:21:05 +00:00
|
|
|
|
2023-04-05 12:54:38 +00:00
|
|
|
func InitDb() (*safety.Var[*sqlx.DB], error) {
|
2023-02-05 13:06:04 +00:00
|
|
|
c := config.GetConfig()
|
2022-11-15 08:36:21 +00:00
|
|
|
dsn := c.Mysql.Dsn.GetDsn()
|
2023-04-05 12:54:38 +00:00
|
|
|
db, err := sqlx.Open("mysql", dsn)
|
2022-08-27 13:21:05 +00:00
|
|
|
if err != nil {
|
2023-02-06 09:58:24 +00:00
|
|
|
return nil, err
|
2022-08-27 13:21:05 +00:00
|
|
|
}
|
2023-04-11 05:11:21 +00:00
|
|
|
preDb := safeDb.Load()
|
|
|
|
if preDb != nil {
|
|
|
|
_ = preDb.Close()
|
|
|
|
}
|
2022-11-15 08:36:21 +00:00
|
|
|
if c.Mysql.Pool.ConnMaxIdleTime != 0 {
|
2023-02-06 09:58:24 +00:00
|
|
|
db.SetConnMaxIdleTime(c.Mysql.Pool.ConnMaxLifetime)
|
2022-08-27 13:21:05 +00:00
|
|
|
}
|
2022-11-15 08:36:21 +00:00
|
|
|
if c.Mysql.Pool.MaxIdleConn != 0 {
|
2023-02-06 09:58:24 +00:00
|
|
|
db.SetMaxIdleConns(c.Mysql.Pool.MaxIdleConn)
|
2022-08-27 13:21:05 +00:00
|
|
|
}
|
2022-11-15 08:36:21 +00:00
|
|
|
if c.Mysql.Pool.MaxOpenConn != 0 {
|
2023-02-06 09:58:24 +00:00
|
|
|
db.SetMaxOpenConns(c.Mysql.Pool.MaxOpenConn)
|
2022-08-27 13:21:05 +00:00
|
|
|
}
|
2022-11-15 08:36:21 +00:00
|
|
|
if c.Mysql.Pool.ConnMaxLifetime != 0 {
|
2023-02-06 09:58:24 +00:00
|
|
|
db.SetConnMaxLifetime(c.Mysql.Pool.ConnMaxLifetime)
|
2022-08-27 13:21:05 +00:00
|
|
|
}
|
2023-04-05 12:54:38 +00:00
|
|
|
safeDb.Store(db)
|
|
|
|
return safeDb, err
|
2022-08-27 13:21:05 +00:00
|
|
|
}
|
2023-02-10 13:23:30 +00:00
|
|
|
|
2023-04-05 12:54:38 +00:00
|
|
|
func QueryDb(db *safety.Var[*sqlx.DB]) *model.SqlxQuery {
|
2023-02-20 17:07:32 +00:00
|
|
|
query := model.NewSqlxQuery(db, model.NewUniversalDb(
|
|
|
|
nil,
|
|
|
|
nil))
|
|
|
|
model.SetSelect(query, func(ctx context.Context, a any, s string, args ...any) error {
|
|
|
|
if config.GetConfig().ShowQuerySql {
|
|
|
|
go log.Println(model.FormatSql(s, args...))
|
|
|
|
}
|
|
|
|
return query.Selects(ctx, a, s, args...)
|
|
|
|
})
|
|
|
|
model.SetGet(query, func(ctx context.Context, a any, s string, args ...any) error {
|
|
|
|
if config.GetConfig().ShowQuerySql {
|
|
|
|
go log.Println(model.FormatSql(s, args...))
|
|
|
|
}
|
|
|
|
return query.Gets(ctx, a, s, args...)
|
|
|
|
})
|
2023-02-10 13:23:30 +00:00
|
|
|
return query
|
|
|
|
}
|