package syncdb import ( "errors" "fmt" "os" "os/exec" "path/filepath" "strings" "sync" ) const ( PersonSqliteDBPath = "~/workspace/gitblit/dbserver/config/testdb.db" ) var syncMut sync.Mutex var SerfDbConn *Conn // get Conn of db for do execute. func InitDbConn(dbPath string) error { if dbPath == "" { dbPath = PersonSqliteDBPath } fmt.Println("self: ========>", dbPath) db, err := New(dbPath, "", false) if err != nil { fmt.Println("new db database: ", err) return err } 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() if err != nil { fmt.Println("getCurrentPath error; ", err) return "", err } filepath := path + "tmp.db" fmt.Println("filepath:", filepath) db, err := New(filepath, "", false) if err != nil { fmt.Println("new db database: ", err) return "", err } tmpconn, err := db.Connect() if err != nil { fmt.Println("new db conn error; ", err) return "", err } defer tmpconn.Close() syncMut.Lock() defer syncMut.Unlock() err = SerfDbConn.Backup(tmpconn) if err != nil { return "", err } return filepath, nil } // do exet when get querystring. func ExecuteWriteSql(sqlString []string, tx bool) ([]*Result, error) { syncMut.Lock() defer syncMut.Unlock() allResults, err := SerfDbConn.Execute(sqlString, tx, false) if err != nil { fmt.Println("execute error!", err) return nil, err } return allResults, nil } // 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 Dumpdb() { syncMut.Lock() defer syncMut.Unlock() 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) { file, err := exec.LookPath(os.Args[0]) if err != nil { return "", err } path, err := filepath.Abs(file) if err != nil { return "", err } i := strings.LastIndex(path, "/") if i < 0 { i = strings.LastIndex(path, "\\") } if i < 0 { return "", errors.New(`error: Can't find "/" or "\".`) } return string(path[0 : i+1]), nil }