From 3bea45bd2467b5d45fb1507e09c8493bc4ad73c9 Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期五, 09 八月 2019 11:29:36 +0800
Subject: [PATCH] test

---
 dbself.go |   74 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 0 deletions(-)

diff --git a/dbself.go b/dbself.go
index 70b7024..d793d14 100644
--- a/dbself.go
+++ b/dbself.go
@@ -8,6 +8,7 @@
 	"path/filepath"
 	"strings"
 	"sync"
+	"github.com/jinzhu/gorm"
 )
 
 const (
@@ -83,6 +84,11 @@
 	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()
@@ -95,6 +101,74 @@
 	return rows, nil
 }
 
+func ExecuteSqlByGorm(sqls []string) (bool,error) {
+	if localDb != nil {
+		var err error
+		tx := localDb.Begin()
+		defer func() {
+			if err !=nil && tx !=nil {
+				tx.Rollback()
+			}
+		}()
+		for _,sql :=range sqls {
+			result := tx.Exec(sql)
+			if result.Error !=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"`
+}
+
+func ExecuteQueryByGorm(tableNames []string) ([]string, error) {
+	if tableNames !=nil {
+		var arr []string
+		for _,table :=range tableNames {
+			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))
+			}
+			tSql = fmt.Sprintf(`SELECT 'INSERT INTO "%s" VALUES(%s)' FROM "%s";`,
+				table,
+				strings.Join(columnNames, ","),
+				table)
+			var dumpSqls []string
+			err = localDb.Raw(tSql).Scan(&dumpSqls).Error
+			if err !=nil {
+				return nil,errors.New("dump err")
+			}
+			arr = append(arr, dumpSqls...)
+		}
+		return arr,nil
+	}
+	return nil,errors.New("tableNames is nil")
+}
+
 func Dumpdb() {
 
 	var b strings.Builder

--
Gitblit v1.8.0