| 
					
				 | 
			
			
				@@ -5,16 +5,9 @@ import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	_ "github.com/go-sql-driver/mysql" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"errors" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"os" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"regexp" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"strings" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"time" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	"golang-fave/consts" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-type Tx = sql.Tx 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type Rows = sql.Rows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type DB struct { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -23,27 +16,12 @@ type DB struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var ErrNoRows = sql.ErrNoRows 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func (this *DB) logQuery(query string, s time.Time) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	msg := query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if reg, err := regexp.Compile("[\\s\\t]+"); err == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		msg = strings.Trim(reg.ReplaceAllString(msg, " "), " ") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if consts.ParamDebug { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		t := time.Now().Sub(s).Seconds() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if consts.IS_WIN { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			fmt.Fprintln(os.Stdout, "[SQL] "+msg+fmt.Sprintf(" %.3f ms", t)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			fmt.Fprintln(os.Stdout, "\033[1;33m[SQL] "+msg+fmt.Sprintf(" %.3f ms", t)+"\033[0m") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func Open(driverName, dataSourceName string) (*DB, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	db, err := sql.Open(driverName, dataSourceName) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return nil, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return &DB{db: db}, nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return &DB{db: db}, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (this *DB) Close() error { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -69,25 +47,31 @@ func (this *DB) SetMaxOpenConns(n int) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (this *DB) QueryRow(query string, args ...interface{}) *sql.Row { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	s := time.Now() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	r := this.db.QueryRow(query, args...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	this.logQuery(query, s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	log(query, s, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return r 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-func (this *DB) Begin() (*sql.Tx, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return this.db.Begin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (this *DB) Begin() (*Tx, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tx, err := this.db.Begin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return nil, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	s := time.Now() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	log("[TX] TRANSACTION START", s, true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return &Tx{tx, s}, err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (this *DB) Query(query string, args ...interface{}) (*sql.Rows, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	s := time.Now() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	r, e := this.db.Query(query, args...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	this.logQuery(query, s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	log(query, s, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return r, e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (this *DB) Exec(query string, args ...interface{}) (sql.Result, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	s := time.Now() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	r, e := this.db.Exec(query, args...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	this.logQuery(query, s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	log(query, s, false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return r, e 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -95,17 +79,14 @@ func (this *DB) Transaction(queries func(tx *Tx) error) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if queries == nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return errors.New("queries is not set for transaction") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	tx, err := this.db.Begin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tx, err := this.Begin() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	err = queries(tx) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		tx.Rollback() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return err 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return tx.Commit() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |