基于serf的数据库同步模块库
chenshijun
2019-08-05 7d1bbdc8a9a4854edb6d45877fb0d2b9ce12478b
dbself.go
@@ -10,45 +10,48 @@
   "sync"
)
var Dbconn *Conn
var sy sync.Mutex
func init() {
   GetConn()
}
const (
   PersonSqliteDBPath = "/opt/workspace/DataBases/sync.db"
)
var syncMut    sync.Mutex
var SerfDbConn *Conn
// get Conn of db for do execute.
func GetConn() error {
   var err error
   path, err := GetCurrentPath()
   if err != nil {
      return errors.New("get current path error")
func InitDbConn(dbPath string) error {
   if dbPath == ""   {
      dbPath = PersonSqliteDBPath
   }
   filepath := fmt.Sprintf("%stest.db", path)
   fmt.Println("self: ========>", filepath)
   db, err := New(filepath, "", false)
   fmt.Println("self: ========>", dbPath)
   db, err := New(dbPath, "", false)
   if err != nil {
      fmt.Println("new db database: ", err)
      return err
   }
   Dbconn, err = db.Connect()
   dbConn, err := db.Connect()
   if err != nil {
      fmt.Println("new db conn error; ", err)
      return err
   }
   SerfDbConn = dbConn
   return nil
}
//bak dbdata.
func BakDbFile() (string, error) {
   path, err := GetCurrentPath()
   path, err := getCurrentPath()
   if err != nil {
      return "", errors.New("get current path error")
      fmt.Println("getCurrentPath error; ", err)
      return "", err
   }
   filepath := fmt.Sprintf("%stmptest.db", path)
   filepath := path + "tmp.db"
   fmt.Println("filepath:", filepath)
   db, err := New(filepath, "", false)
   if err != nil {
      fmt.Println("new db database: ", err)
@@ -62,7 +65,7 @@
   }
   defer tmpconn.Close()
   err = Dbconn.Backup(tmpconn)
   err = SerfDbConn.Backup(tmpconn)
   if err != nil {
      return "", err
   }
@@ -70,10 +73,10 @@
}
// do exet when get querystring.
func DoExecute(executestring []string) ([]*Result, error) {
   sy.Lock()
   defer sy.Unlock()
   allResults, err := Dbconn.Execute(executestring, false, false)
func DoExecute(sqlString []string) ([]*Result, error) {
   syncMut.Lock()
   defer syncMut.Unlock()
   allResults, err := SerfDbConn.Execute(sqlString, false, false)
   if err != nil {
      fmt.Println("execute error!", err)
      return nil, err
@@ -81,8 +84,17 @@
   return allResults, nil
}
func Dumpdb() {
   var b strings.Builder
   if err := SerfDbConn.Dump(&b); err != nil {
      fmt.Println("dump file ", err.Error())
   }
   fmt.Printf("%T\n", b)
}
// get current path
func GetCurrentPath() (string, error) {
func getCurrentPath() (string, error) {
   file, err := exec.LookPath(os.Args[0])
   if err != nil {
      return "", err
@@ -99,13 +111,4 @@
      return "", errors.New(`error: Can't find "/" or "\".`)
   }
   return string(path[0 : i+1]), nil
}
func Dumpdb() {
   var b strings.Builder
   if err := Dbconn.Dump(&b); err != nil {
      fmt.Println("dump file ", err.Error())
   }
   fmt.Printf("%T\n", b)
}