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"
"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

17
xorm.go
View File

@ -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) {