From 172982e01939edf6990fa67a916f798966c23c7b Mon Sep 17 00:00:00 2001
From: chenshijun <csj_sky@126.com>
Date: 星期五, 09 八月 2019 17:30:06 +0800
Subject: [PATCH] 增加query和userevent的包大小限制
---
dbself.go | 165 ++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 133 insertions(+), 32 deletions(-)
diff --git a/dbself.go b/dbself.go
index f6cb6e5..5b5c180 100644
--- a/dbself.go
+++ b/dbself.go
@@ -8,47 +8,50 @@
"path/filepath"
"strings"
"sync"
+ "github.com/jinzhu/gorm"
)
-var Dbconn *Conn
-var sy sync.Mutex
+const (
+ PersonSqliteDBPath = "~/workspace/gitblit/dbserver/config/testdb.db"
+)
-func init() {
- GetConn()
-}
+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 ExecuteWriteSql(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,115 @@
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 {
+ 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"`
+}
+
+type DumpSql struct {
+ Sql string `json:"sql"`
+}
+
+func ExecuteQueryByGorm(tableNames []string) ([]string, error) {
+ 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))
+ }
+ 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
+ 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 +209,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)
}
--
Gitblit v1.8.0