func()

in storage/db/query.go [60:132]


func (p part) merge(p2 part) (part, error) {
	if p2.operator < p.operator {
		// Sort the parts so we only need half the table below.
		p, p2 = p2, p
	}
	switch p.operator {
	case equals:
		switch p2.operator {
		case equals:
			if p.value == p2.value {
				return p, nil
			}
			return part{}, io.EOF
		case lt:
			if p.value < p2.value {
				return p, nil
			}
			return part{}, io.EOF
		case gt:
			if p.value > p2.value {
				return p, nil
			}
			return part{}, io.EOF
		case ltgt:
			if p.value < p2.value && p.value > p2.value2 {
				return p, nil
			}
			return part{}, io.EOF
		}
	case ltgt:
		switch p2.operator {
		case ltgt:
			if p2.value < p.value {
				p.value = p2.value
			}
			if p2.value2 > p.value2 {
				p.value2 = p2.value2
			}
		case lt:
			if p2.value < p.value {
				p.value = p2.value
			}
		case gt:
			if p2.value > p.value2 {
				p.value2 = p2.value
			}
		}
	case lt:
		switch p2.operator {
		case lt:
			if p2.value < p.value {
				return p2, nil
			}
			return p, nil
		case gt:
			p = part{p.key, ltgt, p.value, p2.value}
		}
	case gt:
		// p2.operator == gt
		if p2.value > p.value {
			return p2, nil
		}
		return p, nil
	}
	// p.operator == ltgt
	if p.value <= p.value2 || p.value == "" {
		return part{}, io.EOF
	}
	if p.value2 == "" {
		return part{p.key, lt, p.value, ""}, nil
	}
	return p, nil
}