| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package db
- import (
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- _ "modernc.org/sqlite"
- "pmail/config"
- "pmail/models"
- "pmail/utils/context"
- "pmail/utils/errors"
- "xorm.io/xorm"
- )
- var Instance *xorm.Engine
- func Init() error {
- dsn := config.Instance.DbDSN
- var err error
- switch config.Instance.DbType {
- case "mysql":
- Instance, err = xorm.NewEngine("mysql", dsn)
- case "sqlite":
- Instance, err = xorm.NewEngine("sqlite", dsn)
- default:
- return errors.New("Database Type Error!")
- }
- if err != nil {
- return errors.Wrap(err)
- }
- Instance.SetMaxOpenConns(100)
- Instance.SetMaxIdleConns(10)
- // 同步表结构
- syncTables()
- return nil
- }
- func WithContext(ctx *context.Context, sql string) string {
- if ctx != nil {
- logId := ctx.GetValue(context.LogID)
- return fmt.Sprintf("/* %s */ %s", logId, sql)
- }
- return sql
- }
- func syncTables() {
- err := Instance.Sync2(&models.User{})
- if err != nil {
- panic(err)
- }
- err = Instance.Sync2(&models.Email{})
- if err != nil {
- panic(err)
- }
- err = Instance.Sync2(&models.Group{})
- if err != nil {
- panic(err)
- }
- err = Instance.Sync2(&models.Rule{})
- if err != nil {
- panic(err)
- }
- err = Instance.Sync2(&models.UserAuth{})
- if err != nil {
- panic(err)
- }
- err = Instance.Sync2(&models.Sessions{})
- if err != nil {
- panic(err)
- }
- }
|