普通にToSql()して、conn.QueryContextに渡してやれば良いんだけど、どうしても渡したい。そんな気分。
渡せない理由が、下記エラー。
*sql.Conn does not implement squirrel.BaseRunner (missing Exec method)
私は、SelectBuilderのQueryContextを使いたいだけで、QueryもExecも使わないのだけれど。なので、おかしなものを定義してみる。
type connWrapper struct {
*sql.Conn
}
func (c *connWrapper) Exec(query string, args ...interface{}) (sql.Result, error) {
return nil, nil
}
func (c *connWrapper) Query(query string, args ...interface{}) (*sql.Rows, error) {
return nil, nil
}
で、前に書いたsql_calc_found_rowsのコードはこんな感じになると。
rows, err := sq.
Select("*").
Options("sql_calc_found_rows").
From("users").
RunWith(&connWrapper{conn}).QueryContext(ctx)
動いたけど、これじゃない感はあるな…