59 lines
1.1 KiB
Go
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&...¶mN=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)
|
|
}
|