parent
f56113384f
commit
a0aaa7d72b
|
@ -51,6 +51,11 @@ Drivers for Go's sql package which currently support database/sql includes:
|
|||
|
||||
# Changelog
|
||||
|
||||
* **v0.4.5**
|
||||
* many bugs fixed
|
||||
* extends support unlimited deep
|
||||
* Delete Limit support
|
||||
|
||||
* **v0.4.4**
|
||||
* ql database expriment support
|
||||
* tidb database expriment support
|
||||
|
|
10
README_CN.md
10
README_CN.md
|
@ -52,6 +52,11 @@ xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作
|
|||
|
||||
## 更新日志
|
||||
|
||||
* **v0.4.5**
|
||||
* bug修正
|
||||
* extends 支持无限级
|
||||
* Delete Limit 支持
|
||||
|
||||
* **v0.4.4**
|
||||
* Tidb 数据库支持
|
||||
* QL 试验性支持
|
||||
|
@ -59,11 +64,6 @@ xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作
|
|||
* ForUpdate 支持
|
||||
* bug修正
|
||||
|
||||
* **v0.4.3**
|
||||
* Json 字段类型支持
|
||||
* oracle实验性支持
|
||||
* bug修正
|
||||
|
||||
[更多更新日志...](https://github.com/go-xorm/manual-zh-CN/tree/master/chapter-16)
|
||||
|
||||
## 安装
|
||||
|
|
150
engine.go
150
engine.go
|
@ -36,23 +36,47 @@ type Engine struct {
|
|||
mutex *sync.RWMutex
|
||||
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
|
||||
ShowInfo bool
|
||||
ShowErr bool
|
||||
ShowDebug bool
|
||||
ShowWarn bool
|
||||
/*ShowInfo bool
|
||||
ShowErr bool*/
|
||||
//ShowDebug bool
|
||||
//ShowWarn bool*/
|
||||
// --227
|
||||
|
||||
Logger core.ILogger
|
||||
logger core.ILogger
|
||||
TZLocation *time.Location
|
||||
|
||||
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) {
|
||||
engine.Logger = logger
|
||||
engine.logger = logger
|
||||
engine.dialect.SetLogger(logger)
|
||||
}
|
||||
|
||||
|
@ -194,34 +218,42 @@ func (engine *Engine) Ping() error {
|
|||
|
||||
// logging sql
|
||||
func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) {
|
||||
if engine.ShowSQL {
|
||||
engine.overrideLogLevel(core.LOG_INFO)
|
||||
if engine.showSQL && !engine.showExecTime {
|
||||
//engine.overrideLogLevel(core.LOG_INFO)
|
||||
if len(sqlArgs) > 0 {
|
||||
engine.Logger.Infof("[sql] %v [args] %v", sqlStr, sqlArgs)
|
||||
engine.logger.Infof("[sql] %v [args] %v", sqlStr, sqlArgs)
|
||||
} 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) {
|
||||
if engine.ShowDebug {
|
||||
func (engine *Engine) logSQLQueryTime(sqlStr string, args []interface{}, executionBlock func() (*core.Stmt, *core.Rows, error)) (*core.Stmt, *core.Rows, error) {
|
||||
if engine.showSQL && engine.showExecTime {
|
||||
b4ExecTime := time.Now()
|
||||
stmt, res, err := executionBlock()
|
||||
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
|
||||
} else {
|
||||
return executionBlock()
|
||||
}
|
||||
}
|
||||
|
||||
func (engine *Engine) LogSQLExecutionTime(sqlStr string, args interface{}, executionBlock func() (sql.Result, error)) (sql.Result, error) {
|
||||
if engine.ShowDebug {
|
||||
func (engine *Engine) logSQLExecutionTime(sqlStr string, args []interface{}, executionBlock func() (sql.Result, error)) (sql.Result, error) {
|
||||
if engine.showSQL && engine.showExecTime {
|
||||
b4ExecTime := time.Now()
|
||||
res, err := executionBlock()
|
||||
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
|
||||
} else {
|
||||
return executionBlock()
|
||||
|
@ -229,73 +261,73 @@ func (engine *Engine) LogSQLExecutionTime(sqlStr string, args interface{}, execu
|
|||
}
|
||||
|
||||
// logging error
|
||||
/*
|
||||
func (engine *Engine) overrideLogLevel(overrideLevel core.LogLevel) {
|
||||
logLevel := engine.Logger.Level()
|
||||
logLevel := engine.logger.Level()
|
||||
if logLevel == core.LOG_UNKNOWN {
|
||||
// intend to left empty
|
||||
} 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{}) {
|
||||
if engine.ShowErr {
|
||||
engine.overrideLogLevel(core.LOG_ERR)
|
||||
engine.Logger.Err(contents...)
|
||||
}
|
||||
//if engine.ShowErr {
|
||||
// engine.overrideLogLevel(core.LOG_ERR)
|
||||
engine.logger.Err(contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
func (engine *Engine) LogErrorf(format string, contents ...interface{}) {
|
||||
if engine.ShowErr {
|
||||
engine.overrideLogLevel(core.LOG_ERR)
|
||||
engine.Logger.Errf(format, contents...)
|
||||
}
|
||||
//if engine.ShowErr {
|
||||
// engine.overrideLogLevel(core.LOG_ERR)
|
||||
engine.logger.Errf(format, contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
// logging info
|
||||
func (engine *Engine) LogInfo(contents ...interface{}) {
|
||||
if engine.ShowInfo {
|
||||
engine.overrideLogLevel(core.LOG_INFO)
|
||||
engine.Logger.Info(contents...)
|
||||
}
|
||||
//if engine.ShowInfo {
|
||||
// engine.overrideLogLevel(core.LOG_INFO)
|
||||
engine.logger.Info(contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
func (engine *Engine) LogInfof(format string, contents ...interface{}) {
|
||||
if engine.ShowErr {
|
||||
engine.overrideLogLevel(core.LOG_INFO)
|
||||
engine.Logger.Infof(format, contents...)
|
||||
}
|
||||
//if engine.ShowErr {
|
||||
// engine.overrideLogLevel(core.LOG_INFO)
|
||||
engine.logger.Infof(format, contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
// logging debug
|
||||
func (engine *Engine) LogDebug(contents ...interface{}) {
|
||||
if engine.ShowDebug {
|
||||
engine.overrideLogLevel(core.LOG_DEBUG)
|
||||
engine.Logger.Debug(contents...)
|
||||
}
|
||||
//if engine.ShowDebug {
|
||||
// engine.overrideLogLevel(core.LOG_DEBUG)
|
||||
engine.logger.Debug(contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
func (engine *Engine) LogDebugf(format string, contents ...interface{}) {
|
||||
if engine.ShowDebug {
|
||||
engine.overrideLogLevel(core.LOG_DEBUG)
|
||||
engine.Logger.Debugf(format, contents...)
|
||||
}
|
||||
//if engine.ShowDebug {
|
||||
// engine.overrideLogLevel(core.LOG_DEBUG)
|
||||
engine.logger.Debugf(format, contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
// logging warn
|
||||
func (engine *Engine) LogWarn(contents ...interface{}) {
|
||||
if engine.ShowWarn {
|
||||
engine.overrideLogLevel(core.LOG_WARNING)
|
||||
engine.Logger.Warning(contents...)
|
||||
}
|
||||
//if engine.ShowWarn {
|
||||
// engine.overrideLogLevel(core.LOG_WARNING)
|
||||
engine.logger.Warning(contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
func (engine *Engine) LogWarnf(format string, contents ...interface{}) {
|
||||
if engine.ShowWarn {
|
||||
engine.overrideLogLevel(core.LOG_WARNING)
|
||||
engine.Logger.Warningf(format, contents...)
|
||||
}
|
||||
//if engine.ShowWarn {
|
||||
// engine.overrideLogLevel(core.LOG_WARNING)
|
||||
engine.logger.Warningf(format, contents...)
|
||||
//}
|
||||
}
|
||||
|
||||
// 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 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
|
||||
} 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
|
||||
}
|
||||
}
|
||||
if hasNoCacheTag {
|
||||
engine.Logger.Info("no cache on table:", table.Name)
|
||||
engine.logger.Info("no cache on table:", table.Name)
|
||||
table.Cacher = nil
|
||||
}
|
||||
|
||||
|
@ -1405,16 +1437,18 @@ func (engine *Engine) Import(r io.Reader) ([]sql.Result, error) {
|
|||
scanner.Split(semiColSpliter)
|
||||
|
||||
for scanner.Scan() {
|
||||
query := scanner.Text()
|
||||
query = strings.Trim(query, " \t")
|
||||
query := strings.Trim(scanner.Text(), " \t\n\r")
|
||||
if len(query) > 0 {
|
||||
engine.logSQL(query)
|
||||
result, err := engine.DB().Exec(query)
|
||||
results = append(results, result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
lastError = err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return results, lastError
|
||||
}
|
||||
|
||||
|
|
25
logger.go
25
logger.go
|
@ -19,13 +19,16 @@ const (
|
|||
)
|
||||
|
||||
type SimpleLogger struct {
|
||||
DEBUG *log.Logger
|
||||
ERR *log.Logger
|
||||
INFO *log.Logger
|
||||
WARN *log.Logger
|
||||
level core.LogLevel
|
||||
DEBUG *log.Logger
|
||||
ERR *log.Logger
|
||||
INFO *log.Logger
|
||||
WARN *log.Logger
|
||||
level core.LogLevel
|
||||
showSQL bool
|
||||
}
|
||||
|
||||
var _ core.ILogger = &SimpleLogger{}
|
||||
|
||||
func NewSimpleLogger(out io.Writer) *SimpleLogger {
|
||||
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
|
||||
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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
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 + `')`
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if err != nil {
|
||||
|
@ -394,6 +395,7 @@ where a.object_id=object_id('` + tableName + `')`
|
|||
func (db *mssql) GetTables() ([]*core.Table, error) {
|
||||
args := []interface{}{}
|
||||
s := `select name from sysobjects where xtype ='U'`
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
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
|
||||
WHERE IXS.TYPE_DESC='NONCLUSTERED' and OBJECT_NAME(IXS.OBJECT_ID) =?
|
||||
`
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if err != nil {
|
||||
|
|
|
@ -303,12 +303,9 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column
|
|||
args := []interface{}{db.DbName, tableName}
|
||||
s := "SELECT `COLUMN_NAME`, `IS_NULLABLE`, `COLUMN_DEFAULT`, `COLUMN_TYPE`," +
|
||||
" `COLUMN_KEY`, `EXTRA` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = ? AND `TABLE_NAME` = ?"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
@ -415,11 +412,9 @@ func (db *mysql) GetTables() ([]*core.Table, error) {
|
|||
args := []interface{}{db.DbName}
|
||||
s := "SELECT `TABLE_NAME`, `ENGINE`, `TABLE_ROWS`, `AUTO_INCREMENT` from " +
|
||||
"`INFORMATION_SCHEMA`.`TABLES` WHERE `TABLE_SCHEMA`=? AND (`ENGINE`='MyISAM' OR `ENGINE` = 'InnoDB')"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{db.DbName, tableName}
|
||||
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...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -637,9 +637,7 @@ func (db *oracle) TableCheckSql(tableName string) (string, []interface{}) {
|
|||
|
||||
func (db *oracle) MustDropTable(tableName string) error {
|
||||
sql, args := db.TableCheckSql(tableName)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", sql, args)
|
||||
}
|
||||
db.LogSQL(sql, args)
|
||||
|
||||
rows, err := db.DB().Query(sql, args...)
|
||||
if err != nil {
|
||||
|
@ -652,9 +650,8 @@ func (db *oracle) MustDropTable(tableName string) error {
|
|||
}
|
||||
|
||||
sql = "Drop Table \"" + tableName + "\""
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", sql)
|
||||
}
|
||||
db.LogSQL(sql, args)
|
||||
|
||||
_, err = db.DB().Exec(sql)
|
||||
return err
|
||||
}
|
||||
|
@ -669,10 +666,9 @@ func (db *oracle) IsColumnExist(tableName, colName string) (bool, error) {
|
|||
args := []interface{}{tableName, colName}
|
||||
query := "SELECT column_name FROM USER_TAB_COLUMNS WHERE table_name = :1" +
|
||||
" AND column_name = :2"
|
||||
db.LogSQL(query, args)
|
||||
|
||||
rows, err := db.DB().Query(query, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", query, args)
|
||||
}
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
@ -688,11 +684,9 @@ func (db *oracle) GetColumns(tableName string) ([]string, map[string]*core.Colum
|
|||
args := []interface{}{tableName}
|
||||
s := "SELECT column_name,data_default,data_type,data_length,data_precision,data_scale," +
|
||||
"nullable FROM USER_TAB_COLUMNS WHERE table_name = :1"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{}
|
||||
s := "SELECT table_name FROM user_tables"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -814,11 +806,9 @@ func (db *oracle) GetIndexes(tableName string) (map[string]*core.Index, error) {
|
|||
args := []interface{}{tableName}
|
||||
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"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -900,10 +900,9 @@ func (db *postgres) IsColumnExist(tableName, colName string) (bool, error) {
|
|||
args := []interface{}{tableName, colName}
|
||||
query := "SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = $1" +
|
||||
" AND column_name = $2"
|
||||
db.LogSQL(query, args)
|
||||
|
||||
rows, err := db.DB().Query(query, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", query, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
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 ,
|
||||
CASE WHEN p.contype = 'p' THEN true ELSE false END AS primarykey,
|
||||
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 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;`
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{}
|
||||
s := "SELECT tablename FROM pg_tables where schemaname = 'public'"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{tableName}
|
||||
s := "SELECT indexname, indexdef FROM pg_indexes WHERE schemaname='public' AND tablename=$1"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -496,9 +496,9 @@ func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, er
|
|||
|
||||
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 {
|
||||
//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 {
|
||||
session.Begin()
|
||||
r, err := session.Tx.Exec(sqlStr, args...)
|
||||
|
@ -573,7 +573,6 @@ func (session *Session) CreateUniques(bean interface{}) error {
|
|||
|
||||
func (session *Session) createOneTable() error {
|
||||
sqlStr := session.Statement.genCreateTableSQL()
|
||||
session.Engine.LogDebug("create table sql: [", sqlStr, "]")
|
||||
_, err := session.exec(sqlStr)
|
||||
return err
|
||||
}
|
||||
|
@ -2100,7 +2099,7 @@ func (session *Session) innerQuery(sqlStr string, params ...interface{}) ([]map[
|
|||
return nil, rows, err
|
||||
}
|
||||
}
|
||||
_, rows, err := session.Engine.LogSQLQueryTime(sqlStr, params, callback)
|
||||
_, rows, err := session.Engine.logSQLQueryTime(sqlStr, params, callback)
|
||||
if rows != nil {
|
||||
defer rows.Close()
|
||||
}
|
||||
|
|
|
@ -264,10 +264,8 @@ func (db *sqlite3) ForUpdateSql(query string) string {
|
|||
func (db *sqlite3) IsColumnExist(tableName, colName string) (bool, error) {
|
||||
args := []interface{}{tableName}
|
||||
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...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", query, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{tableName}
|
||||
s := "SELECT sql FROM sqlite_master WHERE type='table' and name = ?"
|
||||
|
||||
db.LogSQL(s, args)
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{}
|
||||
s := "SELECT name FROM sqlite_master WHERE type='table'"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
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) {
|
||||
args := []interface{}{tableName}
|
||||
s := "SELECT sql FROM sqlite_master WHERE type='index' and tbl_name = ?"
|
||||
db.LogSQL(s, args)
|
||||
|
||||
rows, err := db.DB().Query(s, args...)
|
||||
if db.Logger != nil {
|
||||
db.Logger.Info("[sql]", s, args)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
6
xorm.go
6
xorm.go
|
@ -17,7 +17,7 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
Version string = "0.4.5.0204"
|
||||
Version string = "0.5.0.0216"
|
||||
)
|
||||
|
||||
func regDrvsNDialects() bool {
|
||||
|
@ -84,12 +84,10 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
|||
Tables: make(map[reflect.Type]*core.Table),
|
||||
mutex: &sync.RWMutex{},
|
||||
TagIdentifier: "xorm",
|
||||
Logger: NewSimpleLogger(os.Stdout),
|
||||
TZLocation: time.Local,
|
||||
}
|
||||
|
||||
engine.dialect.SetLogger(engine.Logger)
|
||||
|
||||
engine.SetLogger(NewSimpleLogger(os.Stdout))
|
||||
engine.SetMapper(core.NewCacheMapper(new(core.SnakeMapper)))
|
||||
|
||||
runtime.SetFinalizer(engine, close)
|
||||
|
|
Loading…
Reference in New Issue