advsql/db.go

45 lines
910 B
Go
Raw Permalink Normal View History

2022-07-05 12:38:39 +02:00
package advsql
import (
"database/sql"
"git.tordarus.net/Tordarus/adverr"
_ "github.com/go-sql-driver/mysql"
)
type Database struct {
db *sql.DB
closefuncs []func() error
}
2022-07-08 22:09:53 +02:00
func NewDatabase(conn *sql.DB) *Database {
return &Database{
db: conn,
closefuncs: make([]func() error, 0),
}
}
func NewMysqlDatabase(host string, port uint16, user, pass, db string) (*Database, error) {
2022-07-05 12:38:39 +02:00
conn, err := sql.Open("mysql", connString(host, port, user, pass, db))
if err != nil {
return nil, adverr.Wrap("could not connect to database", err)
}
2022-07-08 22:09:53 +02:00
return NewDatabase(conn), nil
2022-07-05 12:38:39 +02:00
}
func (db *Database) prepare(query string) (*sql.Stmt, error) {
s, err := db.db.Prepare(query)
if err != nil {
return nil, err
}
db.closefuncs = append(db.closefuncs, s.Close)
return s, nil
}
func (db *Database) Close() error {
for _, close := range db.closefuncs {
close()
}
return db.db.Close()
}