1package exp
2
3type (
4	orderedExpression struct {
5		sortExpression Expression
6		direction      SortDirection
7		nullSortType   NullSortType
8	}
9)
10
11// used internally to create a new SORT_ASC OrderedExpression
12func asc(exp Expression) OrderedExpression {
13	return NewOrderedExpression(exp, AscDir, NoNullsSortType)
14}
15
16// used internally to create a new SORT_DESC OrderedExpression
17func desc(exp Expression) OrderedExpression {
18	return NewOrderedExpression(exp, DescSortDir, NoNullsSortType)
19}
20
21// used internally to create a new SORT_ASC OrderedExpression
22func NewOrderedExpression(exp Expression, direction SortDirection, sortType NullSortType) OrderedExpression {
23	return orderedExpression{sortExpression: exp, direction: direction, nullSortType: sortType}
24}
25
26func (oe orderedExpression) Clone() Expression {
27	return NewOrderedExpression(oe.sortExpression, oe.direction, oe.nullSortType)
28}
29
30func (oe orderedExpression) Expression() Expression {
31	return oe
32}
33
34func (oe orderedExpression) SortExpression() Expression {
35	return oe.sortExpression
36}
37
38func (oe orderedExpression) IsAsc() bool {
39	return oe.direction == AscDir
40}
41
42func (oe orderedExpression) NullSortType() NullSortType {
43	return oe.nullSortType
44}
45
46func (oe orderedExpression) NullsFirst() OrderedExpression {
47	return NewOrderedExpression(oe.sortExpression, oe.direction, NullsFirstSortType)
48}
49
50func (oe orderedExpression) NullsLast() OrderedExpression {
51	return NewOrderedExpression(oe.sortExpression, oe.direction, NullsLastSortType)
52}
53