func (mg *Migrator) exec(m Migration) error { if mg.LogLevel <= log.INFO { log.Info("Migrator: exec migration id: %v", m.Id()) } err := mg.inTransaction(func(sess *xorm.Session) error { condition := m.GetCondition() if condition != nil { sql, args := condition.Sql(mg.dialect) results, err := sess.Query(sql, args...) if err != nil || len(results) == 0 { log.Info("Migrator: skipping migration id: %v, condition not fulfilled", m.Id()) return sess.Rollback() } } _, err := sess.Exec(m.Sql(mg.dialect)) if err != nil { log.Error(3, "Migrator: exec FAILED migration id: %v, err: %v", m.Id(), err) return err } //run additiona migration code. return m.ExecOnSuccess(sess) }) if err != nil { return err } return nil }
func LogConfigurationInfo() { var text bytes.Buffer text.WriteString("Configuration Info\n") text.WriteString("Config files:\n") for i, file := range configFiles { text.WriteString(fmt.Sprintf(" [%d]: %s\n", i, file)) } if len(appliedCommandLineProperties) > 0 { text.WriteString("Command lines overrides:\n") for i, prop := range appliedCommandLineProperties { text.WriteString(fmt.Sprintf(" [%d]: %s\n", i, prop)) } } if len(appliedEnvOverrides) > 0 { text.WriteString("\tEnvironment variables used:\n") for i, prop := range appliedEnvOverrides { text.WriteString(fmt.Sprintf(" [%d]: %s\n", i, prop)) } } text.WriteString("Paths:\n") text.WriteString(fmt.Sprintf(" home: %s\n", HomePath)) text.WriteString(fmt.Sprintf(" data: %s\n", DataPath)) text.WriteString(fmt.Sprintf(" logs: %s\n", LogsPath)) log.Info(text.String()) }
func (mg *Migrator) Start() error { if mg.LogLevel <= log.INFO { log.Info("Migrator: Starting DB migration") } logMap, err := mg.GetMigrationLog() if err != nil { return err } for _, m := range mg.migrations { _, exists := logMap[m.Id()] if exists { if mg.LogLevel <= log.DEBUG { log.Debug("Migrator: Skipping migration: %v, Already executed", m.Id()) } continue } sql := m.Sql(mg.dialect) record := MigrationLog{ MigrationId: m.Id(), Sql: sql, Timestamp: time.Now(), } if mg.LogLevel <= log.DEBUG { log.Debug("Migrator: Executing SQL: \n %v \n", sql) } if err := mg.exec(m); err != nil { log.Error(3, "Migrator: error: \n%s:\n%s", err, sql) record.Error = err.Error() mg.x.Insert(&record) return err } else { record.Success = true mg.x.Insert(&record) } } return nil }