DB driver: Add wrapper structs for low-level objects (#17709)

This is a necessary step for adding the RPC communication
because each method call of each object needs to go through
the RPC layer.

Hence doing this part in a separate PR rather than heaping
everything in a single PR.

https://focalboard-community.octo.mattermost.com/workspace/zyoahc9uapdn3xdptac6jb69ic?id=285b80a3-257d-41f6-8cf4-ed80ca9d92e5&v=495cdb4d-c13a-4992-8eb9-80cfee2819a4&c=c7386db7-65fd-469b-8bcf-8dc8f8e61e4f

```release-note
NONE
```
Этот коммит содержится в:
Agniva De Sarker
2021-06-04 14:24:22 +05:30
коммит произвёл GitHub
родитель 0e42613aef
Коммит 32bc33942f
2 изменённых файлов: 116 добавлений и 13 удалений

Просмотреть файл

@@ -40,41 +40,46 @@ func (c *Conn) Begin() (tx driver.Tx, err error) {
return tx, err
}
func (c *Conn) BeginTx(ctx context.Context, opts driver.TxOptions) (tx driver.Tx, err error) {
func (c *Conn) BeginTx(ctx context.Context, opts driver.TxOptions) (_ driver.Tx, err error) {
t := &wrapperTx{}
err = c.conn.Raw(func(innerConn interface{}) error {
tx, err = innerConn.(driver.ConnBeginTx).BeginTx(ctx, opts)
t.Tx, err = innerConn.(driver.ConnBeginTx).BeginTx(ctx, opts)
return err
})
return tx, err
return t, err
}
func (c *Conn) Prepare(q string) (stmt driver.Stmt, err error) {
func (c *Conn) Prepare(q string) (_ driver.Stmt, err error) {
st := &wrapperStmt{}
err = c.conn.Raw(func(innerConn interface{}) error {
stmt, err = innerConn.(driver.Conn).Prepare(q)
st.Stmt, err = innerConn.(driver.Conn).Prepare(q)
return err
})
return stmt, err
return st, err
}
func (c *Conn) PrepareContext(ctx context.Context, q string) (stmt driver.Stmt, err error) {
func (c *Conn) PrepareContext(ctx context.Context, q string) (_ driver.Stmt, err error) {
st := &wrapperStmt{}
err = c.conn.Raw(func(innerConn interface{}) error {
stmt, err = innerConn.(driver.ConnPrepareContext).PrepareContext(ctx, q)
st.Stmt, err = innerConn.(driver.ConnPrepareContext).PrepareContext(ctx, q)
return err
})
return stmt, err
return st, err
}
func (c *Conn) ExecContext(ctx context.Context, q string, args []driver.NamedValue) (res driver.Result, err error) {
func (c *Conn) ExecContext(ctx context.Context, q string, args []driver.NamedValue) (_ driver.Result, err error) {
res := &wrapperResult{}
err = c.conn.Raw(func(innerConn interface{}) error {
res, err = innerConn.(driver.ExecerContext).ExecContext(ctx, q, args)
res.Result, err = innerConn.(driver.ExecerContext).ExecContext(ctx, q, args)
return err
})
return res, err
}
func (c *Conn) QueryContext(ctx context.Context, q string, args []driver.NamedValue) (rows driver.Rows, err error) {
func (c *Conn) QueryContext(ctx context.Context, q string, args []driver.NamedValue) (_ driver.Rows, err error) {
rows := &wrapperRows{}
err = c.conn.Raw(func(innerConn interface{}) error {
rows, err = innerConn.(driver.QueryerContext).QueryContext(ctx, q, args)
rows.Rows, err = innerConn.(driver.QueryerContext).QueryContext(ctx, q, args)
return err
})
return rows, err