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 }