You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.9 KiB
80 lines
1.9 KiB
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
|
|
}
|
|
|