Esempio n. 1
0
func newSargAnd(expr *expression.And) *sargAnd {
	rv := &sargAnd{}
	rv.sarg = func(expr2 expression.Expression) (spans Spans, err error) {
		if expr.EquivalentTo(expr2) {
			return _SELF_SPANS, nil
		}

		for _, op := range expr.Operands() {
			s := SargFor(op, expr2)
			if s == nil {
				continue
			}

			if spans == nil {
				spans = s
			} else {
				spans = constrain(spans, s)
			}
		}

		return
	}

	return rv
}