48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
package db
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// V1_0_16_IncreaseKeyValueLength migrates the key_value column length.
|
|
func V1_0_16_IncreaseKeyValueLength(db *gorm.DB) error {
|
|
if err := alterColumnType(db, "api_keys", "key_value", "varchar(1024)"); err != nil {
|
|
return fmt.Errorf("failed to migrate api_keys table: %w", err)
|
|
}
|
|
|
|
if err := alterColumnType(db, "request_logs", "key_value", "varchar(1024)"); err != nil {
|
|
return fmt.Errorf("failed to migrate request_logs table: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func alterColumnType(db *gorm.DB, tableName, columnName, newType string) error {
|
|
var currentType string
|
|
switch db.Dialector.Name() {
|
|
case "sqlite":
|
|
return nil
|
|
case "mysql":
|
|
err := db.Raw("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME = ?",
|
|
db.Migrator().CurrentDatabase(), tableName, columnName).Scan(¤tType).Error
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if currentType == newType {
|
|
return nil
|
|
}
|
|
return db.Exec(fmt.Sprintf("ALTER TABLE %s MODIFY COLUMN %s %s", tableName, columnName, newType)).Error
|
|
case "postgres":
|
|
err := db.Raw("SELECT data_type FROM information_schema.columns WHERE table_name = ? AND column_name = ?",
|
|
tableName, columnName).Scan(¤tType).Error
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return db.Exec(fmt.Sprintf("ALTER TABLE %s ALTER COLUMN %s TYPE %s", tableName, columnName, newType)).Error
|
|
default:
|
|
return nil
|
|
}
|
|
}
|