From 5254b8f9e86010f517432f94fa81c6c3c33e5a47 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期四, 05 九月 2019 17:56:28 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.14:10010/r/syncdb
---
dbself.go | 128 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 123 insertions(+), 5 deletions(-)
diff --git a/dbself.go b/dbself.go
index a264aa9..f05cc24 100644
--- a/dbself.go
+++ b/dbself.go
@@ -8,20 +8,22 @@
"path/filepath"
"strings"
"sync"
+ "github.com/jinzhu/gorm"
)
-
const (
- PersonSqliteDBPath = "/opt/workspace/DataBases/sync.db"
+ PersonSqliteDBPath = "~/workspace/gitblit/dbserver/config/testdb.db"
+ DbT_TableName = "dbtables"
+ DBP_TableName = "dbtablepersons"
)
-var syncMut sync.Mutex
+var syncMut sync.Mutex
var SerfDbConn *Conn
// get Conn of db for do execute.
func InitDbConn(dbPath string) error {
- if dbPath == "" {
+ if dbPath == "" {
dbPath = PersonSqliteDBPath
}
@@ -73,7 +75,7 @@
}
// do exet when get querystring.
-func DoExecute(sqlString []string) ([]*Result, error) {
+func ExecuteWriteSql(sqlString []string) ([]*Result, error) {
syncMut.Lock()
defer syncMut.Unlock()
allResults, err := SerfDbConn.Execute(sqlString, false, false)
@@ -84,6 +86,122 @@
return allResults, nil
}
+var localDb *gorm.DB
+func InitLocalDb(db *gorm.DB) {
+ localDb = db
+}
+
+// do exet when get querystring.
+func ExecuteQuerySql(sqlString []string) ([]*Rows, error) {
+ syncMut.Lock()
+ defer syncMut.Unlock()
+ rows, err := SerfDbConn.Query(sqlString, false, false)
+ if err != nil {
+ fmt.Println("execute error!", err)
+ return nil, err
+ }
+ return rows, nil
+}
+
+func ExecuteSqlByGorm(sqls []string) (bool,error) {
+ if localDb != nil {
+ localDb.LogMode(false)
+ defer localDb.LogMode(true)
+ var err error
+ tx := localDb.Begin()
+ defer func() {
+ if err !=nil && tx !=nil {
+ tx.Rollback()
+ }
+ }()
+ for _,sql :=range sqls {
+ result := tx.Exec(sql)
+ err = result.Error
+ if err !=nil {
+ return false,result.Error
+ }
+ if result.RowsAffected == 0{
+ fmt.Println("ExecuteSqlByGorm fail")
+ return false,errors.New("ExecuteSqlByGorm fail")
+ }
+ }
+ tx.Commit()
+ return true,nil
+ }
+ return false,errors.New("localDb is nil")
+}
+
+type TableDesc struct {
+ Cid int `json:"cid"`
+ Name string `json:"name"`
+ Type string `json:"type"`
+ Notnull bool `json:"notnull"`
+ DFltValue interface{} `json:"dflt_value"`
+ Pk int `json:"pk"`
+}
+
+type DumpSql struct {
+ Sql string `json:"sql"`
+}
+
+func ExecuteQueryByGorm(tableNames []string) ([]string, error) {
+ localDb.LogMode(false)
+ defer localDb.LogMode(true)
+ if tableNames !=nil {
+ var arr []string
+ var dumpSql []DumpSql
+ for _,table :=range tableNames {
+ dumpSql = make([]DumpSql, 0)
+ var tDescArr []TableDesc
+ tSql := fmt.Sprintf(`PRAGMA table_info("%s")`, table)
+ err := localDb.Raw(tSql).Scan(&tDescArr).Error
+ if err !=nil {
+ return nil,errors.New("tableDesc err")
+ }
+ fmt.Println(table,"'Columns is:",tDescArr)
+ if tDescArr == nil || len(tDescArr) == 0 {
+ return nil,errors.New(table+" has no column")
+ }
+ var columnNames []string
+ for _,col :=range tDescArr {
+ columnNames = append(columnNames, fmt.Sprintf(`'||quote("%s")||'`, col.Name))
+ }
+ 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)
+ }
+
+ fmt.Println("tSql:",tSql)
+
+ err = localDb.Raw(tSql).Scan(&dumpSql).Error
+ if err !=nil {
+ return nil,errors.New("dump err")
+ continue
+ }
+ if len(dumpSql)>0 {
+ for _,d :=range dumpSql {
+ arr = append(arr, d.Sql)
+ }
+ }
+
+ }
+ return arr,nil
+ }
+ return nil,errors.New("tableNames is nil")
+}
+
func Dumpdb() {
var b strings.Builder
--
Gitblit v1.8.0