src to pkg, impl lobby.Closed
This commit is contained in:
19
pkg/lib/db/ctx.go
Normal file
19
pkg/lib/db/ctx.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
)
|
||||
|
||||
func Inject(ctx context.Context, db *sql.DB) context.Context {
|
||||
return context.WithValue(ctx, "__db__", db)
|
||||
}
|
||||
|
||||
func From(ctx context.Context) *sql.DB {
|
||||
return Extract(ctx)
|
||||
}
|
||||
|
||||
func Extract(ctx context.Context) *sql.DB {
|
||||
v, _ := ctx.Value("__db__").(*sql.DB)
|
||||
return v
|
||||
}
|
||||
22
pkg/lib/db/ctx_test.go
Normal file
22
pkg/lib/db/ctx_test.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package db_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"gitea/price-is-wrong/pkg/lib/db"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestInjectDB(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
d := &sql.DB{}
|
||||
|
||||
injected := db.Inject(ctx, d)
|
||||
extracted := db.Extract(injected)
|
||||
|
||||
if d != extracted {
|
||||
t.Fatal("couldnt extract injected db")
|
||||
} else if extracted != db.From(injected) {
|
||||
t.Fatal("couldnt from extracted db")
|
||||
}
|
||||
}
|
||||
21
pkg/lib/db/new.go
Normal file
21
pkg/lib/db/new.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
|
||||
_ "github.com/glebarez/sqlite"
|
||||
)
|
||||
|
||||
func New(ctx context.Context, driver, conn string) (*sql.DB, error) {
|
||||
db, err := sql.Open(driver, conn)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := db.PingContext(ctx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return db, nil
|
||||
}
|
||||
Reference in New Issue
Block a user