func (s *stmt) Query(args ...interface{}) (*sql.Rows, error) {
	return s.QueryContext(context.Background(), args...)
}
Query execute statement with background context
package rwdb
import (
	"context"
	"database/sql"
	"errors"
	"sync"
)
type Stmt interface {
	Close() error
	Exec(args ...interface{}) (sql.Result, error)
	ExecContext(ctx context.Context, args ...interface{}) (sql.Result, error)
	Query(args ...interface{}) (*sql.Rows, error)
	QueryContext(ctx context.Context, args ...interface{}) (*sql.Rows, error)
	QueryRow(args ...interface{}) Row
	QueryRowContext(ctx context.Context, args ...interface{}) Row
}
type stmt struct {
	stmts []*sql.Stmt
	lock  sync.RWMutex
}
func (s *stmt) Close() error {
	for _, s := range s.stmts {
		s.Close()
	}
	return nil
}
func (s *stmt) Exec(args ...interface{}) (sql.Result, error) {
	return s.ExecContext(context.Background(), args...)
}
func (s *stmt) ExecContext(ctx context.Context, args ...interface{}) (sql.Result, error) {
	s.lock.RLock()
	defer s.lock.RUnlock()
	if len(s.stmts) == 0 {
		return nil, errors.New("zero statement executable")
	}
	return s.stmts[0].Exec(args...)
}