1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package clause
- // Where where clause
- type Where struct {
- AndConditions AddConditions
- ORConditions []ORConditions
- builders []Expression
- }
- // Name where clause name
- func (where Where) Name() string {
- return "WHERE"
- }
- // Build build where clause
- func (where Where) Build(builder Builder) {
- var withConditions bool
- if len(where.AndConditions) > 0 {
- withConditions = true
- where.AndConditions.Build(builder)
- }
- if len(where.builders) > 0 {
- for _, b := range where.builders {
- if withConditions {
- builder.Write(" AND ")
- }
- withConditions = true
- b.Build(builder)
- }
- }
- var singleOrConditions []ORConditions
- for _, or := range where.ORConditions {
- if len(or) == 1 {
- if withConditions {
- builder.Write(" OR ")
- or.Build(builder)
- } else {
- singleOrConditions = append(singleOrConditions, or)
- }
- } else {
- withConditions = true
- builder.Write(" AND (")
- or.Build(builder)
- builder.WriteByte(')')
- }
- }
- for _, or := range singleOrConditions {
- if withConditions {
- builder.Write(" AND ")
- or.Build(builder)
- } else {
- withConditions = true
- or.Build(builder)
- }
- }
- if !withConditions {
- builder.Write(" FALSE")
- }
- return
- }
- // MergeExpression merge where clauses
- func (where Where) MergeExpression(expr Expression) {
- if w, ok := expr.(Where); ok {
- where.AndConditions = append(where.AndConditions, w.AndConditions...)
- where.ORConditions = append(where.ORConditions, w.ORConditions...)
- where.builders = append(where.builders, w.builders...)
- } else {
- where.builders = append(where.builders, expr)
- }
- }
|