chore: simplify db schema creation (#26693)
This commit is contained in:
parent
ad014333b2
commit
45741b1c90
11 changed files with 35 additions and 47 deletions
|
|
@ -22,8 +22,7 @@ type circuitsTestSuite struct {
|
|||
}
|
||||
|
||||
func (suite *circuitsTestSuite) SetupSuite() {
|
||||
_ = db.NewInstance("sqlite", ":memory:")
|
||||
config.SetupSchema()
|
||||
suite.Require().NoError(db.NewInstance("sqlite", ":memory:"))
|
||||
}
|
||||
|
||||
func (suite *circuitsTestSuite) SetupTest() {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/evcc-io/evcc/server/db"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type meter struct {
|
||||
|
|
@ -16,16 +17,11 @@ type meter struct {
|
|||
var ErrIncomplete = errors.New("meter profile incomplete")
|
||||
|
||||
func init() {
|
||||
db.Register(func() error {
|
||||
return SetupSchema()
|
||||
db.Register(func(db *gorm.DB) error {
|
||||
return db.AutoMigrate(new(meter))
|
||||
})
|
||||
}
|
||||
|
||||
// SetupSchema is used for testing
|
||||
func SetupSchema() error {
|
||||
return db.Instance.AutoMigrate(new(meter))
|
||||
}
|
||||
|
||||
// Persist stores 15min consumption in Wh
|
||||
func Persist(ts time.Time, value float64) error {
|
||||
return db.Instance.Create(meter{
|
||||
|
|
|
|||
|
|
@ -13,17 +13,15 @@ type DB struct {
|
|||
name string
|
||||
}
|
||||
|
||||
var (
|
||||
sessions Sessions
|
||||
)
|
||||
var sessions Sessions
|
||||
|
||||
func init() {
|
||||
db.Register(func() error {
|
||||
if err := db.Instance.AutoMigrate(new(Session)); err != nil {
|
||||
db.Register(func(db *gorm.DB) error {
|
||||
if err := db.AutoMigrate(new(Session)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return db.Instance.Find(&sessions).Error
|
||||
return db.Find(&sessions).Error
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,12 +15,10 @@ import (
|
|||
)
|
||||
|
||||
func TestSqliteTimestamp(t *testing.T) {
|
||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||
|
||||
clock := clock.NewMock()
|
||||
clock.Add(time.Hour)
|
||||
|
||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||
require.NoError(t, metrics.SetupSchema())
|
||||
|
||||
metrics.Persist(clock.Now(), 0)
|
||||
|
||||
db, err := db.Instance.DB()
|
||||
|
|
@ -50,14 +48,12 @@ func TestSqliteTimestamp(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateHouseholdProfile(t *testing.T) {
|
||||
clock := clock.NewMock()
|
||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||
|
||||
// make sure test data added starting 00:00 local time
|
||||
clock := clock.NewMock()
|
||||
clock.Set(now.With(clock.Now()).BeginningOfDay())
|
||||
|
||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||
require.NoError(t, metrics.SetupSchema())
|
||||
|
||||
// 2 days of data
|
||||
// day 1: 0 ... 95
|
||||
// day 2: 96 ... 181
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ import (
|
|||
|
||||
"github.com/benbjohnson/clock"
|
||||
"github.com/evcc-io/evcc/api"
|
||||
"github.com/evcc-io/evcc/core/metrics"
|
||||
"github.com/evcc-io/evcc/server/db"
|
||||
"github.com/evcc-io/evcc/util"
|
||||
"github.com/evcc-io/evcc/util/config"
|
||||
|
|
@ -163,10 +162,9 @@ func TestRequiredBatteryMode(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestUpdateHomeConsumption(t *testing.T) {
|
||||
clock := clock.NewMock()
|
||||
|
||||
require.NoError(t, db.NewInstance("sqlite", ":memory:"))
|
||||
require.NoError(t, metrics.SetupSchema())
|
||||
|
||||
clock := clock.NewMock()
|
||||
|
||||
s := &Site{
|
||||
log: util.NewLogger("foo"),
|
||||
|
|
|
|||
|
|
@ -4,11 +4,12 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/evcc-io/evcc/server/db"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func init() {
|
||||
db.Register(func() error {
|
||||
return db.Instance.AutoMigrate(new(GridSession))
|
||||
db.Register(func(db *gorm.DB) error {
|
||||
return db.AutoMigrate(new(GridSession))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
4
server/db/cache/cache.go
vendored
4
server/db/cache/cache.go
vendored
|
|
@ -18,8 +18,8 @@ type Cache struct {
|
|||
}
|
||||
|
||||
func init() {
|
||||
db.Register(func() error {
|
||||
return db.Instance.AutoMigrate(new(Cache))
|
||||
db.Register(func(db *gorm.DB) error {
|
||||
return db.AutoMigrate(new(Cache))
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,18 +74,18 @@ func New(driver, dsn string) (*gorm.DB, error) {
|
|||
}
|
||||
|
||||
func NewInstance(driver, dsn string) error {
|
||||
inst, err := New(strings.ToLower(driver), dsn)
|
||||
db, err := New(strings.ToLower(driver), dsn)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Instance = inst
|
||||
Instance = db
|
||||
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
for _, f := range registry {
|
||||
if err := f(); err != nil {
|
||||
if err := f(db); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,17 @@
|
|||
package db
|
||||
|
||||
import "sync"
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var (
|
||||
mu sync.Mutex
|
||||
registry []func() error
|
||||
registry []func(db *gorm.DB) error
|
||||
)
|
||||
|
||||
func Register(fun func() error) {
|
||||
func Register(fun func(db *gorm.DB) error) {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
registry = append(registry, fun)
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ import (
|
|||
"github.com/evcc-io/evcc/util"
|
||||
"github.com/samber/lo"
|
||||
"go.yaml.in/yaml/v4"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
var ErrNotFound = errors.New("not found")
|
||||
|
|
@ -34,12 +35,12 @@ var (
|
|||
)
|
||||
|
||||
func init() {
|
||||
db.Register(func() error {
|
||||
if err := db.Instance.AutoMigrate(new(setting)); err != nil {
|
||||
db.Register(func(db *gorm.DB) error {
|
||||
if err := db.AutoMigrate(new(setting)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return db.Instance.Find(&settings).Error
|
||||
return db.Find(&settings).Error
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -77,16 +77,11 @@ func (d *Config) Delete() error {
|
|||
}
|
||||
|
||||
func init() {
|
||||
db.Register(func() error {
|
||||
return SetupSchema()
|
||||
db.Register(func(db *gorm.DB) error {
|
||||
return db.AutoMigrate(new(Config))
|
||||
})
|
||||
}
|
||||
|
||||
// SetupSchema is used for testing
|
||||
func SetupSchema() error {
|
||||
return db.Instance.AutoMigrate(new(Config))
|
||||
}
|
||||
|
||||
// NameForID returns a unique config name for the given id
|
||||
func NameForID(id int) string {
|
||||
return fmt.Sprintf("db:%d", id)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue