2019-06-08 21:53:45 +08:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2019-06-08 21:53:45 +08:00
package cmd
import (
"fmt"
2021-09-19 19:49:59 +08:00
"code.gitea.io/gitea/models/db"
2019-06-08 21:53:45 +08:00
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
2023-07-21 17:28:19 +08:00
"github.com/urfave/cli/v2"
2019-06-08 21:53:45 +08:00
)
2023-07-25 22:38:27 +08:00
// cmdDoctorConvert represents the available convert sub-command.
var cmdDoctorConvert = & cli . Command {
2019-06-08 21:53:45 +08:00
Name : "convert" ,
Usage : "Convert the database" ,
2023-04-17 21:22:10 +08:00
Description : "A command to convert an existing MySQL database from utf8 to utf8mb4 or MSSQL database from varchar to nvarchar" ,
2023-07-25 22:38:27 +08:00
Action : runDoctorConvert ,
2019-06-08 21:53:45 +08:00
}
2023-07-25 22:38:27 +08:00
func runDoctorConvert ( ctx * cli . Context ) error {
2021-11-07 11:11:27 +08:00
stdCtx , cancel := installSignals ( )
defer cancel ( )
if err := initDB ( stdCtx ) ; err != nil {
2019-06-08 21:53:45 +08:00
return err
}
2021-06-27 01:56:58 +01:00
log . Info ( "AppPath: %s" , setting . AppPath )
log . Info ( "AppWorkPath: %s" , setting . AppWorkPath )
log . Info ( "Custom path: %s" , setting . CustomPath )
2023-02-20 00:12:01 +08:00
log . Info ( "Log path: %s" , setting . Log . RootPath )
2021-09-14 02:24:57 +01:00
log . Info ( "Configuration file: %s" , setting . CustomConf )
2019-06-08 21:53:45 +08:00
2023-04-17 21:22:10 +08:00
switch {
case setting . Database . Type . IsMySQL ( ) :
2024-01-10 19:03:23 +08:00
if err := db . ConvertDatabaseTable ( ) ; err != nil {
log . Fatal ( "Failed to convert database & table: %v" , err )
2023-04-17 21:22:10 +08:00
return err
}
fmt . Println ( "Converted successfully, please confirm your database's character set is now utf8mb4" )
case setting . Database . Type . IsMSSQL ( ) :
if err := db . ConvertVarcharToNVarchar ( ) ; err != nil {
log . Fatal ( "Failed to convert database from varchar to nvarchar: %v" , err )
return err
}
fmt . Println ( "Converted successfully, please confirm your database's all columns character is NVARCHAR now" )
default :
fmt . Println ( "This command can only be used with a MySQL or MSSQL database" )
2019-06-08 21:53:45 +08:00
}
return nil
}