package models import ( "database/sql" "fmt" "github.com/go-xorm/xorm" "os" // Use sqlite _ "github.com/mattn/go-sqlite3" ) // Engine represents a xorm engine or session. type Engine interface { Table(tableNameOrBean interface{}) *xorm.Session Count(...interface{}) (int64, error) Decr(column string, arg ...interface{}) *xorm.Session Delete(interface{}) (int64, error) Exec(string, ...interface{}) (sql.Result, error) Find(interface{}, ...interface{}) error Get(interface{}) (bool, error) Id(interface{}) *xorm.Session In(string, ...interface{}) *xorm.Session Incr(column string, arg ...interface{}) *xorm.Session Insert(...interface{}) (int64, error) InsertOne(interface{}) (int64, error) Iterate(interface{}, xorm.IterFunc) error Join(joinOperator string, tablename interface{}, condition string, args ...interface{}) *xorm.Session SQL(interface{}, ...interface{}) *xorm.Session Where(interface{}, ...interface{}) *xorm.Session } var ( x *xorm.Engine tables []interface{} ) func init() { tables = append(tables, new(Teacher), new(Vertretungsplan), ) } func getEngine() (*xorm.Engine, error) { if err := os.MkdirAll("data/organizer.db", os.ModePerm); err != nil { return nil, err } connStr := "file:data/organizer.db?cache=shared&mode=rwc" return xorm.NewEngine("sqlite3", connStr) } // SetEngine sets the xorm.Engine // code by github.com/go-gitea/gitea func SetEngine() (err error) { x, err = getEngine() x.ShowSQL(true) return nil } // NewEngine initializes a new xorm.Engine // code by github.com/go-gitea/gitea func NewEngine(migrateFunc func(*xorm.Engine) error) (err error) { if err = SetEngine(); err != nil { return err } if err = x.Ping(); err != nil { return err } if err = migrateFunc(x); err != nil { return fmt.Errorf("migrate: %v", err) } if err = x.StoreEngine("InnoDB").Sync2(tables...); err != nil { return fmt.Errorf("sync database struct error: %v", err) } return nil }