基于serf的数据库同步模块库
liuxiaolong
2019-10-24 ca2652d724c91bcc0849c749d10f2b9af8129a09
dbself.go
@@ -9,10 +9,13 @@
   "strings"
   "sync"
   "github.com/jinzhu/gorm"
   "basic.com/valib/logger.git"
)
const (
   PersonSqliteDBPath = "~/workspace/gitblit/dbserver/config/testdb.db"
   DbT_TableName = "dbtables"
   DBP_TableName = "dbtablepersons"
)
var syncMut sync.Mutex
@@ -25,15 +28,15 @@
      dbPath = PersonSqliteDBPath
   }
   fmt.Println("self: ========>", dbPath)
   logger.Info("self: ========>", dbPath)
   db, err := New(dbPath, "", false)
   if err != nil {
      fmt.Println("new db database: ", err)
      logger.Error("new db database: ", err)
      return err
   }
   dbConn, err := db.Connect()
   if err != nil {
      fmt.Println("new db conn error; ", err)
      logger.Error("new db conn error; ", err)
      return err
   }
@@ -46,21 +49,21 @@
   path, err := getCurrentPath()
   if err != nil {
      fmt.Println("getCurrentPath error; ", err)
      logger.Error("getCurrentPath error; ", err)
      return "", err
   }
   filepath := path + "tmp.db"
   fmt.Println("filepath:", filepath)
   logger.Info("filepath:", filepath)
   db, err := New(filepath, "", false)
   if err != nil {
      fmt.Println("new db database: ", err)
      logger.Error("new db database: ", err)
      return "", err
   }
   tmpconn, err := db.Connect()
   if err != nil {
      fmt.Println("new db conn error; ", err)
      logger.Error("new db conn error; ", err)
      return "", err
   }
   defer tmpconn.Close()
@@ -78,7 +81,7 @@
   defer syncMut.Unlock()
   allResults, err := SerfDbConn.Execute(sqlString, false, false)
   if err != nil {
      fmt.Println("execute error!", err)
      logger.Error("execute error!", err)
      return nil, err
   }
   return allResults, nil
@@ -95,7 +98,7 @@
   defer syncMut.Unlock()
   rows, err := SerfDbConn.Query(sqlString, false, false)
   if err != nil {
      fmt.Println("execute error!", err)
      logger.Error("execute error!", err)
      return nil, err
   }
   return rows, nil
@@ -114,12 +117,15 @@
      }()
      for _,sql :=range sqls {
         result := tx.Exec(sql)
         if result.Error !=nil {
            return false,result.Error
         err = result.Error
         if err !=nil {
            logger.Error("ExecuteSqlByGorm err:",err,",sql:",sql)
            return false,err
         }
         if result.RowsAffected == 0{
            fmt.Println("ExecuteSqlByGorm fail")
            return false,errors.New("ExecuteSqlByGorm fail")
         if result.RowsAffected == 0 {
            logger.Debug("ExecuteSqlByGorm RowsAffected == 0",",sql:",sql)
            err = errors.New("ExecuteSqlByGorm RowsAffected == 0")
            return false,err
         }
      }
      tx.Commit()
@@ -155,7 +161,7 @@
         if err !=nil {
            return nil,errors.New("tableDesc err")
         }
         fmt.Println(table,"'Columns is:",tDescArr)
         logger.Info(table,"'Columns is:",tDescArr)
         if tDescArr == nil || len(tDescArr) == 0 {
            return nil,errors.New(table+" has no column")
         }
@@ -163,11 +169,24 @@
         for _,col :=range tDescArr {
            columnNames = append(columnNames, fmt.Sprintf(`'||quote("%s")||'`, col.Name))
         }
         tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" VALUES(%s)' as sql FROM "%s";`,
            table,
            strings.Join(columnNames, ","),
            table)
         fmt.Println("tSql:",tSql)
         if table == DbT_TableName {
            tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" VALUES(%s)' as sql FROM "%s" where (analyServerId='' or analyServerId is NULL);`,
               table,
               strings.Join(columnNames, ","),
               table)
         } else if table == DBP_TableName {
            tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" VALUES(%s)' as sql FROM "%s" where tableId in (select id from dbTables where (analyServerId='' or analyServerId is NULL));`,
               table,
               strings.Join(columnNames, ","),
               table)
         } else {
            tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" VALUES(%s)' as sql FROM "%s";`,
               table,
               strings.Join(columnNames, ","),
               table)
         }
         logger.Info("tSql:",tSql)
         err = localDb.Raw(tSql).Scan(&dumpSql).Error
         if err !=nil {
@@ -190,9 +209,9 @@
   var b strings.Builder
   if err := SerfDbConn.Dump(&b); err != nil {
      fmt.Println("dump file ", err.Error())
      logger.Error("dump file ", err.Error())
   }
   fmt.Printf("%T\n", b)
   logger.Info("%T\n", b)
}
// get current path