good morning!!!!

Skip to content
Snippets Groups Projects
Commit 06da7349 authored by José Carlos Nieto's avatar José Carlos Nieto
Browse files

Better debugger functionality.

parent 05f86ea8
Branches
Tags
No related merge requests found
...@@ -70,6 +70,13 @@ func debugEnabled() bool { ...@@ -70,6 +70,13 @@ func debugEnabled() bool {
return false return false
} }
func debugLog(query string, args []interface{}, err error) {
if debugEnabled() == true {
d := sqlutil.Debug{query, args, err}
d.Print()
}
}
func init() { func init() {
template = &sqlgen.Template{ template = &sqlgen.Template{
...@@ -106,68 +113,82 @@ func init() { ...@@ -106,68 +113,82 @@ func init() {
} }
func (self *Source) doExec(stmt sqlgen.Statement, args ...interface{}) (sql.Result, error) { func (self *Source) doExec(stmt sqlgen.Statement, args ...interface{}) (sql.Result, error) {
var query string
var res sql.Result
var err error
defer func() {
debugLog(query, args, err)
}()
if self.session == nil { if self.session == nil {
return nil, db.ErrNotConnected return nil, db.ErrNotConnected
} }
query := stmt.Compile(template) query = stmt.Compile(template)
l := len(args) l := len(args)
for i := 0; i < l; i++ { for i := 0; i < l; i++ {
query = strings.Replace(query, `?`, fmt.Sprintf(`$%d`, i+1), 1) query = strings.Replace(query, `?`, fmt.Sprintf(`$%d`, i+1), 1)
} }
if debugEnabled() == true {
sqlutil.DebugQuery(query, args)
}
if self.tx != nil { if self.tx != nil {
return self.tx.Exec(query, args...) res, err = self.tx.Exec(query, args...)
} else {
res, err = self.session.Exec(query, args...)
} }
return self.session.Exec(query, args...) return res, err
} }
func (self *Source) doQuery(stmt sqlgen.Statement, args ...interface{}) (*sql.Rows, error) { func (self *Source) doQuery(stmt sqlgen.Statement, args ...interface{}) (*sql.Rows, error) {
var rows *sql.Rows
var query string
var err error
defer func() {
debugLog(query, args, err)
}()
if self.session == nil { if self.session == nil {
return nil, db.ErrNotConnected return nil, db.ErrNotConnected
} }
query := stmt.Compile(template) query = stmt.Compile(template)
l := len(args) l := len(args)
for i := 0; i < l; i++ { for i := 0; i < l; i++ {
query = strings.Replace(query, `?`, fmt.Sprintf(`$%d`, i+1), 1) query = strings.Replace(query, `?`, fmt.Sprintf(`$%d`, i+1), 1)
} }
if debugEnabled() == true {
sqlutil.DebugQuery(query, args)
}
if self.tx != nil { if self.tx != nil {
return self.tx.Query(query, args...) rows, err = self.tx.Query(query, args...)
} else {
rows, err = self.session.Query(query, args...)
} }
return self.session.Query(query, args...) return rows, err
} }
func (self *Source) doQueryRow(stmt sqlgen.Statement, args ...interface{}) (*sql.Row, error) { func (self *Source) doQueryRow(stmt sqlgen.Statement, args ...interface{}) (*sql.Row, error) {
var query string
var err error
defer func() {
debugLog(query, args, err)
}()
if self.session == nil { if self.session == nil {
return nil, db.ErrNotConnected return nil, db.ErrNotConnected
} }
query := stmt.Compile(template) query = stmt.Compile(template)
l := len(args) l := len(args)
for i := 0; i < l; i++ { for i := 0; i < l; i++ {
query = strings.Replace(query, `?`, fmt.Sprintf(`$%d`, i+1), 1) query = strings.Replace(query, `?`, fmt.Sprintf(`$%d`, i+1), 1)
} }
if debugEnabled() == true {
sqlutil.DebugQuery(query, args)
}
if self.tx != nil { if self.tx != nil {
return self.tx.QueryRow(query, args...), nil return self.tx.QueryRow(query, args...), nil
} }
......
...@@ -25,6 +25,7 @@ package sqlutil ...@@ -25,6 +25,7 @@ package sqlutil
import ( import (
"database/sql" "database/sql"
"fmt"
"log" "log"
"menteslibres.net/gosexy/to" "menteslibres.net/gosexy/to"
"reflect" "reflect"
...@@ -43,10 +44,31 @@ type T struct { ...@@ -43,10 +44,31 @@ type T struct {
ColumnTypes map[string]reflect.Kind ColumnTypes map[string]reflect.Kind
} }
func DebugQuery(s string, args []interface{}) { type Debug struct {
s = reInvisibleChars.ReplaceAllString(s, ` `) SQL string
s = strings.TrimSpace(s) Args []interface{}
log.Printf("\n\tSQL: %s\n\tARGS: %v\n\n", s, args) Err error
}
func (self *Debug) Print() {
self.SQL = reInvisibleChars.ReplaceAllString(self.SQL, ` `)
self.SQL = strings.TrimSpace(self.SQL)
s := make([]string, 0, 3)
if self.SQL != "" {
s = append(s, fmt.Sprintf(`SQL: %s`, self.SQL))
}
if len(self.Args) > 0 {
s = append(s, fmt.Sprintf(`ARG: %s`, self.Args))
}
if self.Err != nil {
s = append(s, fmt.Sprintf(`ERR: %q`, self.Err))
}
log.Printf("\n\t%s\n\n", strings.Join(s, "\n\t"))
} }
func (self *T) ColumnLike(s string) string { func (self *T) ColumnLike(s string) string {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment