Слияние кода завершено, страница обновится автоматически
/*
* Copyright 2018. bigpigeon. All rights reserved.
* Use of this source code is governed by a MIT style
* license that can be found in the LICENSE file.
*/
package toyorm
type ToyBrickAnd struct {
Brick *ToyBrick
}
func (t ToyBrickAnd) Condition(expr SearchExpr, key FieldSelection, v ...interface{}) *ToyBrick {
search := t.Brick.condition(expr, key, v...)
return t.Conditions(search)
}
func (t ToyBrickAnd) ConditionGroup(expr SearchExpr, group interface{}) *ToyBrick {
search := t.Brick.conditionGroup(expr, group)
return t.Conditions(search)
}
func (t ToyBrickAnd) Conditions(search SearchList) *ToyBrick {
return t.Brick.Scope(func(t *ToyBrick) *ToyBrick {
if len(search) == 0 {
return t
}
newSearch := make(SearchList, len(t.Search), len(t.Search)+len(search))
copy(newSearch, t.Search)
newOwnSearch := make([]int, len(t.OwnSearch), len(t.OwnSearch)+len(search))
copy(newOwnSearch, t.OwnSearch)
if len(t.Search) != 0 {
// AND have high priority
if newSearch[len(newSearch)-1].Type == ExprOr {
start := len(newSearch) - 1
newSearch = newSearch[:start]
newSearch = append(newSearch, search...)
// add join own information
for i, s := range newSearch[start:] {
if s.Type.IsBranch() == false {
newOwnSearch = append(newOwnSearch, start+i)
}
}
newSearch = append(newSearch, NewSearchBranch(ExprAnd), NewSearchBranch(ExprOr))
} else {
start := len(newSearch)
newSearch = append(newSearch, search...)
// add join own information
for i, s := range newSearch[start:] {
if s.Type.IsBranch() == false {
newOwnSearch = append(newOwnSearch, start+i)
}
}
newSearch = append(newSearch, NewSearchBranch(ExprAnd))
}
} else {
start := len(newSearch)
newSearch = append(newSearch, search...)
// add join own information
for i, s := range newSearch[start:] {
if s.Type.IsBranch() == false {
newOwnSearch = append(newOwnSearch, start+i)
}
}
}
newt := *t
newt.Search = newSearch
newt.OwnSearch = newOwnSearch
return &newt
})
}
type ToyBrickOr struct {
Brick *ToyBrick
}
func (t ToyBrickOr) Condition(expr SearchExpr, key FieldSelection, v ...interface{}) *ToyBrick {
search := t.Brick.condition(expr, key, v...)
return t.Conditions(search)
}
func (t ToyBrickOr) ConditionGroup(expr SearchExpr, group interface{}) *ToyBrick {
search := t.Brick.conditionGroup(expr, group)
return t.Conditions(search)
}
func (t ToyBrickOr) Conditions(search SearchList) *ToyBrick {
return t.Brick.Scope(func(t *ToyBrick) *ToyBrick {
if len(search) == 0 {
return t
}
newSearch := make(SearchList, len(t.Search), len(t.Search)+len(search))
copy(newSearch, t.Search)
newOwnSearch := make([]int, len(t.OwnSearch), len(t.OwnSearch)+len(search))
copy(newOwnSearch, t.OwnSearch)
if len(newSearch) != 0 {
start := len(newSearch)
newSearch = append(newSearch, search...)
// add join own information
for i, s := range newSearch[start:] {
if s.Type.IsBranch() == false {
newOwnSearch = append(newOwnSearch, start+i)
}
}
newSearch = append(newSearch, NewSearchBranch(ExprOr))
} else {
start := len(newSearch)
newSearch = append(newSearch, search...)
// add join own information
for i, s := range newSearch[start:] {
if s.Type.IsBranch() == false {
newOwnSearch = append(newOwnSearch, start+i)
}
}
}
newt := *t
newt.Search = newSearch
newt.OwnSearch = newOwnSearch
return &newt
})
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )