|
@@ -7,6 +7,7 @@ import (
|
|
|
"database/sql"
|
|
"database/sql"
|
|
|
"fmt"
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
+ "github.com/runningwater/gohub/pkg/config"
|
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm"
|
|
|
gormlgger "gorm.io/gorm/logger"
|
|
gormlgger "gorm.io/gorm/logger"
|
|
|
)
|
|
)
|
|
@@ -31,3 +32,66 @@ func Connect(dbConfig gorm.Dialector, _logger gormlgger.Interface) {
|
|
|
fmt.Println("数据库连接失败", err.Error())
|
|
fmt.Println("数据库连接失败", err.Error())
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+func CurrentDatabase() string {
|
|
|
|
|
+ return DB.Migrator().CurrentDatabase()
|
|
|
|
|
+}
|
|
|
|
|
+func DeleteAllTables() error {
|
|
|
|
|
+ var err error
|
|
|
|
|
+
|
|
|
|
|
+ switch config.Get("database.connection") {
|
|
|
|
|
+ case "mysql":
|
|
|
|
|
+ err = deleteMySQLTables()
|
|
|
|
|
+ case "sqlite":
|
|
|
|
|
+ err = deleteAllSQLiteTables()
|
|
|
|
|
+ default:
|
|
|
|
|
+ err = fmt.Errorf("不支持的数据库类型: %s", config.Get("database.connection"))
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return err
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func deleteMySQLTables() error {
|
|
|
|
|
+ dbname := CurrentDatabase()
|
|
|
|
|
+ tables := []string{}
|
|
|
|
|
+
|
|
|
|
|
+ err := DB.Table("information_schema.tables").
|
|
|
|
|
+ Where("table_schema = ?", dbname).
|
|
|
|
|
+ Pluck("table_name", &tables).Error
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 暂时关闭外键检测
|
|
|
|
|
+ DB.Exec("SET FOREIGN_KEY_CHECKS = 0;")
|
|
|
|
|
+
|
|
|
|
|
+ // 删除所有表
|
|
|
|
|
+ for _, table := range tables {
|
|
|
|
|
+ if err := DB.Migrator().DropTable(table); err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 重新启用外键检测
|
|
|
|
|
+ DB.Exec("SET FOREIGN_KEY_CHECKS = 1;")
|
|
|
|
|
+
|
|
|
|
|
+ return nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func deleteAllSQLiteTables() error {
|
|
|
|
|
+ tables := []string{}
|
|
|
|
|
+
|
|
|
|
|
+ err := DB.Raw("SELECT name FROM sqlite_master WHERE type='table'").
|
|
|
|
|
+ Pluck("name", &tables).Error
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 删除所有表
|
|
|
|
|
+ for _, table := range tables {
|
|
|
|
|
+ if err := DB.Migrator().DropTable(table); err != nil {
|
|
|
|
|
+ return err
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return nil
|
|
|
|
|
+}
|