1package exp
2
3type (
4	sqlFunctionExpression struct {
5		name string
6		args []interface{}
7	}
8)
9
10// Creates a new SQLFunctionExpression with the given name and arguments
11func NewSQLFunctionExpression(name string, args ...interface{}) SQLFunctionExpression {
12	return sqlFunctionExpression{name: name, args: args}
13}
14
15func (sfe sqlFunctionExpression) Clone() Expression {
16	return sqlFunctionExpression{name: sfe.name, args: sfe.args}
17}
18
19func (sfe sqlFunctionExpression) Expression() Expression { return sfe }
20
21func (sfe sqlFunctionExpression) Args() []interface{} { return sfe.args }
22
23func (sfe sqlFunctionExpression) Name() string { return sfe.name }
24
25func (sfe sqlFunctionExpression) As(val interface{}) AliasedExpression {
26	return NewAliasExpression(sfe, val)
27}
28
29func (sfe sqlFunctionExpression) Eq(val interface{}) BooleanExpression  { return eq(sfe, val) }
30func (sfe sqlFunctionExpression) Neq(val interface{}) BooleanExpression { return neq(sfe, val) }
31
32func (sfe sqlFunctionExpression) Gt(val interface{}) BooleanExpression  { return gt(sfe, val) }
33func (sfe sqlFunctionExpression) Gte(val interface{}) BooleanExpression { return gte(sfe, val) }
34func (sfe sqlFunctionExpression) Lt(val interface{}) BooleanExpression  { return lt(sfe, val) }
35func (sfe sqlFunctionExpression) Lte(val interface{}) BooleanExpression { return lte(sfe, val) }
36
37func (sfe sqlFunctionExpression) Between(val RangeVal) RangeExpression { return between(sfe, val) }
38
39func (sfe sqlFunctionExpression) NotBetween(val RangeVal) RangeExpression {
40	return notBetween(sfe, val)
41}
42
43func (sfe sqlFunctionExpression) Like(val interface{}) BooleanExpression    { return like(sfe, val) }
44func (sfe sqlFunctionExpression) NotLike(val interface{}) BooleanExpression { return notLike(sfe, val) }
45func (sfe sqlFunctionExpression) ILike(val interface{}) BooleanExpression   { return iLike(sfe, val) }
46
47func (sfe sqlFunctionExpression) NotILike(val interface{}) BooleanExpression {
48	return notILike(sfe, val)
49}
50
51func (sfe sqlFunctionExpression) RegexpLike(val interface{}) BooleanExpression {
52	return regexpLike(sfe, val)
53}
54
55func (sfe sqlFunctionExpression) RegexpNotLike(val interface{}) BooleanExpression {
56	return regexpNotLike(sfe, val)
57}
58
59func (sfe sqlFunctionExpression) RegexpILike(val interface{}) BooleanExpression {
60	return regexpILike(sfe, val)
61}
62
63func (sfe sqlFunctionExpression) RegexpNotILike(val interface{}) BooleanExpression {
64	return regexpNotILike(sfe, val)
65}
66
67func (sfe sqlFunctionExpression) In(vals ...interface{}) BooleanExpression { return in(sfe, vals...) }
68func (sfe sqlFunctionExpression) NotIn(vals ...interface{}) BooleanExpression {
69	return notIn(sfe, vals...)
70}
71func (sfe sqlFunctionExpression) Is(val interface{}) BooleanExpression    { return is(sfe, val) }
72func (sfe sqlFunctionExpression) IsNot(val interface{}) BooleanExpression { return isNot(sfe, val) }
73func (sfe sqlFunctionExpression) IsNull() BooleanExpression               { return is(sfe, nil) }
74func (sfe sqlFunctionExpression) IsNotNull() BooleanExpression            { return isNot(sfe, nil) }
75func (sfe sqlFunctionExpression) IsTrue() BooleanExpression               { return is(sfe, true) }
76func (sfe sqlFunctionExpression) IsNotTrue() BooleanExpression            { return isNot(sfe, true) }
77func (sfe sqlFunctionExpression) IsFalse() BooleanExpression              { return is(sfe, false) }
78func (sfe sqlFunctionExpression) IsNotFalse() BooleanExpression           { return isNot(sfe, false) }
79
80func (sfe sqlFunctionExpression) Over(we WindowExpression) SQLWindowFunctionExpression {
81	return NewSQLWindowFunctionExpression(sfe, nil, we)
82}
83
84func (sfe sqlFunctionExpression) OverName(windowName IdentifierExpression) SQLWindowFunctionExpression {
85	return NewSQLWindowFunctionExpression(sfe, windowName, nil)
86}
87
88func (sfe sqlFunctionExpression) Asc() OrderedExpression  { return asc(sfe) }
89func (sfe sqlFunctionExpression) Desc() OrderedExpression { return desc(sfe) }
90