golib/gdb/sqldb/db.go
2023-06-15 21:22:51 +08:00

59 lines
1.1 KiB
Go

//
// db.go
// Copyright (C) 2022 tiglog <me@tiglog.com>
//
// Distributed under terms of the MIT license.
//
package sqldb
import (
"database/sql"
"errors"
"strings"
"github.com/jmoiron/sqlx"
)
var Db *Engine
type Engine struct {
*sqlx.DB
}
var ErrNoRows = sql.ErrNoRows
type DbOption struct {
Url string
MaxOpenConns int
MaxIdleConns int
}
// mysql://[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...&paramN=valueN]
// pgsql://host=X.X.X.X port=54321 user=postgres password=admin123 dbname=postgres sslmode=disable"
func NewWithOption(opt *DbOption) *Engine {
urls := strings.Split(opt.Url, "://")
if len(urls) != 2 {
panic(errors.New("wrong database url:" + opt.Url))
}
dbx, err := sqlx.Open(urls[0], urls[1])
if err != nil {
panic(err)
}
dbx.SetMaxIdleConns(opt.MaxIdleConns)
dbx.SetMaxOpenConns(opt.MaxOpenConns)
err = dbx.Ping()
if err != nil {
panic(err)
}
Db = &Engine{
dbx,
}
return Db
}
func New(url string) *Engine {
opt := &DbOption{Url: url, MaxOpenConns: 256, MaxIdleConns: 2}
return NewWithOption(opt)
}