fix(kingbase): tolerate null current_schema in connection info

This commit is contained in:
zhukj
2026-10-18 10:40:16 +08:00
committed by GitHub
parent 76688650b4
commit 8b4d1fc930
2 changed files with 28 additions and 3 deletions
@@ -281,13 +281,14 @@ func (s *server) connectionInfo() (map[string]any, error) {
if err != nil {
return nil, err
}
var database, username, version, schema string
var database, username, version string
var schema sql.NullString
err = db.QueryRow("SELECT current_database(), current_user, version(), current_schema()").Scan(&database, &username, &version, &schema)
if err != nil {
return nil, err
}
return map[string]any{
"database": database, "username": username, "version": version, "schema": schema,
"database": database, "username": username, "version": version, "schema": schema.String,
"compatibilityMode": s.mode.compatibilityMode, "mysql_compat_mode": s.mode.mysqlCompat,
"identifierQuote": s.identifierQuote(),
}, nil
+25 -1
View File
@@ -68,6 +68,7 @@ type modeDetectionDriverState struct {
queries []string
databaseMode *string
backtickIdentifiers bool
nullCurrentSchema bool
databaseErr error
}
@@ -253,9 +254,13 @@ func (connection *modeDetectionConn) QueryContext(_ context.Context, query strin
switch {
case strings.Contains(query, "SELECT current_database()"):
var schema driver.Value = "public"
if connection.state.nullCurrentSchema {
schema = nil
}
return &valueRows{
columns: []string{"current_database", "current_user", "version", "current_schema"},
rows: [][]driver.Value{{"test", "system", "KingbaseES", "public"}},
rows: [][]driver.Value{{"test", "system", "KingbaseES", schema}},
}, nil
case strings.Contains(query, "LOWER(name) = 'database_mode'"):
if connection.state.databaseErr != nil {
@@ -4500,6 +4505,25 @@ func TestConnectionInfoReportsCompatibilityIdentifierQuote(t *testing.T) {
}
}
func TestConnectionInfoAllowsNullCurrentSchema(t *testing.T) {
db := openModeDetectionDB(t, &modeDetectionDriverState{nullCurrentSchema: true})
server := newServer()
server.db = db
server.mode.compatibilityMode = "mysql"
server.mode.mysqlCompat = true
info, err := server.connectionInfo()
if err != nil {
t.Fatal(err)
}
if info["schema"] != "" {
t.Fatalf("unexpected schema: %#v", info["schema"])
}
if info["identifierQuote"] != "`" {
t.Fatalf("unexpected identifier quote: %#v", info["identifierQuote"])
}
}
func TestDetectMySQLCompatModeProbesBacktickSyntaxWhenDatabaseModeMissing(t *testing.T) {
state := &modeDetectionDriverState{backtickIdentifiers: true}
db := openModeDetectionDB(t, state)