func (tx *Tx) Prepare(ctx context.Context, query string) (*Stmt, error) {
	stmt, err := tx.Tx.PrepareContext(ctx, query)
	if err != nil {
		return nil, err
	}
	return &Stmt{Stmt: stmt}, err
}
Prepare creates a prepared statement for later queries or executions.
package xray
import (
	"context"
	"database/sql"
)
func SQL(driver, dsn string) (*DB, error) {
	db, err := SQLContext(driver, dsn)
	if err != nil {
		return nil, err
	}
	return &DB{DB: db}, nil
}
type DB struct {
	*sql.DB
}
func (db *DB) Begin(ctx context.Context, opts *sql.TxOptions) (*Tx, error) {
	tx, err := db.BeginTx(ctx, opts)
	if err != nil {
		return nil, err
	}
	return &Tx{Tx: tx}, nil
}
func (db *DB) Prepare(ctx context.Context, query string) (*Stmt, error) {
	stmt, err := db.PrepareContext(ctx, query)
	if err != nil {
		return nil, err
	}
	return &Stmt{Stmt: stmt}, nil
}
func (db *DB) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error) {
	return db.ExecContext(ctx, query, args...)
}
func (db *DB) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) {
	return db.QueryContext(ctx, query, args)
}
func (db *DB) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row {
	return db.QueryRowContext(ctx, query, args...)
}
type Tx struct {
	*sql.Tx
}