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