diff --git a/dialect_mysql.go b/dialect_mysql.go index f2b4ff7a..9f5ae3b2 100644 --- a/dialect_mysql.go +++ b/dialect_mysql.go @@ -551,9 +551,12 @@ func (db *mysql) CreateTableSql(table *core.Table, tableName, storeEngine, chars if len(charset) == 0 { charset = db.URI().Charset - } else if len(charset) > 0 { + } + if len(charset) != 0 { sql += " DEFAULT CHARSET " + charset } + + if db.rowFormat != "" { sql += " ROW_FORMAT=" + db.rowFormat diff --git a/dialect_sqlite3.go b/dialect_sqlite3.go index a55b1615..e1294814 100644 --- a/dialect_sqlite3.go +++ b/dialect_sqlite3.go @@ -233,7 +233,7 @@ func (db *sqlite3) TableCheckSql(tableName string) (string, []interface{}) { } func (db *sqlite3) DropIndexSql(tableName string, index *core.Index) string { - //var unique string + // var unique string quote := db.Quote idxName := index.Name @@ -452,5 +452,9 @@ type sqlite3Driver struct { } func (p *sqlite3Driver) Parse(driverName, dataSourceName string) (*core.Uri, error) { + if strings.Contains(dataSourceName, "?") { + dataSourceName = dataSourceName[:strings.Index(dataSourceName, "?")] + } + return &core.Uri{DbType: core.SQLITE, DbName: dataSourceName}, nil } diff --git a/engine.go b/engine.go index d959d01f..89a96d9f 100644 --- a/engine.go +++ b/engine.go @@ -245,6 +245,11 @@ func (engine *Engine) AutoIncrStr() string { return engine.dialect.AutoIncrStr() } +// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. +func (engine *Engine) SetConnMaxLifetime(d time.Duration) { + engine.db.SetConnMaxLifetime(d) +} + // SetMaxOpenConns is only available for go 1.2+ func (engine *Engine) SetMaxOpenConns(conns int) { engine.db.SetMaxOpenConns(conns) diff --git a/engine_group.go b/engine_group.go index 1de425f3..5eee3e61 100644 --- a/engine_group.go +++ b/engine_group.go @@ -5,6 +5,8 @@ package xorm import ( + "time" + "github.com/go-xorm/core" ) @@ -99,6 +101,14 @@ func (eg *EngineGroup) SetColumnMapper(mapper core.IMapper) { } } +// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. +func (eg *EngineGroup) SetConnMaxLifetime(d time.Duration) { + eg.Engine.SetConnMaxLifetime(d) + for i := 0; i < len(eg.slaves); i++ { + eg.slaves[i].SetConnMaxLifetime(d) + } +} + // SetDefaultCacher set the default cacher func (eg *EngineGroup) SetDefaultCacher(cacher core.Cacher) { eg.Engine.SetDefaultCacher(cacher) diff --git a/engine_maxlife.go b/engine_maxlife.go deleted file mode 100644 index 22666c5f..00000000 --- a/engine_maxlife.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2017 The Xorm Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.6 - -package xorm - -import "time" - -// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. -func (engine *Engine) SetConnMaxLifetime(d time.Duration) { - engine.db.SetConnMaxLifetime(d) -} - -// SetConnMaxLifetime sets the maximum amount of time a connection may be reused. -func (eg *EngineGroup) SetConnMaxLifetime(d time.Duration) { - eg.Engine.SetConnMaxLifetime(d) - for i := 0; i < len(eg.slaves); i++ { - eg.slaves[i].SetConnMaxLifetime(d) - } -} diff --git a/examples/find.go b/examples/find.go index d80a698c..ae710b8e 100644 --- a/examples/find.go +++ b/examples/find.go @@ -6,6 +6,7 @@ import ( "time" "github.com/go-xorm/xorm" + _ "github.com/mattn/go-sqlite3" ) // User describes a user diff --git a/interface.go b/interface.go index 0985372d..33d2078e 100644 --- a/interface.go +++ b/interface.go @@ -72,6 +72,7 @@ type EngineInterface interface { Before(func(interface{})) *Session Charset(charset string) *Session + ClearCache(...interface{}) error CreateTables(...interface{}) error DBMetas() ([]*core.Table, error) Dialect() core.Dialect @@ -83,16 +84,22 @@ type EngineInterface interface { GetTableMapper() core.IMapper GetTZDatabase() *time.Location GetTZLocation() *time.Location + MapCacher(interface{}, core.Cacher) error NewSession() *Session NoAutoTime() *Session Quote(string) string SetCacher(string, core.Cacher) + SetConnMaxLifetime(time.Duration) SetDefaultCacher(core.Cacher) + SetLogger(logger core.ILogger) SetLogLevel(core.LogLevel) SetMapper(core.IMapper) + SetMaxOpenConns(int) + SetMaxIdleConns(int) SetSchema(string) SetTZDatabase(tz *time.Location) SetTZLocation(tz *time.Location) + ShowExecTime(...bool) ShowSQL(show ...bool) Sync(...interface{}) error Sync2(...interface{}) error diff --git a/session_get.go b/session_get.go index 3b2c9493..69194a23 100644 --- a/session_get.go +++ b/session_get.go @@ -77,6 +77,9 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *core.Table, bea defer rows.Close() if !rows.Next() { + if rows.Err() != nil { + return false, rows.Err() + } return false, nil } diff --git a/xorm.go b/xorm.go index 141c4897..739de8d4 100644 --- a/xorm.go +++ b/xorm.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +// +build go1.8 + package xorm import (