package dbutils import ( "github.com/iwind/TeaGo/dbs" "net" "strings" ) // NewQuery 构造Query func NewQuery(tx *dbs.Tx, dao dbs.DAOWrapper, adminId int64, userId int64) *dbs.Query { query := dao.Object().Query(tx) if adminId > 0 { //query.Attr("adminId", adminId) } if userId > 0 { query.Attr("userId", userId) } return query } // QuoteLikeKeyword 处理关键词中的特殊字符 func QuoteLikeKeyword(keyword string) string { keyword = strings.ReplaceAll(keyword, "%", "\\%") keyword = strings.ReplaceAll(keyword, "_", "\\_") return keyword } func QuoteLike(keyword string) string { return "%" + QuoteLikeKeyword(keyword) + "%" } func QuoteLikePrefix(keyword string) string { return QuoteLikeKeyword(keyword) + "%" } func QuoteLikeSuffix(keyword string) string { return "%" + QuoteLikeKeyword(keyword) } // SetGlobalVarMin 设置变量最小值 func SetGlobalVarMin(db *dbs.DB, variableName string, minValue int) error { result, err := db.FindOne("SHOW VARIABLES WHERE variable_name=?", variableName) if err != nil { return err } if len(result) == 0 { return nil } var oldValue = result.GetInt("Value") if oldValue > 0 /** 小于等于0通常表示不限制 **/ && oldValue < minValue { _, err = db.Exec("SET GLOBAL "+variableName+"=?", minValue) return err } return nil } // SetGlobalVarMax 设置变量最大值 func SetGlobalVarMax(db *dbs.DB, variableName string, maxValue int) error { result, err := db.FindOne("SHOW VARIABLES WHERE variable_name=?", variableName) if err != nil { return err } if len(result) == 0 { return nil } var oldValue = result.GetInt("Value") if oldValue > maxValue { _, err = db.Exec("SET GLOBAL "+variableName+"=?", maxValue) return err } return nil } // IsLocalAddr 是否为本地数据库 func IsLocalAddr(addr string) bool { var host = addr if strings.Contains(addr, ":") { host, _, _ = net.SplitHostPort(addr) if len(host) == 0 { host = addr } } if host == "127.0.0.1" || host == "::1" || host == "localhost" { return true } interfaceAddrs, _ := net.InterfaceAddrs() for _, interfaceAddr := range interfaceAddrs { if strings.HasPrefix(interfaceAddr.String(), host+"/") { return true } } return false }