|
@@ -3,6 +3,8 @@ package support
|
|
|
import (
|
|
|
"io/ioutil"
|
|
|
"os"
|
|
|
+ "regexp"
|
|
|
+ "strings"
|
|
|
|
|
|
"golang-fave/engine/sqlw"
|
|
|
"golang-fave/support/migrate"
|
|
@@ -17,6 +19,18 @@ func New() *Support {
|
|
|
return &sup
|
|
|
}
|
|
|
|
|
|
+func (this *Support) isSettingsTableDoesntExist(err error) bool {
|
|
|
+ error_msg := strings.ToLower(err.Error())
|
|
|
+ if match, _ := regexp.MatchString(`^error 1146`, error_msg); match {
|
|
|
+ if match, _ := regexp.MatchString(`'[^\.]+\.settings'`, error_msg); match {
|
|
|
+ if match, _ := regexp.MatchString(`doesn't exist$`, error_msg); match {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false
|
|
|
+}
|
|
|
+
|
|
|
func (this *Support) Migration(dir string) error {
|
|
|
files, err := ioutil.ReadDir(dir)
|
|
|
if err != nil {
|
|
@@ -49,6 +63,23 @@ func (this *Support) Migrate(host string) error {
|
|
|
defer db.Close()
|
|
|
var version string
|
|
|
if err := db.QueryRow(`SELECT value FROM settings WHERE name = 'database_version' LIMIT 1;`).Scan(&version); err != nil {
|
|
|
+ if this.isSettingsTableDoesntExist(err) {
|
|
|
+ if _, err := db.Exec(
|
|
|
+ `CREATE TABLE settings (
|
|
|
+ name varchar(255) NOT NULL COMMENT 'Setting name',
|
|
|
+ value text NOT NULL COMMENT 'Setting value'
|
|
|
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
|
|
|
+ ); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ if _, err := db.Exec(
|
|
|
+ `INSERT INTO settings (name, value) VALUES ('database_version', '000000002');`,
|
|
|
+ ); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ version = "000000002"
|
|
|
+ err = nil
|
|
|
+ }
|
|
|
return err
|
|
|
}
|
|
|
return this.Process(db, version, host)
|