mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-19 16:16:45 +00:00
fix(kingbase): tolerate null current_schema in connection info
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user