-
Notifications
You must be signed in to change notification settings - Fork 26
/
migrate.go
63 lines (56 loc) · 1.21 KB
/
migrate.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
package data
import (
"context"
"embed"
"fmt"
"github.com/dtm-labs/dtmcli/dtmimp"
"github.com/go-saas/kit/pkg/dal"
"github.com/go-saas/saas/seed"
"io/ioutil"
"strings"
)
type Migrator struct {
provider dal.ConstDbProvider
connName dal.ConnName
}
//go:embed sqls
var sqls embed.FS
func NewMigrator(provider dal.ConstDbProvider, connName dal.ConnName) *Migrator {
return &Migrator{
provider: provider,
connName: connName,
}
}
var _ seed.Contrib = (*Migrator)(nil)
func (m *Migrator) Seed(ctx context.Context, sCtx *seed.Context) error {
skipDrop := true
if len(sCtx.TenantId) == 0 {
//only apply for host
//get db kind
db := GetDb(ctx, m.provider, m.connName)
name := db.Dialector.Name()
dtmimp.SetCurrentDBType(name)
//read sql
fs, err := sqls.Open(fmt.Sprintf("sqls/dtmcli.barrier.%s.sql", name))
defer fs.Close()
if err != nil {
return err
}
content, err := ioutil.ReadAll(fs)
if err != nil {
return err
}
sqls := strings.Split(string(content), ";")
for _, sql := range sqls {
s := strings.TrimSpace(sql)
if s == "" || (skipDrop && strings.Contains(s, "drop")) {
continue
}
err = db.Exec(s).Error
if err != nil {
return err
}
}
}
return nil
}