diff --git a/group_engine.go b/group_engine.go index 1c667f95..93a8e0d2 100644 --- a/group_engine.go +++ b/group_engine.go @@ -8,6 +8,7 @@ import ( "database/sql" "io" "reflect" + "strings" "sync/atomic" "time" @@ -20,6 +21,36 @@ type GroupEngine struct { count uint64 } +func NewGroupEngine(driverName string, dataSourceNames string) (*GroupEngine, error) { + conns := strings.Split(dataSourceNames, ";") + engines := make([]*Engine, len(conns)) + for i, _ := range conns { + engine, err := NewEngine(driverName, conns[i]) + if err != nil { + return nil, err + } + engines[i] = engine + } + ge := &GroupEngine{ + engines: engines, + count: uint64(len(engines)), + } + return ge, nil +} + +func NewGroup(Master *Engine, Slaves []*Engine, policy int) (*GroupEngine, error) { + engines := make([]*Engine, 0) + engines = append(engines, Master) + for i, _ := range Slaves { + engines = append(engines, Slaves[i]) + } + ge := &GroupEngine{ + engines: engines, + count: uint64(len(engines)), + } + return ge, nil +} + func (ge *GroupEngine) Master() *Engine { return ge.engines[0] } @@ -36,6 +67,13 @@ func (ge *GroupEngine) GetEngine(i int) *Engine { return ge.engines[i] } +func (ge *GroupEngine) GetSlaves() []*Engine { + if len(ge.engines) == 1 { + return ge.engines + } + return ge.engines[1:] +} + func (ge *GroupEngine) slave(n int) int { if n <= 1 { return 0 diff --git a/xorm.go b/xorm.go index 47f27175..4fdadf2f 100644 --- a/xorm.go +++ b/xorm.go @@ -9,7 +9,6 @@ import ( "os" "reflect" "runtime" - "strings" "sync" "time" @@ -55,22 +54,6 @@ func init() { regDrvsNDialects() } -func NewGroupEngine(driverName string, dataSourceNames string) (*GroupEngine, error) { - conns := strings.Split(dataSourceNames, ";") - engines := make([]*Engine, len(conns)) - for i, _ := range conns { - engine, err := NewEngine(driverName, conns[i]) - if err != nil { - return nil, err - } - engines[i] = engine - } - ge := &GroupEngine{ - engines: engines, - } - return ge, nil -} - // NewEngine new a db manager according to the parameter. Currently support four // drivers func NewEngine(driverName string, dataSourceName string) (*Engine, error) {