fork github.com/doug-martin

This commit is contained in:
2025-03-22 23:02:05 +08:00
commit f14642a736
131 changed files with 34555 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
package exp
type (
expressionList struct {
operator ExpressionListType
expressions []Expression
}
)
// A list of expressions that should be ORed together
//
// Or(I("a").Eq(10), I("b").Eq(11)) //(("a" = 10) OR ("b" = 11))
func NewExpressionList(operator ExpressionListType, expressions ...Expression) ExpressionList {
el := expressionList{operator: operator}
exps := make([]Expression, 0, len(el.expressions))
for _, e := range expressions {
switch t := e.(type) {
case ExpressionList:
if !t.IsEmpty() {
exps = append(exps, e)
}
case Ex:
if len(t) > 0 {
exps = append(exps, e)
}
case ExOr:
if len(t) > 0 {
exps = append(exps, e)
}
default:
exps = append(exps, e)
}
}
el.expressions = exps
return el
}
func (el expressionList) Clone() Expression {
newExps := make([]Expression, 0, len(el.expressions))
for _, exp := range el.expressions {
newExps = append(newExps, exp.Clone())
}
return expressionList{operator: el.operator, expressions: newExps}
}
func (el expressionList) Expression() Expression {
return el
}
func (el expressionList) IsEmpty() bool {
return len(el.expressions) == 0
}
func (el expressionList) Type() ExpressionListType {
return el.operator
}
func (el expressionList) Expressions() []Expression {
return el.expressions
}
func (el expressionList) Append(expressions ...Expression) ExpressionList {
exps := make([]Expression, 0, len(el.expressions)+len(expressions))
exps = append(exps, el.expressions...)
exps = append(exps, expressions...)
return NewExpressionList(el.operator, exps...)
}