Compare commits

..

No commits in common. "b6091c6b426886af33b2550fea65f60ef0cf595a" and "b41b6e0a09440a93b59de1ca0cbb25284ee1f996" have entirely different histories.

5 changed files with 6 additions and 63 deletions

View File

@ -114,9 +114,3 @@ func GetContextVal[V, K any](ctx context.Context, k K, defaults V) V {
}
return vv
}
func IsImplements[T, A any](i A) (T, bool) {
var a any = i
t, ok := a.(T)
return t, ok
}

View File

@ -71,23 +71,3 @@ func Unshift[T any](a *[]T, e ...T) {
func Push[T any](a *[]T, e ...T) {
*a = append(*a, e...)
}
func Decompress[T any](a [][]T) (r []T) {
for _, ts := range a {
for _, t := range ts {
r = append(r, t)
}
}
return
}
func DecompressBy[T, R any](a [][]T, fn func(T) (R, bool)) (r []R) {
for _, ts := range a {
for _, t := range ts {
v, ok := fn(t)
if ok {
r = append(r, v)
}
}
}
return
}

View File

@ -22,10 +22,6 @@ type ParseWhere interface {
ParseWhere(*[][]any) (string, []any, error)
}
type AndWhere interface {
AndWhere(field, operator, val, fieldType string) ParseWhere
}
type dbQuery interface {
Select(context.Context, any, string, ...any) error
Get(context.Context, any, string, ...any) error

View File

@ -186,10 +186,3 @@ func (w SqlBuilder) parseJoin() string {
}
return s.String()
}
func (w SqlBuilder) AndWhere(field, operator, val, fieldType string) ParseWhere {
ww := append(w, []string{
field, operator, val, fieldType,
})
return ww
}

View File

@ -90,18 +90,6 @@ func parseAfterJoin(fromTable string, ids [][]any, qq *QueryCondition, ship Rela
tables[len(tables)-1], ship.Middle.ForeignKey), "in", ""},
)
qq.Where = ww
} else {
aw, ok := helper.IsImplements[AndWhere](qq.Where)
if ok {
vv := aw.AndWhere(fmt.Sprintf("%s.%s",
tables[len(tables)-1], ship.Middle.ForeignKey), "in", strings.Join(slice.DecompressBy(ids, func(t any) (string, bool) {
return fmt.Sprintf("%v", t), true
}), ","), "int")
wa, ok := helper.IsImplements[ParseWhere](vv)
if ok {
qq.Where = wa
}
}
}
if qq.Fields == "" || qq.Fields == "*" {
qq.Fields = str.Join(from[len(from)-1], ".", "*", ",", tables[len(tables)-1], ".", ship.Middle.ForeignKey)
@ -145,26 +133,18 @@ func Relation(isPlural bool, db dbQuery, ctx context.Context, r any, q *QueryCon
if w == nil {
qq.Where = SqlBuilder{}
}
ww, ok := qq.Where.(SqlBuilder)
in := [][]any{ids}
if ok {
if ship.Middle != nil {
isPlural = parseAfterJoin(qq.From, in, qq, ship)
} else {
ww, ok := qq.Where.(SqlBuilder)
if ok {
ww = append(ww, SqlBuilder{{
ship.ForeignKey, "in", "",
}}...)
qq.Where = ww
} else {
aw, ok := helper.IsImplements[AndWhere](qq.Where)
if ok {
ww := aw.AndWhere(ship.ForeignKey, "in", strings.Join(slice.Map(ids, func(t any) string {
return fmt.Sprintf("%v", t)
}), ","), "int")
qq.Where = ww
}
}
qq.In = in
qq.Where = ww
}
}
err = ParseRelation(isPlural || ship.RelationType == HasMany, db, ctx, helper.Or(isPlural, rrs, rr), qq)
if err != nil {