-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
entity_init.go
91 lines (69 loc) Β· 1.81 KB
/
entity_init.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package entity
import (
"os"
"time"
"github.com/photoprism/photoprism/internal/migrate"
"github.com/photoprism/photoprism/pkg/clean"
)
// onReady contains init functions to be called when the
// initialization of the database is complete.
var onReady []func()
// ready executes init callbacks when the initialization of the
// database is complete.
func ready() {
for _, init := range onReady {
init()
}
}
// InitDb creates database tables and inserts default fixtures as needed.
func InitDb(opt migrate.Options) {
if !HasDbProvider() {
log.Error("migrate: no database provider")
return
}
start := time.Now()
if opt.DropDeprecated {
DeprecatedTables.Drop(Db())
}
Entities.Migrate(Db(), opt)
if err := Entities.WaitForMigration(Db()); err != nil {
log.Errorf("migrate: %s", err)
}
CreateDefaultFixtures()
ready()
log.Debugf("migrate: completed in %s", time.Since(start))
}
// InitTestDb connects to and completely initializes the test database incl fixtures.
func InitTestDb(driver, dsn string) *DbConn {
if HasDbProvider() {
return nil
}
start := time.Now()
// Set default test database driver.
if driver == "test" || driver == "sqlite" || driver == "" || dsn == "" {
driver = SQLite3
}
// Set default database DSN.
if driver == SQLite3 {
if dsn == "" {
dsn = SQLiteMemoryDSN
} else if dsn != SQLiteTestDB {
// Continue.
} else if err := os.Remove(dsn); err == nil {
log.Debugf("sqlite: test file %s removed", clean.Log(dsn))
}
}
log.Infof("initializing %s test db in %s", driver, dsn)
// Create gorm.DB connection provider.
db := &DbConn{
Driver: driver,
Dsn: dsn,
}
// Insert test fixtures into the database.
SetDbProvider(db)
ResetTestFixtures()
File{}.RegenerateIndex()
ready()
log.Debugf("migrate: completed in %s", time.Since(start))
return db
}