🐛 fix(mysql): 补充 PolarDB-X 数据库列表回退查询

Fixes #455
This commit is contained in:
Syngnat
2026-06-29 20:25:30 +08:00
parent 61c2e524b4
commit d2a535e6ff
2 changed files with 35 additions and 0 deletions

View File

@@ -592,6 +592,7 @@ func normalizeMySQLAddress(host string, port int) string {
var mysqlDatabaseQueries = []string{
"SHOW DATABASES",
"SELECT DATABASE() AS `Database`",
"SELECT schema_name AS database_name FROM information_schema.schemata ORDER BY schema_name",
}
var mysqlDatabaseNameKeys = []string{

View File

@@ -98,6 +98,10 @@ func TestCollectMySQLDatabaseNames_ReturnsOriginalErrorWhenNoDatabaseResolved(t
return []map[string]interface{}{
{"Database": nil},
}, nil, nil
case mysqlDatabaseQueries[2]:
return []map[string]interface{}{
{"database_name": nil},
}, nil, nil
default:
return nil, nil, errors.New("unexpected query")
}
@@ -110,6 +114,36 @@ func TestCollectMySQLDatabaseNames_ReturnsOriginalErrorWhenNoDatabaseResolved(t
}
}
func TestCollectMySQLDatabaseNames_FallsBackToInformationSchemaSchemata(t *testing.T) {
t.Parallel()
got, err := collectMySQLDatabaseNames(func(query string) ([]map[string]interface{}, []string, error) {
switch query {
case mysqlDatabaseQueries[0]:
return nil, nil, errors.New("show databases denied")
case mysqlDatabaseQueries[1]:
return []map[string]interface{}{
{"Database": nil},
}, nil, nil
case mysqlDatabaseQueries[2]:
return []map[string]interface{}{
{"SCHEMA_NAME": "leite-finance"},
{"database_name": "analytics"},
}, []string{"SCHEMA_NAME", "database_name"}, nil
default:
return nil, nil, errors.New("unexpected query")
}
})
if err != nil {
t.Fatalf("collectMySQLDatabaseNames 返回错误: %v", err)
}
want := []string{"leite-finance", "analytics"}
if !reflect.DeepEqual(got, want) {
t.Fatalf("unexpected database names, got=%v want=%v", got, want)
}
}
func TestBuildMySQLShowCreateTableQueryNormalizesQuotedIdentifiers(t *testing.T) {
t.Parallel()