package db import ( "github.com/ewhal/nyaa/config" "github.com/ewhal/nyaa/util/log" "github.com/ewhal/nyaa/model" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" // _ "github.com/go-sql-driver/mysql" ) var ORM, Errs = GormInit() // GormInit init gorm ORM. func GormInit() (*gorm.DB, error) { conf := config.NewConfig() db, err := gorm.Open(conf.DBType, conf.DBParams) // db, err := gorm.Open("mysql", config.MysqlDSL()) //db, err := gorm.Open("sqlite3", "/tmp/gorm.db") // Get database connection handle [*sql.DB](http://golang.org/pkg/database/sql/#DB) db.DB() // Then you could invoke `*sql.DB`'s functions with it db.DB().Ping() db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) // Disable table name's pluralization // db.SingularTable(true) if config.Environment == "DEVELOPMENT" { db.LogMode(true) // db.DropTable(&model.User{}, "UserFollower") db.AutoMigrate(&model.Torrents{}, &model.Categories{}, &model.Sub_Categories{}, &model.Statuses{}) // db.AutoMigrate(&model.User{}, &model.Role{}, &model.Connection{}, &model.Language{}, &model.Article{}, &model.Location{}, &model.Comment{}, &model.File{}) // db.Model(&model.User{}).AddIndex("idx_user_token", "token") } log.CheckError(err) // relation := gorm.Relationship{} // relation.Kind = "many2many" // relation.ForeignFieldNames = []string{"id"} //(M1 pkey) // relation.ForeignDBNames = []string{"user_id"} //(M1 fkey in m1m2join) // relation.AssociationForeignFieldNames = []string{"id"} //(M2 pkey) // // relation.AssociationForeignStructFieldNames = []string{"id", "ID"} //(m2 pkey name in m2 struct?) // relation.AssociationForeignDBNames = []string{"follower_id"} //(m2 fkey in m1m2join) // m1Type := reflect.TypeOf(model.User{}) // m2Type := reflect.TypeOf(model.User{}) // handler := gorm.JoinTableHandler{} // // ORDER BELOW MATTERS // // Install handler // db.SetJoinTableHandler(&model.User{}, "Likings", &handler) // // Configure handler to use the relation that we've defined // handler.Setup(&relation, "users_followers", m1Type, m2Type) return db, err }