/
engine.go
64 lines (52 loc) · 1.5 KB
/
engine.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
package persistences
import (
"github.com/go-xorm/xorm"
"github.com/go-xorm/xorm/migrate"
"github.com/jinzhu/inflection"
"xorm.io/core"
)
var engine *xorm.Engine
// InitEngine は xorm engine の初期化を行う.
func InitEngine(driver, dataSource string, showSQL bool, migrationPath string) error {
var err error
engine, err = xorm.NewEngine(driver, dataSource)
if err != nil {
return err
}
// NEWS テーブルは entity も News なので複数 <-> 単数変換は無効.
inflection.AddUncountable("news")
engine.SetTableMapper(core.NewCacheMapper(&LintGonicLowerCasePluralizeMapper))
engine.SetColumnMapper(core.NewCacheMapper(&LintGonicLowerCaseMapper))
//engine.SetLogger(utils.NewXormLogger(log.StandardLogger()))
if showSQL {
// Debug: SQL Output する場合有効にする.
engine.ShowSQL(true)
}
// Migration 定義をファイルから読み込み.
if migrationPath != "" {
migrations, err := ReadMigrationDir(migrationPath)
if err != nil {
return err
}
// migration テーブルがなければ作成.
err = CreateMigrationTableIfNotExists(engine, migrate.DefaultOptions)
if err != nil {
return err
}
// Migration.
m := migrate.New(engine, migrate.DefaultOptions, migrations)
err = m.Migrate()
if err != nil {
return err
}
}
return nil
}
// GetEngine は xorm engine の取得を行う.
func GetEngine() *xorm.Engine {
return engine
}
// NewSession は xorm session を開始する.
func NewSession() *xorm.Session {
return engine.NewSession()
}