diff --git a/internal/setup/sql_upgrade.go b/internal/setup/sql_upgrade.go index a4a2707f..2de883c1 100644 --- a/internal/setup/sql_upgrade.go +++ b/internal/setup/sql_upgrade.go @@ -17,6 +17,7 @@ import ( "github.com/iwind/TeaGo/rands" "github.com/iwind/TeaGo/types" stringutil "github.com/iwind/TeaGo/utils/string" + "strings" ) type upgradeVersion struct { @@ -91,6 +92,9 @@ var upgradeFuncs = []*upgradeVersion{ { "0.5.8", upgradeV0_5_8, }, + { + "1.2.1", upgradeV1_2_1, + }, } // UpgradeSQLData 升级SQL数据 @@ -719,3 +723,32 @@ func upgradeV0_4_11(db *dbs.DB) error { return nil } + +// v1.2.1 +func upgradeV1_2_1(db *dbs.DB) error { + // upgrade generated USER-xxx in old versions + ones, _, err := db.FindOnes("SELECT id, username, clusterId FROM edgeUsers WHERE username LIKE 'USER-%'") + if err != nil { + return err + } + for _, one := range ones { + var userId = one.GetInt64("id") + var clusterId = one.GetInt64("clusterId") + var username = one.GetString("username") + if clusterId <= 0 { + defaultClusterIdValue, err := db.FindCol(0, "SELECT id FROM edgeNodeClusters WHERE state=1 ORDER BY id ASC LIMIT 1") + if err != nil { + return err + } + + var defaultClusterId = types.Int64(defaultClusterIdValue) + if defaultClusterId > 0 { + _, err = db.Exec("UPDATE edgeUsers SET username=?, clusterId=? WHERE id=?", strings.ReplaceAll(username, "-", "_"), defaultClusterId, userId) + if err != nil { + return err + } + } + } + } + return nil +} diff --git a/internal/setup/sql_upgrade_test.go b/internal/setup/sql_upgrade_test.go index 462decc6..24122c52 100644 --- a/internal/setup/sql_upgrade_test.go +++ b/internal/setup/sql_upgrade_test.go @@ -252,3 +252,23 @@ func TestUpgradeSQLData_v0_5_3(t *testing.T) { t.Log("ok") } +func TestUpgradeSQLData_v1_2_1(t *testing.T) { + db, err := dbs.NewInstanceFromConfig(&dbs.DBConfig{ + Driver: "mysql", + Dsn: "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s", + Prefix: "edge", + }) + if err != nil { + t.Fatal(err) + } + defer func() { + _ = db.Close() + }() + err = upgradeV1_2_1(db) + if err != nil { + t.Fatal(err) + } + t.Log("ok") +} + +