github.com/RevenueMonster/sqlike@v1.0.6/sql/driver/driver.go (about)

     1  package driver
     2  
     3  import (
     4  	"context"
     5  	"database/sql"
     6  
     7  	"github.com/RevenueMonster/sqlike/sql/charset"
     8  	sqlstmt "github.com/RevenueMonster/sqlike/sql/stmt"
     9  	"github.com/RevenueMonster/sqlike/sqlike/logs"
    10  )
    11  
    12  // Info :
    13  type Info interface {
    14  	DriverName() string
    15  	Charset() charset.Code
    16  	Collate() string
    17  }
    18  
    19  // Queryer :
    20  type Queryer interface {
    21  	QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
    22  }
    23  
    24  // Driver :
    25  type Driver interface {
    26  	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
    27  	QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
    28  	QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
    29  }
    30  
    31  // Execute :
    32  func Execute(ctx context.Context, driver Driver, stmt *sqlstmt.Statement, logger logs.Logger) (result sql.Result, err error) {
    33  	if logger != nil {
    34  		stmt.StartTimer()
    35  		defer func() {
    36  			stmt.StopTimer()
    37  			logger.Debug(stmt)
    38  		}()
    39  	}
    40  	result, err = driver.ExecContext(ctx, stmt.String(), stmt.Args()...)
    41  	return
    42  }
    43  
    44  // Query :
    45  func Query(ctx context.Context, driver Driver, stmt *sqlstmt.Statement, logger logs.Logger) (rows *sql.Rows, err error) {
    46  	if logger != nil {
    47  		stmt.StartTimer()
    48  		defer func() {
    49  			stmt.StopTimer()
    50  			logger.Debug(stmt)
    51  		}()
    52  	}
    53  	rows, err = driver.QueryContext(ctx, stmt.String(), stmt.Args()...)
    54  	return
    55  }
    56  
    57  // QueryRowContext :
    58  func QueryRowContext(ctx context.Context, driver Driver, stmt *sqlstmt.Statement, logger logs.Logger) (row *sql.Row) {
    59  	if logger != nil {
    60  		stmt.StartTimer()
    61  		defer func() {
    62  			stmt.StopTimer()
    63  			logger.Debug(stmt)
    64  		}()
    65  	}
    66  	row = driver.QueryRowContext(ctx, stmt.String(), stmt.Args()...)
    67  	return
    68  }