jet/string_expression.go

114 lines
3.3 KiB
Go
Raw Normal View History

2019-06-21 13:56:57 +02:00
package jet
type StringExpression interface {
2019-06-04 12:10:23 +02:00
Expression
EQ(rhs StringExpression) BoolExpression
NOT_EQ(rhs StringExpression) BoolExpression
IS_DISTINCT_FROM(rhs StringExpression) BoolExpression
IS_NOT_DISTINCT_FROM(rhs StringExpression) BoolExpression
LT(rhs StringExpression) BoolExpression
LT_EQ(rhs StringExpression) BoolExpression
GT(rhs StringExpression) BoolExpression
GT_EQ(rhs StringExpression) BoolExpression
2019-06-04 12:10:23 +02:00
CONCAT(rhs Expression) StringExpression
LIKE(pattern StringExpression) BoolExpression
NOT_LIKE(pattern StringExpression) BoolExpression
SIMILAR_TO(pattern StringExpression) BoolExpression
NOT_SIMILAR_TO(pattern StringExpression) BoolExpression
}
type stringInterfaceImpl struct {
parent StringExpression
}
func (s *stringInterfaceImpl) EQ(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return eq(s.parent, rhs)
}
func (s *stringInterfaceImpl) NOT_EQ(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return notEq(s.parent, rhs)
}
func (s *stringInterfaceImpl) IS_DISTINCT_FROM(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return isDistinctFrom(s.parent, rhs)
}
func (s *stringInterfaceImpl) IS_NOT_DISTINCT_FROM(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return isNotDistinctFrom(s.parent, rhs)
}
func (s *stringInterfaceImpl) GT(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return gt(s.parent, rhs)
}
2019-04-04 13:07:21 +02:00
func (s *stringInterfaceImpl) GT_EQ(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return gtEq(s.parent, rhs)
2019-05-29 14:03:38 +02:00
}
func (s *stringInterfaceImpl) LT(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return lt(s.parent, rhs)
2019-05-29 14:03:38 +02:00
}
func (s *stringInterfaceImpl) LT_EQ(rhs StringExpression) BoolExpression {
2019-06-27 19:55:21 +02:00
return ltEq(s.parent, rhs)
2019-04-04 13:07:21 +02:00
}
2019-06-04 12:10:23 +02:00
func (s *stringInterfaceImpl) CONCAT(rhs Expression) StringExpression {
return newBinaryStringExpression(s.parent, rhs, "||")
}
func (s *stringInterfaceImpl) LIKE(pattern StringExpression) BoolExpression {
2019-07-15 13:06:06 +02:00
return newBinaryBoolOperator(s.parent, pattern, "LIKE")
}
func (s *stringInterfaceImpl) NOT_LIKE(pattern StringExpression) BoolExpression {
2019-07-15 13:06:06 +02:00
return newBinaryBoolOperator(s.parent, pattern, "NOT LIKE")
}
func (s *stringInterfaceImpl) SIMILAR_TO(pattern StringExpression) BoolExpression {
2019-07-15 13:06:06 +02:00
return newBinaryBoolOperator(s.parent, pattern, "SIMILAR TO")
}
func (s *stringInterfaceImpl) NOT_SIMILAR_TO(pattern StringExpression) BoolExpression {
2019-07-15 13:06:06 +02:00
return newBinaryBoolOperator(s.parent, pattern, "NOT SIMILAR TO")
}
//---------------------------------------------------//
type binaryStringExpression struct {
expressionInterfaceImpl
stringInterfaceImpl
binaryOpExpression
}
2019-06-04 12:10:23 +02:00
func newBinaryStringExpression(lhs, rhs Expression, operator string) StringExpression {
boolExpression := binaryStringExpression{}
boolExpression.binaryOpExpression = newBinaryExpression(lhs, rhs, operator)
boolExpression.expressionInterfaceImpl.parent = &boolExpression
boolExpression.stringInterfaceImpl.parent = &boolExpression
return &boolExpression
}
2019-06-07 14:23:14 +02:00
//---------------------------------------------------//
type stringExpressionWrapper struct {
stringInterfaceImpl
Expression
}
func newStringExpressionWrap(expression Expression) StringExpression {
stringExpressionWrap := stringExpressionWrapper{Expression: expression}
stringExpressionWrap.stringInterfaceImpl.parent = &stringExpressionWrap
return &stringExpressionWrap
}
func StringExp(expression Expression) StringExpression {
return newStringExpressionWrap(expression)
}