github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/sqlx/db.go (about)

     1  package sqlx
     2  
     3  import (
     4  	"database/sql"
     5  	"errors"
     6  	"time"
     7  
     8  	"github.com/johnnyeven/libtools/sqlx/builder"
     9  	_ "github.com/johnnyeven/libtools/sqlx/mysql_logger_driver"
    10  )
    11  
    12  var ErrNotTx = errors.New("db is not *sql.Tx")
    13  var ErrNotDB = errors.New("db is not *sql.DB")
    14  
    15  func Open(driverName string, dataSourceName string, openFunc func(string, string) (*sql.DB, error)) (*DB, error) {
    16  	db, err := openFunc(driverName, dataSourceName)
    17  	if err != nil {
    18  		return nil, err
    19  	}
    20  	return &DB{
    21  		SqlExecutor: db,
    22  	}, nil
    23  }
    24  
    25  func MustOpen(driverName string, dataSourceName string, openFunc func(string, string) (*sql.DB, error)) *DB {
    26  	db, err := Open(driverName, dataSourceName, openFunc)
    27  	if err != nil {
    28  		panic(err)
    29  	}
    30  	return db
    31  }
    32  
    33  type DB struct {
    34  	SqlExecutor
    35  }
    36  
    37  func (d *DB) Do(stmt builder.Statement) (result *Result) {
    38  	return Do(d, stmt)
    39  }
    40  
    41  func (d *DB) IsTx() bool {
    42  	_, ok := d.SqlExecutor.(*sql.Tx)
    43  	return ok
    44  }
    45  
    46  func (d *DB) Query(query string, args ...interface{}) (*sql.Rows, error) {
    47  	query, args = flattenArgs(query, args...)
    48  	return d.SqlExecutor.Query(query, args...)
    49  }
    50  
    51  func (d *DB) Exec(query string, args ...interface{}) (sql.Result, error) {
    52  	query, args = flattenArgs(query, args...)
    53  	return d.SqlExecutor.Exec(query, args...)
    54  }
    55  
    56  func (d *DB) Begin() (*DB, error) {
    57  	if d.IsTx() {
    58  		return nil, ErrNotDB
    59  	}
    60  	db, err := d.SqlExecutor.(*sql.DB).Begin()
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  	return &DB{
    65  		SqlExecutor: db,
    66  	}, nil
    67  }
    68  
    69  func (d *DB) Commit() error {
    70  	if !d.IsTx() {
    71  		return ErrNotTx
    72  	}
    73  	return d.SqlExecutor.(*sql.Tx).Commit()
    74  }
    75  
    76  func (d *DB) Rollback() error {
    77  	if !d.IsTx() {
    78  		return ErrNotTx
    79  	}
    80  	return d.SqlExecutor.(*sql.Tx).Rollback()
    81  }
    82  
    83  func (d *DB) SetMaxOpenConns(n int) {
    84  	d.SqlExecutor.(*sql.DB).SetMaxOpenConns(n)
    85  }
    86  
    87  func (d *DB) SetMaxIdleConns(n int) {
    88  	d.SqlExecutor.(*sql.DB).SetMaxIdleConns(n)
    89  }
    90  
    91  func (d *DB) SetConnMaxLifetime(t time.Duration) {
    92  	d.SqlExecutor.(*sql.DB).SetConnMaxLifetime(t)
    93  }