logging interface changed and resolved #160 #219 #353

This commit is contained in:
Lunny Xiao 2016-02-16 17:18:01 +08:00
parent f56113384f
commit a0aaa7d72b
12 changed files with 152 additions and 131 deletions

View File

@ -51,6 +51,11 @@ Drivers for Go's sql package which currently support database/sql includes:
# Changelog # Changelog
* **v0.4.5**
* many bugs fixed
* extends support unlimited deep
* Delete Limit support
* **v0.4.4** * **v0.4.4**
* ql database expriment support * ql database expriment support
* tidb database expriment support * tidb database expriment support

View File

@ -52,6 +52,11 @@ xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作
## 更新日志 ## 更新日志
* **v0.4.5**
* bug修正
* extends 支持无限级
* Delete Limit 支持
* **v0.4.4** * **v0.4.4**
* Tidb 数据库支持 * Tidb 数据库支持
* QL 试验性支持 * QL 试验性支持
@ -59,11 +64,6 @@ xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作
* ForUpdate 支持 * ForUpdate 支持
* bug修正 * bug修正
* **v0.4.3**
* Json 字段类型支持
* oracle实验性支持
* bug修正
[更多更新日志...](https://github.com/go-xorm/manual-zh-CN/tree/master/chapter-16) [更多更新日志...](https://github.com/go-xorm/manual-zh-CN/tree/master/chapter-16)
## 安装 ## 安装

View File

@ -1 +1 @@
xorm v0.4.5.0204 xorm v0.5.0.0216

150
engine.go
View File

@ -36,23 +36,47 @@ type Engine struct {
mutex *sync.RWMutex mutex *sync.RWMutex
Cacher core.Cacher Cacher core.Cacher
ShowSQL bool // 是否显示SQL
showSQL bool
showExecTime bool
//ShowSQL bool
// !nashtsai! TODO ought to deprecate these but having logger to control its log level // !nashtsai! TODO ought to deprecate these but having logger to control its log level
ShowInfo bool /*ShowInfo bool
ShowErr bool ShowErr bool*/
ShowDebug bool //ShowDebug bool
ShowWarn bool //ShowWarn bool*/
// --227 // --227
Logger core.ILogger logger core.ILogger
TZLocation *time.Location TZLocation *time.Location
disableGlobalCache bool disableGlobalCache bool
} }
func (engine *Engine) ShowSQL(show ...bool) {
engine.logger.ShowSQL(show...)
if len(show) == 0 {
engine.showSQL = true
} else {
engine.showSQL = show[0]
}
}
func (engine *Engine) ShowExecTime(show ...bool) {
if len(show) == 0 {
engine.showExecTime = true
} else {
engine.showExecTime = show[0]
}
}
func (engine *Engine) Logger() core.ILogger {
return engine.logger
}
func (engine *Engine) SetLogger(logger core.ILogger) { func (engine *Engine) SetLogger(logger core.ILogger) {
engine.Logger = logger engine.logger = logger
engine.dialect.SetLogger(logger) engine.dialect.SetLogger(logger)
} }
@ -194,34 +218,42 @@ func (engine *Engine) Ping() error {
// logging sql // logging sql
func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) { func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) {
if engine.ShowSQL { if engine.showSQL && !engine.showExecTime {
engine.overrideLogLevel(core.LOG_INFO) //engine.overrideLogLevel(core.LOG_INFO)
if len(sqlArgs) > 0 { if len(sqlArgs) > 0 {
engine.Logger.Infof("[sql] %v [args] %v", sqlStr, sqlArgs) engine.logger.Infof("[sql] %v [args] %v", sqlStr, sqlArgs)
} else { } else {
engine.Logger.Infof("[sql] %v", sqlStr) engine.logger.Infof("[sql] %v", sqlStr)
} }
} }
} }
func (engine *Engine) LogSQLQueryTime(sqlStr string, args interface{}, executionBlock func() (*core.Stmt, *core.Rows, error)) (*core.Stmt, *core.Rows, error) { func (engine *Engine) logSQLQueryTime(sqlStr string, args []interface{}, executionBlock func() (*core.Stmt, *core.Rows, error)) (*core.Stmt, *core.Rows, error) {
if engine.ShowDebug { if engine.showSQL && engine.showExecTime {
b4ExecTime := time.Now() b4ExecTime := time.Now()
stmt, res, err := executionBlock() stmt, res, err := executionBlock()
execDuration := time.Since(b4ExecTime) execDuration := time.Since(b4ExecTime)
engine.LogDebugf("[time] %s - args %v - query took: %vns", sqlStr, args, execDuration.Nanoseconds()) if len(args) > 0 {
engine.logger.Infof("[sql] %s [args] %v - took: %v", sqlStr, args, execDuration)
} else {
engine.logger.Infof("[sql] %s - took: %v", sqlStr, execDuration)
}
return stmt, res, err return stmt, res, err
} else { } else {
return executionBlock() return executionBlock()
} }
} }
func (engine *Engine) LogSQLExecutionTime(sqlStr string, args interface{}, executionBlock func() (sql.Result, error)) (sql.Result, error) { func (engine *Engine) logSQLExecutionTime(sqlStr string, args []interface{}, executionBlock func() (sql.Result, error)) (sql.Result, error) {
if engine.ShowDebug { if engine.showSQL && engine.showExecTime {
b4ExecTime := time.Now() b4ExecTime := time.Now()
res, err := executionBlock() res, err := executionBlock()
execDuration := time.Since(b4ExecTime) execDuration := time.Since(b4ExecTime)
engine.LogDebugf("[time] %s - args %v - execution took: %vns", sqlStr, args, execDuration.Nanoseconds()) if len(args) > 0 {
engine.logger.Infof("[sql] %s [args] %v - took: %v", sqlStr, args, execDuration)
} else {
engine.logger.Infof("[sql] %s - took: %v", sqlStr, execDuration)
}
return res, err return res, err
} else { } else {
return executionBlock() return executionBlock()
@ -229,73 +261,73 @@ func (engine *Engine) LogSQLExecutionTime(sqlStr string, args interface{}, execu
} }
// logging error // logging error
/*
func (engine *Engine) overrideLogLevel(overrideLevel core.LogLevel) { func (engine *Engine) overrideLogLevel(overrideLevel core.LogLevel) {
logLevel := engine.Logger.Level() logLevel := engine.logger.Level()
if logLevel == core.LOG_UNKNOWN { if logLevel == core.LOG_UNKNOWN {
// intend to left empty // intend to left empty
} else if logLevel < overrideLevel { // TODO can remove if deprecated engine.ShowErr } else if logLevel < overrideLevel { // TODO can remove if deprecated engine.ShowErr
engine.Logger.SetLevel(core.LOG_ERR) // try override logger's log level engine.logger.SetLevel(core.LOG_ERR) // try override logger's log level
} }
}*/
}
func (engine *Engine) LogError(contents ...interface{}) { func (engine *Engine) LogError(contents ...interface{}) {
if engine.ShowErr { //if engine.ShowErr {
engine.overrideLogLevel(core.LOG_ERR) // engine.overrideLogLevel(core.LOG_ERR)
engine.Logger.Err(contents...) engine.logger.Err(contents...)
} //}
} }
func (engine *Engine) LogErrorf(format string, contents ...interface{}) { func (engine *Engine) LogErrorf(format string, contents ...interface{}) {
if engine.ShowErr { //if engine.ShowErr {
engine.overrideLogLevel(core.LOG_ERR) // engine.overrideLogLevel(core.LOG_ERR)
engine.Logger.Errf(format, contents...) engine.logger.Errf(format, contents...)
} //}
} }
// logging info // logging info
func (engine *Engine) LogInfo(contents ...interface{}) { func (engine *Engine) LogInfo(contents ...interface{}) {
if engine.ShowInfo { //if engine.ShowInfo {
engine.overrideLogLevel(core.LOG_INFO) // engine.overrideLogLevel(core.LOG_INFO)
engine.Logger.Info(contents...) engine.logger.Info(contents...)
} //}
} }
func (engine *Engine) LogInfof(format string, contents ...interface{}) { func (engine *Engine) LogInfof(format string, contents ...interface{}) {
if engine.ShowErr { //if engine.ShowErr {
engine.overrideLogLevel(core.LOG_INFO) // engine.overrideLogLevel(core.LOG_INFO)
engine.Logger.Infof(format, contents...) engine.logger.Infof(format, contents...)
} //}
} }
// logging debug // logging debug
func (engine *Engine) LogDebug(contents ...interface{}) { func (engine *Engine) LogDebug(contents ...interface{}) {
if engine.ShowDebug { //if engine.ShowDebug {
engine.overrideLogLevel(core.LOG_DEBUG) // engine.overrideLogLevel(core.LOG_DEBUG)
engine.Logger.Debug(contents...) engine.logger.Debug(contents...)
} //}
} }
func (engine *Engine) LogDebugf(format string, contents ...interface{}) { func (engine *Engine) LogDebugf(format string, contents ...interface{}) {
if engine.ShowDebug { //if engine.ShowDebug {
engine.overrideLogLevel(core.LOG_DEBUG) // engine.overrideLogLevel(core.LOG_DEBUG)
engine.Logger.Debugf(format, contents...) engine.logger.Debugf(format, contents...)
} //}
} }
// logging warn // logging warn
func (engine *Engine) LogWarn(contents ...interface{}) { func (engine *Engine) LogWarn(contents ...interface{}) {
if engine.ShowWarn { //if engine.ShowWarn {
engine.overrideLogLevel(core.LOG_WARNING) // engine.overrideLogLevel(core.LOG_WARNING)
engine.Logger.Warning(contents...) engine.logger.Warning(contents...)
} //}
} }
func (engine *Engine) LogWarnf(format string, contents ...interface{}) { func (engine *Engine) LogWarnf(format string, contents ...interface{}) {
if engine.ShowWarn { //if engine.ShowWarn {
engine.overrideLogLevel(core.LOG_WARNING) // engine.overrideLogLevel(core.LOG_WARNING)
engine.Logger.Warningf(format, contents...) engine.logger.Warningf(format, contents...)
} //}
} }
// Sql method let's you manualy write raw sql and operate // Sql method let's you manualy write raw sql and operate
@ -985,15 +1017,15 @@ func (engine *Engine) mapType(v reflect.Value) *core.Table {
if hasCacheTag { if hasCacheTag {
if engine.Cacher != nil { // !nash! use engine's cacher if provided if engine.Cacher != nil { // !nash! use engine's cacher if provided
engine.Logger.Info("enable cache on table:", table.Name) engine.logger.Info("enable cache on table:", table.Name)
table.Cacher = engine.Cacher table.Cacher = engine.Cacher
} else { } else {
engine.Logger.Info("enable LRU cache on table:", table.Name) engine.logger.Info("enable LRU cache on table:", table.Name)
table.Cacher = NewLRUCacher2(NewMemoryStore(), time.Hour, 10000) // !nashtsai! HACK use LRU cacher for now table.Cacher = NewLRUCacher2(NewMemoryStore(), time.Hour, 10000) // !nashtsai! HACK use LRU cacher for now
} }
} }
if hasNoCacheTag { if hasNoCacheTag {
engine.Logger.Info("no cache on table:", table.Name) engine.logger.Info("no cache on table:", table.Name)
table.Cacher = nil table.Cacher = nil
} }
@ -1405,16 +1437,18 @@ func (engine *Engine) Import(r io.Reader) ([]sql.Result, error) {
scanner.Split(semiColSpliter) scanner.Split(semiColSpliter)
for scanner.Scan() { for scanner.Scan() {
query := scanner.Text() query := strings.Trim(scanner.Text(), " \t\n\r")
query = strings.Trim(query, " \t")
if len(query) > 0 { if len(query) > 0 {
engine.logSQL(query)
result, err := engine.DB().Exec(query) result, err := engine.DB().Exec(query)
results = append(results, result) results = append(results, result)
if err != nil { if err != nil {
return nil, err
lastError = err lastError = err
} }
} }
} }
return results, lastError return results, lastError
} }

View File

@ -19,13 +19,16 @@ const (
) )
type SimpleLogger struct { type SimpleLogger struct {
DEBUG *log.Logger DEBUG *log.Logger
ERR *log.Logger ERR *log.Logger
INFO *log.Logger INFO *log.Logger
WARN *log.Logger WARN *log.Logger
level core.LogLevel level core.LogLevel
showSQL bool
} }
var _ core.ILogger = &SimpleLogger{}
func NewSimpleLogger(out io.Writer) *SimpleLogger { func NewSimpleLogger(out io.Writer) *SimpleLogger {
return NewSimpleLogger2(out, DEFAULT_LOG_PREFIX, DEFAULT_LOG_FLAG) return NewSimpleLogger2(out, DEFAULT_LOG_PREFIX, DEFAULT_LOG_FLAG)
} }
@ -108,3 +111,15 @@ func (s *SimpleLogger) SetLevel(l core.LogLevel) (err error) {
s.level = l s.level = l
return return
} }
func (s *SimpleLogger) ShowSQL(show ...bool) {
if len(show) == 0 {
s.showSQL = true
return
}
s.showSQL = show[0]
}
func (s *SimpleLogger) IsShowSQL() bool {
return s.showSQL
}

View File

@ -337,6 +337,7 @@ func (db *mssql) GetColumns(tableName string) ([]string, map[string]*core.Column
s := `select a.name as name, b.name as ctype,a.max_length,a.precision,a.scale s := `select a.name as name, b.name as ctype,a.max_length,a.precision,a.scale
from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id from sys.columns a left join sys.types b on a.user_type_id=b.user_type_id
where a.object_id=object_id('` + tableName + `')` where a.object_id=object_id('` + tableName + `')`
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if err != nil { if err != nil {
@ -394,6 +395,7 @@ where a.object_id=object_id('` + tableName + `')`
func (db *mssql) GetTables() ([]*core.Table, error) { func (db *mssql) GetTables() ([]*core.Table, error) {
args := []interface{}{} args := []interface{}{}
s := `select name from sysobjects where xtype ='U'` s := `select name from sysobjects where xtype ='U'`
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if err != nil { if err != nil {
@ -428,6 +430,7 @@ INNER JOIN SYS.COLUMNS C ON IXS.OBJECT_ID=C.OBJECT_ID
AND IXCS.COLUMN_ID=C.COLUMN_ID AND IXCS.COLUMN_ID=C.COLUMN_ID
WHERE IXS.TYPE_DESC='NONCLUSTERED' and OBJECT_NAME(IXS.OBJECT_ID) =? WHERE IXS.TYPE_DESC='NONCLUSTERED' and OBJECT_NAME(IXS.OBJECT_ID) =?
` `
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if err != nil { if err != nil {

View File

@ -303,12 +303,9 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column
args := []interface{}{db.DbName, tableName} args := []interface{}{db.DbName, tableName}
s := "SELECT `COLUMN_NAME`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `COLUMN_TYPE`," + s := "SELECT `COLUMN_NAME`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `COLUMN_TYPE`," +
" `COLUMN_KEY`, `EXTRA` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?" " `COLUMN_KEY`, `EXTRA` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -415,11 +412,9 @@ func (db *mysql) GetTables() ([]*core.Table, error) {
args := []interface{}{db.DbName} args := []interface{}{db.DbName}
s := "SELECT `TABLE_NAME`, `ENGINE`, `TABLE_ROWS`, `AUTO_INCREMENT` from " + s := "SELECT `TABLE_NAME`, `ENGINE`, `TABLE_ROWS`, `AUTO_INCREMENT` from " +
"`INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? AND (`ENGINE`='MyISAM' OR `ENGINE` = 'InnoDB')" "`INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? AND (`ENGINE`='MyISAM' OR `ENGINE` = 'InnoDB')"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -445,11 +440,9 @@ func (db *mysql) GetTables() ([]*core.Table, error) {
func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index, error) { func (db *mysql) GetIndexes(tableName string) (map[string]*core.Index, error) {
args := []interface{}{db.DbName, tableName} args := []interface{}{db.DbName, tableName}
s := "SELECT `INDEX_NAME`, `NON_UNIQUE`, `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`STATISTICS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?" s := "SELECT `INDEX_NAME`, `NON_UNIQUE`, `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`STATISTICS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -637,9 +637,7 @@ func (db *oracle) TableCheckSql(tableName string) (string, []interface{}) {
func (db *oracle) MustDropTable(tableName string) error { func (db *oracle) MustDropTable(tableName string) error {
sql, args := db.TableCheckSql(tableName) sql, args := db.TableCheckSql(tableName)
if db.Logger != nil { db.LogSQL(sql, args)
db.Logger.Info("[sql]", sql, args)
}
rows, err := db.DB().Query(sql, args...) rows, err := db.DB().Query(sql, args...)
if err != nil { if err != nil {
@ -652,9 +650,8 @@ func (db *oracle) MustDropTable(tableName string) error {
} }
sql = "Drop Table \"" + tableName + "\"" sql = "Drop Table \"" + tableName + "\""
if db.Logger != nil { db.LogSQL(sql, args)
db.Logger.Info("[sql]", sql)
}
_, err = db.DB().Exec(sql) _, err = db.DB().Exec(sql)
return err return err
} }
@ -669,10 +666,9 @@ func (db *oracle) IsColumnExist(tableName, colName string) (bool, error) {
args := []interface{}{tableName, colName} args := []interface{}{tableName, colName}
query := "SELECT column_name FROM USER_TAB_COLUMNS WHERE table_name = :1" + query := "SELECT column_name FROM USER_TAB_COLUMNS WHERE table_name = :1" +
" AND column_name = :2" " AND column_name = :2"
db.LogSQL(query, args)
rows, err := db.DB().Query(query, args...) rows, err := db.DB().Query(query, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", query, args)
}
if err != nil { if err != nil {
return false, err return false, err
} }
@ -688,11 +684,9 @@ func (db *oracle) GetColumns(tableName string) ([]string, map[string]*core.Colum
args := []interface{}{tableName} args := []interface{}{tableName}
s := "SELECT column_name,data_default,data_type,data_length,data_precision,data_scale," + s := "SELECT column_name,data_default,data_type,data_length,data_precision,data_scale," +
"nullable FROM USER_TAB_COLUMNS WHERE table_name = :1" "nullable FROM USER_TAB_COLUMNS WHERE table_name = :1"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -787,11 +781,9 @@ func (db *oracle) GetColumns(tableName string) ([]string, map[string]*core.Colum
func (db *oracle) GetTables() ([]*core.Table, error) { func (db *oracle) GetTables() ([]*core.Table, error) {
args := []interface{}{} args := []interface{}{}
s := "SELECT table_name FROM user_tables" s := "SELECT table_name FROM user_tables"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -814,11 +806,9 @@ func (db *oracle) GetIndexes(tableName string) (map[string]*core.Index, error) {
args := []interface{}{tableName} args := []interface{}{tableName}
s := "SELECT t.column_name,i.uniqueness,i.index_name FROM user_ind_columns t,user_indexes i " + s := "SELECT t.column_name,i.uniqueness,i.index_name FROM user_ind_columns t,user_indexes i " +
"WHERE t.index_name = i.index_name and t.table_name = i.table_name and t.table_name =:1" "WHERE t.index_name = i.index_name and t.table_name = i.table_name and t.table_name =:1"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -900,10 +900,9 @@ func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) {
args := []interface{}{tableName, colName} args := []interface{}{tableName, colName}
query := "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = $1" + query := "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = $1" +
" AND column_name = $2" " AND column_name = $2"
db.LogSQL(query, args)
rows, err := db.DB().Query(query, args...) rows, err := db.DB().Query(query, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", query, args)
}
if err != nil { if err != nil {
return false, err return false, err
} }
@ -914,7 +913,7 @@ func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) {
func (db *postgres) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { func (db *postgres) GetColumns(tableName string) ([]string, map[string]*core.Column, error) {
pgSchema := "public" pgSchema := "public"
args := []interface{}{tableName,pgSchema} args := []interface{}{tableName, pgSchema}
s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, numeric_precision, numeric_precision_radix , s := `SELECT column_name, column_default, is_nullable, data_type, character_maximum_length, numeric_precision, numeric_precision_radix ,
CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey, CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey,
CASE WHEN p.contype = 'u' THEN true ELSE false END AS uniquekey CASE WHEN p.contype = 'u' THEN true ELSE false END AS uniquekey
@ -926,11 +925,9 @@ FROM pg_attribute f
LEFT JOIN pg_class AS g ON p.confrelid = g.oid LEFT JOIN pg_class AS g ON p.confrelid = g.oid
LEFT JOIN INFORMATION_SCHEMA.COLUMNS s ON s.column_name=f.attname AND c.relname=s.table_name LEFT JOIN INFORMATION_SCHEMA.COLUMNS s ON s.column_name=f.attname AND c.relname=s.table_name
WHERE c.relkind = 'r'::char AND c.relname = $1 AND s.table_schema = $2 AND f.attnum > 0 ORDER BY f.attnum;` WHERE c.relkind = 'r'::char AND c.relname = $1 AND s.table_schema = $2 AND f.attnum > 0 ORDER BY f.attnum;`
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -1017,11 +1014,9 @@ WHERE c.relkind = 'r'::char AND c.relname = $1 AND s.table_schema = $2 AND f.att
func (db *postgres) GetTables() ([]*core.Table, error) { func (db *postgres) GetTables() ([]*core.Table, error) {
args := []interface{}{} args := []interface{}{}
s := "SELECT tablename FROM pg_tables where schemaname = 'public'" s := "SELECT tablename FROM pg_tables where schemaname = 'public'"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -1044,11 +1039,9 @@ func (db *postgres) GetTables() ([]*core.Table, error) {
func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) { func (db *postgres) GetIndexes(tableName string) (map[string]*core.Index, error) {
args := []interface{}{tableName} args := []interface{}{tableName}
s := "SELECT indexname, indexdef FROM pg_indexes WHERE schemaname='public' AND tablename=$1" s := "SELECT indexname, indexdef FROM pg_indexes WHERE schemaname='public' AND tablename=$1"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -496,9 +496,9 @@ func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, er
session.saveLastSQL(sqlStr, args...) session.saveLastSQL(sqlStr, args...)
return session.Engine.LogSQLExecutionTime(sqlStr, args, func() (sql.Result, error) { return session.Engine.logSQLExecutionTime(sqlStr, args, func() (sql.Result, error) {
if session.IsAutoCommit { if session.IsAutoCommit {
//oci8 can not auto commit (github.com/mattn/go-oci8) // FIXME: oci8 can not auto commit (github.com/mattn/go-oci8)
if session.Engine.dialect.DBType() == core.ORACLE { if session.Engine.dialect.DBType() == core.ORACLE {
session.Begin() session.Begin()
r, err := session.Tx.Exec(sqlStr, args...) r, err := session.Tx.Exec(sqlStr, args...)
@ -573,7 +573,6 @@ func (session *Session) CreateUniques(bean interface{}) error {
func (session *Session) createOneTable() error { func (session *Session) createOneTable() error {
sqlStr := session.Statement.genCreateTableSQL() sqlStr := session.Statement.genCreateTableSQL()
session.Engine.LogDebug("create table sql: [", sqlStr, "]")
_, err := session.exec(sqlStr) _, err := session.exec(sqlStr)
return err return err
} }
@ -2100,7 +2099,7 @@ func (session *Session) innerQuery(sqlStr string, params ...interface{}) ([]map[
return nil, rows, err return nil, rows, err
} }
} }
_, rows, err := session.Engine.LogSQLQueryTime(sqlStr, params, callback) _, rows, err := session.Engine.logSQLQueryTime(sqlStr, params, callback)
if rows != nil { if rows != nil {
defer rows.Close() defer rows.Close()
} }

View File

@ -264,10 +264,8 @@ func (db *sqlite3) ForUpdateSql(query string) string {
func (db *sqlite3) IsColumnExist(tableName, colName string) (bool, error) { func (db *sqlite3) IsColumnExist(tableName, colName string) (bool, error) {
args := []interface{}{tableName} args := []interface{}{tableName}
query := "SELECT name FROM sqlite_master WHERE type='table' and name = ? and ((sql like '%`" + colName + "`%') or (sql like '%[" + colName + "]%'))" query := "SELECT name FROM sqlite_master WHERE type='table' and name = ? and ((sql like '%`" + colName + "`%') or (sql like '%[" + colName + "]%'))"
db.LogSQL(query, args)
rows, err := db.DB().Query(query, args...) rows, err := db.DB().Query(query, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", query, args)
}
if err != nil { if err != nil {
return false, err return false, err
} }
@ -282,11 +280,8 @@ func (db *sqlite3) IsColumnExist(tableName, colName string) (bool, error) {
func (db *sqlite3) GetColumns(tableName string) ([]string, map[string]*core.Column, error) { func (db *sqlite3) GetColumns(tableName string) ([]string, map[string]*core.Column, error) {
args := []interface{}{tableName} args := []interface{}{tableName}
s := "SELECT sql FROM sqlite_master WHERE type='table' and name = ?" s := "SELECT sql FROM sqlite_master WHERE type='table' and name = ?"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
} }
@ -354,11 +349,9 @@ func (db *sqlite3) GetColumns(tableName string) ([]string, map[string]*core.Colu
func (db *sqlite3) GetTables() ([]*core.Table, error) { func (db *sqlite3) GetTables() ([]*core.Table, error) {
args := []interface{}{} args := []interface{}{}
s := "SELECT name FROM sqlite_master WHERE type='table'" s := "SELECT name FROM sqlite_master WHERE type='table'"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -382,11 +375,9 @@ func (db *sqlite3) GetTables() ([]*core.Table, error) {
func (db *sqlite3) GetIndexes(tableName string) (map[string]*core.Index, error) { func (db *sqlite3) GetIndexes(tableName string) (map[string]*core.Index, error) {
args := []interface{}{tableName} args := []interface{}{tableName}
s := "SELECT sql FROM sqlite_master WHERE type='index' and tbl_name = ?" s := "SELECT sql FROM sqlite_master WHERE type='index' and tbl_name = ?"
db.LogSQL(s, args)
rows, err := db.DB().Query(s, args...) rows, err := db.DB().Query(s, args...)
if db.Logger != nil {
db.Logger.Info("[sql]", s, args)
}
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -17,7 +17,7 @@ import (
) )
const ( const (
Version string = "0.4.5.0204" Version string = "0.5.0.0216"
) )
func regDrvsNDialects() bool { func regDrvsNDialects() bool {
@ -84,12 +84,10 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
Tables: make(map[reflect.Type]*core.Table), Tables: make(map[reflect.Type]*core.Table),
mutex: &sync.RWMutex{}, mutex: &sync.RWMutex{},
TagIdentifier: "xorm", TagIdentifier: "xorm",
Logger: NewSimpleLogger(os.Stdout),
TZLocation: time.Local, TZLocation: time.Local,
} }
engine.dialect.SetLogger(engine.Logger) engine.SetLogger(NewSimpleLogger(os.Stdout))
engine.SetMapper(core.NewCacheMapper(new(core.SnakeMapper))) engine.SetMapper(core.NewCacheMapper(new(core.SnakeMapper)))
runtime.SetFinalizer(engine, close) runtime.SetFinalizer(engine, close)