add NewGroup function

This commit is contained in:
WhiteBatman 2017-09-25 21:54:40 +08:00 committed by Lunny Xiao
parent eaa5b37e0b
commit 40c50e573d
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
2 changed files with 38 additions and 17 deletions

View File

@ -8,6 +8,7 @@ import (
"database/sql" "database/sql"
"io" "io"
"reflect" "reflect"
"strings"
"sync/atomic" "sync/atomic"
"time" "time"
@ -20,6 +21,36 @@ type GroupEngine struct {
count uint64 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 { func (ge *GroupEngine) Master() *Engine {
return ge.engines[0] return ge.engines[0]
} }
@ -36,6 +67,13 @@ func (ge *GroupEngine) GetEngine(i int) *Engine {
return ge.engines[i] 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 { func (ge *GroupEngine) slave(n int) int {
if n <= 1 { if n <= 1 {
return 0 return 0

17
xorm.go
View File

@ -9,7 +9,6 @@ import (
"os" "os"
"reflect" "reflect"
"runtime" "runtime"
"strings"
"sync" "sync"
"time" "time"
@ -55,22 +54,6 @@ func init() {
regDrvsNDialects() 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 // NewEngine new a db manager according to the parameter. Currently support four
// drivers // drivers
func NewEngine(driverName string, dataSourceName string) (*Engine, error) { func NewEngine(driverName string, dataSourceName string) (*Engine, error) {