zhangqian
2024-04-25 2d6875c93b25d0b7336c7fa11e066d213259fe2e
serf/sqlite.go
@@ -1,10 +1,8 @@
package serf
import (
   "apsClient/pkg/logx"
   "errors"
   "fmt"
   "regexp"
   "strings"
   "github.com/jinzhu/gorm"
@@ -50,13 +48,16 @@
         }
         var columnNames []string
         var columnValues []string
         for _, col := range tDescArr {
            columnNames = append(columnNames, fmt.Sprintf(`'||quote("%s")||'`, col.Name))
            columnNames = append(columnNames, col.Name)
            columnValues = append(columnValues, fmt.Sprintf(`'||quote("%s")||'`, col.Name))
         }
         tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" VALUES(%s)' as sql FROM "%s";`,
         tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" (%s) VALUES(%s)' as sql FROM "%s";`,
            table,
            strings.Join(columnNames, ","),
            strings.Join(columnValues, ","),
            table)
         //fmt.Println("tSql:", tSql)
@@ -76,61 +77,4 @@
   }
   return nil, errors.New("tableNames is nil")
}
type DbLogger struct {
}
func (dbLogger *DbLogger) Print(values ...interface{}) {
   var (
      level = values[0]
   )
   fmt.Println("dblogger", values)
   if level == "sql" {
      msgArr := gorm.LogFormatter(values...)
      sql := msgArr[3].(string)
      logx.Infof("sql: %v", sql)
      sql = strings.TrimPrefix(sql, " ")
      if !strings.HasPrefix(sql, "SELECT") && !strings.HasPrefix(sql, "select") && !strings.Contains(sql, "PRAGMA") && !strings.Contains(sql, "pragma") {
         affected := values[5].(int64)
         if affected > 0 { //执行成功
            //判断操作的是哪张表
            whereIdx := strings.Index(sql, "WHERE")
            sqlWithTable := sql
            if whereIdx > -1 {
               sqlWithTable = sql[:whereIdx]
            }
            fmt.Println("判断是哪张表 sqlWithTable:", sqlWithTable)
            insertReg := regexp.MustCompile(`^\s*(?i:insert)\s`) //insert
            updateReg := regexp.MustCompile(`^\s*(?i:update)\s`) //update
            delReg := regexp.MustCompile(`^\s*(?i:delete)\s`)    //delete
            if insertReg.MatchString(sqlWithTable) {
               fmt.Println("插入操作")
               for _, t := range agent.syncTables {
                  reg := regexp.MustCompile(`\s+\"?(?i:` + t + `)\"?\s+`)
                  if reg.MatchString(sqlWithTable) {
                     fmt.Println("属于同步表:", t)
                     syncSqlChan <- sql
                  }
               }
            } else if updateReg.MatchString(sqlWithTable) || delReg.MatchString(sqlWithTable) {
               fmt.Println("删除或者更新")
               for _, t := range agent.syncTables {
                  reg := regexp.MustCompile(`\s+\"?(?i:` + t + `)\"?\s+`)
                  if reg.MatchString(sqlWithTable) {
                     fmt.Println("属于同步表:", t)
                     syncSqlChan <- sql
                  }
               }
            }
         }
      }
   } else {
      fmt.Println("dbLogger level!=sql")
   }
}