diff --git a/docs/QuickStart.md b/docs/QuickStart.md index 6f568071..3b9f0aab 100644 --- a/docs/QuickStart.md +++ b/docs/QuickStart.md @@ -54,7 +54,7 @@ import ( _ "github.com/mattn/go-sqlite3" "github.com/go-xorm/xorm" ) -engine, err = xorm.NewEngine("sqlite3", "./test.db") +engine, err := xorm.NewEngine("sqlite3", "./test.db") defer engine.Close() ``` diff --git a/docs/QuickStartCN.md b/docs/QuickStartCN.md index d0fd45b1..793d05a4 100644 --- a/docs/QuickStartCN.md +++ b/docs/QuickStartCN.md @@ -58,7 +58,7 @@ import ( _ "github.com/mattn/go-sqlite3" "github.com/go-xorm/xorm" ) -engine, err = xorm.NewEngine("sqlite3", "./test.db") +engine, err := xorm.NewEngine("sqlite3", "./test.db") defer engine.Close() ``` diff --git a/engine.go b/engine.go index b234a80c..1f03e334 100644 --- a/engine.go +++ b/engine.go @@ -183,9 +183,9 @@ func (engine *Engine) Ping() error { func (engine *Engine) logSQL(sqlStr string, sqlArgs ...interface{}) { if engine.ShowSQL { if len(sqlArgs) > 0 { - engine.Logger.Info(fmt.Sprintf("[sql]", sqlStr, "[args]", sqlArgs)) + engine.Logger.Info(fmt.Sprintf("[sql] %v [args] %v", sqlStr, sqlArgs)) } else { - engine.Logger.Info(fmt.Sprintf("[sql]", sqlStr)) + engine.Logger.Info(fmt.Sprintf("[sql] %v", sqlStr)) } } } @@ -305,7 +305,6 @@ func (engine *Engine) DBMetas() ([]*core.Table, error) { } //table.Columns = cols //table.ColumnsSeq = colSeq - indexes, err := engine.dialect.GetIndexes(table.Name) if err != nil { return nil, err @@ -803,6 +802,14 @@ func (engine *Engine) mapType(v reflect.Value) *core.Table { v = strings.Trim(v, "'") col.EnumOptions[v] = k } + } else if fs[0] == core.Set && fs[1][0] == '\'' { //set + options := strings.Split(fs[1][0:len(fs[1])-1], ",") + col.SetOptions = make(map[string]int) + for k, v := range options { + v = strings.TrimSpace(v) + v = strings.Trim(v, "'") + col.SetOptions[v] = k + } } else { fs2 := strings.Split(fs[1][0:len(fs[1])-1], ",") if len(fs2) == 2 { diff --git a/logger.go b/logger.go index c4c17bbb..f9d529a1 100644 --- a/logger.go +++ b/logger.go @@ -1,6 +1,7 @@ package xorm import ( + "fmt" "io" "log" ) @@ -14,35 +15,46 @@ type ILogger interface { } type SimpleLogger struct { - logger *log.Logger + DEBUG *log.Logger + ERR *log.Logger + INFO *log.Logger + WARN *log.Logger } func NewSimpleLogger(out io.Writer) *SimpleLogger { return &SimpleLogger{ - logger: log.New(out, "[xorm] ", log.Ldate|log.Lmicroseconds)} + DEBUG: log.New(out, "[xorm] [debug] ", log.Ldate|log.Lmicroseconds), + ERR: log.New(out, "[xorm] [error] ", log.Ldate|log.Lmicroseconds), + INFO: log.New(out, "[xorm] [info] ", log.Ldate|log.Lmicroseconds), + WARN: log.New(out, "[xorm] [warn] ", log.Ldate|log.Lmicroseconds), + } } func NewSimpleLogger2(out io.Writer, prefix string, flag int) *SimpleLogger { return &SimpleLogger{ - logger: log.New(out, prefix, flag)} + DEBUG: log.New(out, fmt.Sprintf("%s [debug] ", prefix), log.Ldate|log.Lmicroseconds), + ERR: log.New(out, fmt.Sprintf("%s [error] ", prefix), log.Ldate|log.Lmicroseconds), + INFO: log.New(out, fmt.Sprintf("%s [info] ", prefix), log.Ldate|log.Lmicroseconds), + WARN: log.New(out, fmt.Sprintf("%s [warn] ", prefix), log.Ldate|log.Lmicroseconds), + } } func (s *SimpleLogger) Debug(m string) (err error) { - s.logger.Println("[debug]", m) + s.DEBUG.Println(m) return } func (s *SimpleLogger) Err(m string) (err error) { - s.logger.Println("[error]", m) + s.ERR.Println(m) return } func (s *SimpleLogger) Info(m string) (err error) { - s.logger.Println("[info]", m) + s.INFO.Println(m) return } func (s *SimpleLogger) Warning(m string) (err error) { - s.logger.Println("[warning]", m) + s.WARN.Println(m) return } diff --git a/mysql_dialect.go b/mysql_dialect.go index 4e430165..b9911138 100644 --- a/mysql_dialect.go +++ b/mysql_dialect.go @@ -64,6 +64,17 @@ func (db *mysql) SqlType(c *core.Column) string { } } res += ")" + case core.Set: //mysql set + res = core.Set + res += "(" + for v, k := range c.SetOptions { + if k > 0 { + res += fmt.Sprintf(",'%v'", v) + } else { + res += fmt.Sprintf("'%v'", v) + } + } + res += ")" default: res = t } @@ -145,6 +156,7 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column if err != nil { return nil, nil, err } + //fmt.Println(columnName, isNullable, colType, colKey, extra, colDefault) col.Name = strings.Trim(columnName, "` ") if "YES" == isNullable { col.Nullable = true @@ -171,6 +183,14 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column v = strings.Trim(v, "'") col.EnumOptions[v] = k } + } else if colType == core.Set && cts[1][0] == '\'' { + options := strings.Split(cts[1][0:idx], ",") + col.SetOptions = make(map[string]int) + for k, v := range options { + v = strings.TrimSpace(v) + v = strings.Trim(v, "'") + col.SetOptions[v] = k + } } else { lens := strings.Split(cts[1][0:idx], ",") len1, err = strconv.Atoi(strings.TrimSpace(lens[0])) @@ -185,6 +205,9 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column } } } + if colType == "FLOAT UNSIGNED" { + colType = "FLOAT" + } col.Length = len1 col.Length2 = len2 if _, ok := core.SqlTypes[colType]; ok { diff --git a/statement.go b/statement.go index 9286250d..74daf9fb 100644 --- a/statement.go +++ b/statement.go @@ -1037,6 +1037,7 @@ func (statement *Statement) genCountSql(bean interface{}) (string, []interface{} if statement.Engine.Dialect().DBType() == "ql" { id = "" } + statement.attachInSql() return statement.genSelectSql(fmt.Sprintf("count(%v) AS %v", id, statement.Engine.Quote("total"))), append(statement.Params, statement.BeanArgs...) }