Esempio n. 1
0
func newSargOr(expr *expression.Or) *sargOr {
	rv := &sargOr{}
	rv.sarg = func(expr2 expression.Expression) (Spans, error) {
		if expr.EquivalentTo(expr2) {
			return _SELF_SPANS, nil
		}

		spans := make(Spans, 0, len(expr.Operands()))
		for _, child := range expr.Operands() {
			cspans := SargFor(child, expr2)
			if len(cspans) > 0 {
				spans = append(spans, cspans...)
			}
		}

		return spans, nil
	}

	return rv
}