fix(oracle): isolate charset converters per connection

This commit is contained in:
t8y2 2026-08-02 08:12:12 +08:00
parent 526e748822
commit 86499d5ffb
No known key found for this signature in database
2 changed files with 27 additions and 9 deletions

View File

@ -939,17 +939,11 @@ func openDBWithStringConverter(params connectParams, stringConverter converters.
if err != nil {
return nil, err
}
var db *sql.DB
if stringConverter == nil {
db, err = sql.Open("oracle", dsn)
if err != nil {
return nil, err
}
} else {
connector := go_ora.NewConnector(dsn)
connector := go_ora.NewConnector(dsn)
if stringConverter != nil {
go_ora.SetStringConverter(connector, stringConverter, nil)
db = sql.OpenDB(connector)
}
db := sql.OpenDB(connector)
db.SetMaxOpenConns(4)
db.SetMaxIdleConns(1)
db.SetConnMaxLifetime(30 * time.Minute)

View File

@ -816,6 +816,30 @@ func TestOracleGB18030ConverterRoundTrip(t *testing.T) {
}
}
func TestOpenDBUsesIndependentOracleDrivers(t *testing.T) {
params := connectParams{
Host: "127.0.0.1",
Port: 1521,
Database: "ORCL",
Username: "dbx",
Password: "secret",
}
first, err := openDB(params)
if err != nil {
t.Fatal(err)
}
defer first.Close()
second, err := openDB(params)
if err != nil {
t.Fatal(err)
}
defer second.Close()
if first.Driver() == second.Driver() {
t.Fatal("Oracle connections must not share the driver's cached charset converters")
}
}
func TestOracleStringConverterForUnsupportedCharsetError(t *testing.T) {
err := errors.New("the server use charset with id: 854 which is not supported by the driver")
converter, ok := oracleStringConverterForUnsupportedCharsetError(err)