sijms / go-ora

Pure go oracle client
MIT License
786 stars 174 forks source link

add ability to export default driver registered via sql.Register #433

Closed vtolstov closed 1 year ago

vtolstov commented 1 year ago

like in pgx https://github.com/jackc/pgx/blob/v3.6.2/stdlib/sql.go#L131C30-L131C30

i need this to be able to wrap oracle driver with my own for tracing/metering/logging

if i'm use plain &ora.OracleDriver{} i have errors in code about passed struct to functions...

    h := fnv.New32a()
    h.Write([]byte(ora.BuildUrl(host, port, u.Path, u.User.Username(), password, nil)))
    need2register := true
    for _, name := range sql.Drivers() {
        if name == fmt.Sprintf("micro-wrapper-sql-%d", h.Sum32()) {
            need2register = false
        }
    }

    if need2register {
        sql.Register(fmt.Sprintf("micro-wrapper-sql-%d", h.Sum32()), sqlwrapper.NewWrapper(&ora.OracleDriver{},
            sqlwrapper.DatabaseHost(u.Host),
            sqlwrapper.DatabaseName(u.Path),
            sqlwrapper.LoggerEnabled(false),
        ))
    }

    wdb, err := sql.Open(fmt.Sprintf("micro-wrapper-sql-%d", h.Sum32()), ora.BuildUrl(host, port, u.Path, u.User.Username(), password, nil))
    if err != nil {
        return nil, err
    }

    sqlx.BindDriver(fmt.Sprintf("micro-wrapper-sql-%d", h.Sum32()), sqlx.BindType("godror"))
    db := sqlx.NewDb(wdb, fmt.Sprintf("micro-wrapper-sql-%d", h.Sum32()))

error

database error: sql: converting argument $1 type: unsupported type models.CheckRequest, a struct
vtolstov commented 1 year ago

i think that i have error because type mapping not works... but in my local copy i'm add GetDefaultDriver to return registered OracleDriver and have no luck =( Do you know why this happened if i'm wrap you driver with my own and pass connection to sqlx ?

vtolstov commented 1 year ago

my bad