94 lines
1.6 KiB
Go
94 lines
1.6 KiB
Go
|
|
package db
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
. "code.hoteas.com/golang/hotime/common"
|
|||
|
|
"os"
|
|||
|
|
"strings"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// backupSave 保存备份
|
|||
|
|
// path: 备份文件路径
|
|||
|
|
// tt: 表名
|
|||
|
|
// code: 备份类型 0=全部, 1=仅数据, 2=仅DDL
|
|||
|
|
func (that *HoTimeDB) backupSave(path string, tt string, code int) {
|
|||
|
|
fd, _ := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
|||
|
|
defer fd.Close()
|
|||
|
|
|
|||
|
|
str := "\r\n"
|
|||
|
|
if code == 0 || code == 2 {
|
|||
|
|
str += that.backupDdl(tt)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if code == 0 || code == 1 {
|
|||
|
|
str += "insert into `" + tt + "`\r\n\r\n("
|
|||
|
|
str += that.backupCol(tt)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
_, _ = fd.Write([]byte(str))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// backupDdl 备份表结构(DDL)
|
|||
|
|
func (that *HoTimeDB) backupDdl(tt string) string {
|
|||
|
|
data := that.Query("show create table " + tt)
|
|||
|
|
if len(data) == 0 {
|
|||
|
|
return ""
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return ObjToStr(data[0]["Create Table"]) + ";\r\n\r\n"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// backupCol 备份表数据
|
|||
|
|
func (that *HoTimeDB) backupCol(tt string) string {
|
|||
|
|
str := ""
|
|||
|
|
data := that.Select(tt, "*")
|
|||
|
|
|
|||
|
|
lthData := len(data)
|
|||
|
|
|
|||
|
|
if lthData == 0 {
|
|||
|
|
return str
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
lthCol := len(data[0])
|
|||
|
|
col := make([]string, lthCol)
|
|||
|
|
tempLthData := 0
|
|||
|
|
|
|||
|
|
for k := range data[0] {
|
|||
|
|
if tempLthData == lthCol-1 {
|
|||
|
|
str += "`" + k + "`) "
|
|||
|
|
} else {
|
|||
|
|
str += "`" + k + "`,"
|
|||
|
|
}
|
|||
|
|
col[tempLthData] = k
|
|||
|
|
tempLthData++
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
str += " values"
|
|||
|
|
|
|||
|
|
for j := 0; j < lthData; j++ {
|
|||
|
|
for m := 0; m < lthCol; m++ {
|
|||
|
|
if m == 0 {
|
|||
|
|
str += "("
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
v := "NULL"
|
|||
|
|
if data[j][col[m]] != nil {
|
|||
|
|
v = "'" + strings.Replace(ObjToStr(data[j][col[m]]), "'", `\'`, -1) + "'"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if m == lthCol-1 {
|
|||
|
|
str += v + ") "
|
|||
|
|
} else {
|
|||
|
|
str += v + ","
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if j == lthData-1 {
|
|||
|
|
str += ";\r\n\r\n"
|
|||
|
|
} else {
|
|||
|
|
str += ",\r\n\r\n"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return str
|
|||
|
|
}
|