123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package search
- import "strings"
- type Condition interface {
- SetWhere(k string, v []interface{})
- SetOr(k string, v []interface{})
- SetOrContains(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{}
- OrContains 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) SetOrContains(k string, v []interface{}) {
- if e.OrContains == nil {
- e.OrContains = make(map[string][]interface{})
- }
- e.OrContains[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
- }
- // 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
- }
|