Files
MyGoNavi/internal/app/methods_db_rename_test.go
Syngnat 5052c7fa6f 🐛 fix(doris): 修复数据库重命名与字段变更预览
Refs #439
- Doris 重命名数据库改走原生 ALTER DATABASE RENAME
- Doris 字段/注释预览改为兼容语法,移除 AFTER/FIRST 和无效 NONE
- 补充相关回归测试
2026-05-08 21:24:47 +08:00

94 lines
3.1 KiB
Go

package app
import (
"testing"
"GoNavi-Wails/internal/connection"
"GoNavi-Wails/internal/db"
"GoNavi-Wails/internal/secretstore"
)
type fakeRenameDatabaseDB struct {
connectConfig connection.ConnectionConfig
execQueries []string
}
func (f *fakeRenameDatabaseDB) Connect(config connection.ConnectionConfig) error {
f.connectConfig = config
return nil
}
func (f *fakeRenameDatabaseDB) Close() error { return nil }
func (f *fakeRenameDatabaseDB) Ping() error { return nil }
func (f *fakeRenameDatabaseDB) Query(query string) ([]map[string]interface{}, []string, error) {
return nil, nil, nil
}
func (f *fakeRenameDatabaseDB) Exec(query string) (int64, error) {
f.execQueries = append(f.execQueries, query)
return 0, nil
}
func (f *fakeRenameDatabaseDB) GetDatabases() ([]string, error) { return nil, nil }
func (f *fakeRenameDatabaseDB) GetTables(dbName string) ([]string, error) {
return nil, nil
}
func (f *fakeRenameDatabaseDB) GetCreateStatement(dbName, tableName string) (string, error) {
return "", nil
}
func (f *fakeRenameDatabaseDB) GetColumns(dbName, tableName string) ([]connection.ColumnDefinition, error) {
return nil, nil
}
func (f *fakeRenameDatabaseDB) GetAllColumns(dbName string) ([]connection.ColumnDefinitionWithTable, error) {
return nil, nil
}
func (f *fakeRenameDatabaseDB) GetIndexes(dbName, tableName string) ([]connection.IndexDefinition, error) {
return nil, nil
}
func (f *fakeRenameDatabaseDB) GetForeignKeys(dbName, tableName string) ([]connection.ForeignKeyDefinition, error) {
return nil, nil
}
func (f *fakeRenameDatabaseDB) GetTriggers(dbName, tableName string) ([]connection.TriggerDefinition, error) {
return nil, nil
}
var _ db.Database = (*fakeRenameDatabaseDB)(nil)
func TestResolveDDLDBType_DorisTypeAlias(t *testing.T) {
if got := resolveDDLDBType(connection.ConnectionConfig{Type: "doris"}); got != "diros" {
t.Fatalf("expected Doris type alias to resolve to diros, got %q", got)
}
}
func TestRenameDatabase_DorisUsesNativeRenameSQL(t *testing.T) {
originalNewDatabaseFunc := newDatabaseFunc
originalResolveDialConfigWithProxyFunc := resolveDialConfigWithProxyFunc
t.Cleanup(func() {
newDatabaseFunc = originalNewDatabaseFunc
resolveDialConfigWithProxyFunc = originalResolveDialConfigWithProxyFunc
})
fakeDB := &fakeRenameDatabaseDB{}
newDatabaseFunc = func(dbType string) (db.Database, error) {
return fakeDB, nil
}
resolveDialConfigWithProxyFunc = func(raw connection.ConnectionConfig) (connection.ConnectionConfig, error) {
return raw, nil
}
app := NewAppWithSecretStore(secretstore.NewUnavailableStore("test"))
result := app.RenameDatabase(connection.ConnectionConfig{
Type: "custom",
Driver: "doris",
Database: "orders",
}, "orders", "orders_new")
if !result.Success {
t.Fatalf("expected Doris rename success, got failure: %s", result.Message)
}
if len(fakeDB.execQueries) != 1 {
t.Fatalf("expected one rename statement, got %d: %#v", len(fakeDB.execQueries), fakeDB.execQueries)
}
const want = "ALTER DATABASE `orders` RENAME `orders_new`"
if fakeDB.execQueries[0] != want {
t.Fatalf("unexpected Doris rename SQL, want %q got %q", want, fakeDB.execQueries[0])
}
}