1 Star 0 Fork 0

linxing / youye-core

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
condition.go 2.53 KB
一键复制 编辑 原始数据 按行查看 历史
Mark 提交于 2023-12-23 11:58 . init
package search
import "strings"
type Condition interface {
SetWhere(k string, v []interface{})
SetOr(k string, v []interface{})
SetOrder(k string)
SetJoinOn(t, on string) Condition
}
type GormCondition struct {
GormPublic
Join []*GormJoin
}
type GormPublic struct {
Where map[string][]interface{}
Order []string
Or map[string][]interface{}
}
type GormJoin struct {
Type string
JoinOn string
GormPublic
}
func (e *GormJoin) SetJoinOn(t, on string) Condition {
return nil
}
func (e *GormPublic) SetWhere(k string, v []interface{}) {
if e.Where == nil {
e.Where = make(map[string][]interface{})
}
e.Where[k] = v
}
func (e *GormPublic) SetOr(k string, v []interface{}) {
if e.Or == nil {
e.Or = make(map[string][]interface{})
}
e.Or[k] = v
}
func (e *GormPublic) SetOrder(k string) {
if e.Order == nil {
e.Order = make([]string, 0)
}
e.Order = append(e.Order, k)
}
func (e *GormCondition) SetJoinOn(t, on string) Condition {
if e.Join == nil {
e.Join = make([]*GormJoin, 0)
}
join := &GormJoin{
Type: t,
JoinOn: on,
GormPublic: GormPublic{},
}
e.Join = append(e.Join, join)
return join
}
type resolveSearchTag struct {
Type string
Column string
Table string
On []string
Join string
}
func snakeString(s string) string {
data := make([]byte, 0, len(s)*2)
j := false
num := len(s)
for i := 0; i < num; i++ {
d := s[i]
// or通过ASCII码进行大小写的转化
// 65-90(A-Z),97-122(a-z)
//判断如果字母为大写的A-Z就在前面拼接一个_
if i > 0 && d >= 'A' && d <= 'Z' && j {
data = append(data, '_')
}
if d != '_' {
j = true
}
data = append(data, d)
}
//ToLower把大写字母统一转小写
return strings.ToLower(string(data[:]))
}
func getGormColumn(tag string) string {
args := strings.Split(tag, ";")
for _, arg := range args {
arg = strings.TrimSpace(arg)
if strings.HasPrefix(arg, "column:") {
return strings.TrimPrefix(arg, "column:")
}
}
return ""
}
// makeTag 解析search的tag标签
func makeTag(tag string) *resolveSearchTag {
r := &resolveSearchTag{}
tags := strings.Split(tag, ";")
var ts []string
for _, t := range tags {
ts = strings.Split(t, ":")
if len(ts) == 0 {
continue
}
switch ts[0] {
case "type":
if len(ts) > 1 {
r.Type = ts[1]
}
case "column":
if len(ts) > 1 {
r.Column = ts[1]
}
case "table":
if len(ts) > 1 {
r.Table = ts[1]
}
case "on":
if len(ts) > 1 {
r.On = ts[1:]
}
case "join":
if len(ts) > 1 {
r.Join = ts[1]
}
}
}
return r
}
1
https://gitee.com/linxing_3/youye-core.git
git@gitee.com:linxing_3/youye-core.git
linxing_3
youye-core
youye-core
v0.0.1-202405061706

搜索帮助