2019-06-21 13:56:57 +02:00
|
|
|
package jet
|
2019-03-15 22:02:59 +01:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
type BoolExpression interface {
|
2019-06-04 12:10:23 +02:00
|
|
|
Expression
|
2019-03-31 09:17:28 +02:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
EQ(expression BoolExpression) BoolExpression
|
|
|
|
|
NOT_EQ(expression BoolExpression) BoolExpression
|
|
|
|
|
IS_DISTINCT_FROM(rhs BoolExpression) BoolExpression
|
|
|
|
|
IS_NOT_DISTINCT_FROM(rhs BoolExpression) BoolExpression
|
2019-03-31 14:07:58 +02:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
IS_TRUE() BoolExpression
|
|
|
|
|
IS_NOT_TRUE() BoolExpression
|
|
|
|
|
IS_FALSE() BoolExpression
|
|
|
|
|
IS_NOT_FALSE() BoolExpression
|
|
|
|
|
IS_UNKNOWN() BoolExpression
|
|
|
|
|
IS_NOT_UNKNOWN() BoolExpression
|
2019-05-29 14:03:38 +02:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
AND(expression BoolExpression) BoolExpression
|
|
|
|
|
OR(expression BoolExpression) BoolExpression
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type boolInterfaceImpl struct {
|
2019-05-31 12:59:57 +02:00
|
|
|
parent BoolExpression
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) EQ(expression BoolExpression) BoolExpression {
|
2019-05-29 14:03:38 +02:00
|
|
|
return EQ(b.parent, expression)
|
2019-03-31 14:07:58 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) NOT_EQ(expression BoolExpression) BoolExpression {
|
2019-05-29 14:03:38 +02:00
|
|
|
return NOT_EQ(b.parent, expression)
|
2019-03-31 14:07:58 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_DISTINCT_FROM(rhs BoolExpression) BoolExpression {
|
2019-05-30 14:49:36 +02:00
|
|
|
return IS_DISTINCT_FROM(b.parent, rhs)
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_NOT_DISTINCT_FROM(rhs BoolExpression) BoolExpression {
|
2019-05-30 14:49:36 +02:00
|
|
|
return IS_NOT_DISTINCT_FROM(b.parent, rhs)
|
|
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) AND(expression BoolExpression) BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newBinaryBoolExpression(b.parent, expression, "AND")
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) OR(expression BoolExpression) BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newBinaryBoolExpression(b.parent, expression, "OR")
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
2019-05-29 14:03:38 +02:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_TRUE() BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newPostifxBoolExpression(b.parent, "IS TRUE")
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_NOT_TRUE() BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newPostifxBoolExpression(b.parent, "IS NOT TRUE")
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_FALSE() BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newPostifxBoolExpression(b.parent, "IS FALSE")
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_NOT_FALSE() BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newPostifxBoolExpression(b.parent, "IS NOT FALSE")
|
2019-05-29 14:03:38 +02:00
|
|
|
}
|
2019-03-31 09:17:28 +02:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_UNKNOWN() BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newPostifxBoolExpression(b.parent, "IS UNKNOWN")
|
2019-05-29 14:03:38 +02:00
|
|
|
}
|
2019-03-31 09:17:28 +02:00
|
|
|
|
2019-05-31 12:59:57 +02:00
|
|
|
func (b *boolInterfaceImpl) IS_NOT_UNKNOWN() BoolExpression {
|
2019-06-05 17:15:20 +02:00
|
|
|
return newPostifxBoolExpression(b.parent, "IS NOT UNKNOWN")
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------//
|
|
|
|
|
type binaryBoolExpression struct {
|
2019-03-31 14:07:58 +02:00
|
|
|
expressionInterfaceImpl
|
2019-03-31 09:17:28 +02:00
|
|
|
boolInterfaceImpl
|
|
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
binaryOpExpression
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-06-04 12:10:23 +02:00
|
|
|
func newBinaryBoolExpression(lhs, rhs Expression, operator string) BoolExpression {
|
2019-03-31 09:17:28 +02:00
|
|
|
boolExpression := binaryBoolExpression{}
|
|
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
boolExpression.binaryOpExpression = newBinaryExpression(lhs, rhs, operator)
|
2019-03-31 14:07:58 +02:00
|
|
|
boolExpression.expressionInterfaceImpl.parent = &boolExpression
|
2019-03-31 09:17:28 +02:00
|
|
|
boolExpression.boolInterfaceImpl.parent = &boolExpression
|
|
|
|
|
|
|
|
|
|
return &boolExpression
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//---------------------------------------------------//
|
|
|
|
|
type prefixBoolExpression struct {
|
2019-03-31 14:07:58 +02:00
|
|
|
expressionInterfaceImpl
|
2019-03-31 09:17:28 +02:00
|
|
|
boolInterfaceImpl
|
|
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
prefixOpExpression
|
2019-03-31 09:17:28 +02:00
|
|
|
}
|
|
|
|
|
|
2019-06-04 12:10:23 +02:00
|
|
|
func newPrefixBoolExpression(expression Expression, operator string) BoolExpression {
|
2019-05-29 14:03:38 +02:00
|
|
|
exp := prefixBoolExpression{}
|
|
|
|
|
exp.prefixOpExpression = newPrefixExpression(expression, operator)
|
2019-03-31 09:17:28 +02:00
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
exp.expressionInterfaceImpl.parent = &exp
|
|
|
|
|
exp.boolInterfaceImpl.parent = &exp
|
2019-03-15 22:02:59 +01:00
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
return &exp
|
2019-03-15 22:02:59 +01:00
|
|
|
}
|
|
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
//---------------------------------------------------//
|
|
|
|
|
type postfixBoolOpExpression struct {
|
|
|
|
|
expressionInterfaceImpl
|
|
|
|
|
boolInterfaceImpl
|
2019-03-15 22:02:59 +01:00
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
postfixOpExpression
|
2019-03-15 22:02:59 +01:00
|
|
|
}
|
|
|
|
|
|
2019-06-04 12:10:23 +02:00
|
|
|
func newPostifxBoolExpression(expression Expression, operator string) BoolExpression {
|
2019-05-29 14:03:38 +02:00
|
|
|
exp := postfixBoolOpExpression{}
|
|
|
|
|
exp.postfixOpExpression = newPostfixOpExpression(expression, operator)
|
2019-03-15 22:02:59 +01:00
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
exp.expressionInterfaceImpl.parent = &exp
|
|
|
|
|
exp.boolInterfaceImpl.parent = &exp
|
2019-03-15 22:02:59 +01:00
|
|
|
|
2019-05-29 14:03:38 +02:00
|
|
|
return &exp
|
2019-03-15 22:02:59 +01:00
|
|
|
}
|
2019-06-07 14:23:14 +02:00
|
|
|
|
|
|
|
|
//---------------------------------------------------//
|
|
|
|
|
|
|
|
|
|
type boolExpressionWrapper struct {
|
|
|
|
|
boolInterfaceImpl
|
|
|
|
|
Expression
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func newBoolExpressionWrap(expression Expression) BoolExpression {
|
|
|
|
|
boolExpressionWrap := boolExpressionWrapper{Expression: expression}
|
|
|
|
|
boolExpressionWrap.boolInterfaceImpl.parent = &boolExpressionWrap
|
|
|
|
|
return &boolExpressionWrap
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func BoolExp(expression Expression) BoolExpression {
|
|
|
|
|
return newBoolExpressionWrap(expression)
|
|
|
|
|
}
|