1package exp
2
3type (
4	ranged struct {
5		lhs Expression
6		rhs RangeVal
7		op  RangeOperation
8	}
9	rangeVal struct {
10		start interface{}
11		end   interface{}
12	}
13)
14
15// used internally to create an BETWEEN comparison RangeExpression
16func between(lhs Expression, rhs RangeVal) RangeExpression {
17	return NewRangeExpression(BetweenOp, lhs, rhs)
18}
19
20// used internally to create an NOT BETWEEN comparison RangeExpression
21func notBetween(lhs Expression, rhs RangeVal) RangeExpression {
22	return NewRangeExpression(NotBetweenOp, lhs, rhs)
23}
24
25func NewRangeExpression(op RangeOperation, lhs Expression, rhs RangeVal) RangeExpression {
26	return ranged{op: op, lhs: lhs, rhs: rhs}
27}
28
29func (r ranged) Clone() Expression {
30	return NewRangeExpression(r.op, r.lhs.Clone(), r.rhs)
31}
32
33func (r ranged) Expression() Expression {
34	return r
35}
36
37func (r ranged) RHS() RangeVal {
38	return r.rhs
39}
40
41func (r ranged) LHS() Expression {
42	return r.lhs
43}
44
45func (r ranged) Op() RangeOperation {
46	return r.op
47}
48
49// Creates a new Range to be used with a Between expression
50//    exp.C("col").Between(exp.Range(1, 10))
51func NewRangeVal(start, end interface{}) RangeVal {
52	return rangeVal{start: start, end: end}
53}
54
55func (rv rangeVal) Start() interface{} {
56	return rv.start
57}
58
59func (rv rangeVal) End() interface{} {
60	return rv.end
61}
62