fix(oracle): isolate charset converters per connection
This commit is contained in:
parent
526e748822
commit
86499d5ffb
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue