diff --git a/agents/drivers/kingbase-go/kingbase_metadata.go b/agents/drivers/kingbase-go/kingbase_metadata.go index e226e7d837..726ae619d2 100644 --- a/agents/drivers/kingbase-go/kingbase_metadata.go +++ b/agents/drivers/kingbase-go/kingbase_metadata.go @@ -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 diff --git a/agents/drivers/kingbase-go/main_test.go b/agents/drivers/kingbase-go/main_test.go index 0b0bd98439..b0768d5d12 100644 --- a/agents/drivers/kingbase-go/main_test.go +++ b/agents/drivers/kingbase-go/main_test.go @@ -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)