Imported from hako
This commit is contained in:
parent
f8377df327
commit
8b8447213f
10 changed files with 315 additions and 0 deletions
39
database/database.go
Normal file
39
database/database.go
Normal file
|
@ -0,0 +1,39 @@
|
|||
package database
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
type Engine struct {
|
||||
db *sql.DB
|
||||
}
|
||||
|
||||
func connect(dbURL string) (*sql.DB, error) {
|
||||
dbU, err := url.Parse(dbURL)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse database URL: %w", err)
|
||||
}
|
||||
|
||||
return sql.Open(dbU.Scheme, strings.TrimPrefix(dbURL, dbU.Scheme+":"))
|
||||
}
|
||||
|
||||
func New(databaseURI string) (*Engine, error) {
|
||||
db, err := connect(databaseURI)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to connect to database: %w", err)
|
||||
}
|
||||
|
||||
// TODO: try for several seconds before giving up
|
||||
if err := db.Ping(); err != nil {
|
||||
return nil, fmt.Errorf("failed to ping database: %w", err)
|
||||
}
|
||||
|
||||
return &Engine{
|
||||
db: db,
|
||||
}, nil
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue