jet/sqlbuilder/integer_expression.go

131 lines
4 KiB
Go
Raw Normal View History

2019-03-31 14:07:58 +02:00
package sqlbuilder
type IntegerExpression interface {
expression
EQ(rhs IntegerExpression) BoolExpression
NOT_EQ(rhs IntegerExpression) BoolExpression
IS_DISTINCT_FROM(rhs IntegerExpression) BoolExpression
IS_NOT_DISTINCT_FROM(rhs IntegerExpression) BoolExpression
LT(rhs IntegerExpression) BoolExpression
LT_EQ(rhs IntegerExpression) BoolExpression
GT(rhs IntegerExpression) BoolExpression
GT_EQ(rhs IntegerExpression) BoolExpression
ADD(rhs IntegerExpression) IntegerExpression
SUB(rhs IntegerExpression) IntegerExpression
MUL(rhs IntegerExpression) IntegerExpression
DIV(rhs IntegerExpression) IntegerExpression
BitAnd(expression IntegerExpression) IntegerExpression
BitOr(expression IntegerExpression) IntegerExpression
BitXor(expression IntegerExpression) IntegerExpression
BitNot() IntegerExpression
2019-03-31 14:07:58 +02:00
}
type integerInterfaceImpl struct {
parent IntegerExpression
}
func (i *integerInterfaceImpl) EQ(rhs IntegerExpression) BoolExpression {
return EQ(i.parent, rhs)
}
func (i *integerInterfaceImpl) NOT_EQ(rhs IntegerExpression) BoolExpression {
return NOT_EQ(i.parent, rhs)
}
func (i *integerInterfaceImpl) IS_DISTINCT_FROM(rhs IntegerExpression) BoolExpression {
return IS_DISTINCT_FROM(i.parent, rhs)
}
func (i *integerInterfaceImpl) IS_NOT_DISTINCT_FROM(rhs IntegerExpression) BoolExpression {
return IS_NOT_DISTINCT_FROM(i.parent, rhs)
}
func (i *integerInterfaceImpl) GT(rhs IntegerExpression) BoolExpression {
return GT(i.parent, rhs)
}
func (i *integerInterfaceImpl) GT_EQ(rhs IntegerExpression) BoolExpression {
return GT_EQ(i.parent, rhs)
}
func (i *integerInterfaceImpl) LT(expression IntegerExpression) BoolExpression {
return LT(i.parent, expression)
}
func (i *integerInterfaceImpl) LT_EQ(expression IntegerExpression) BoolExpression {
return LT_EQ(i.parent, expression)
}
func (i *integerInterfaceImpl) ADD(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "+")
}
func (i *integerInterfaceImpl) SUB(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "-")
}
func (i *integerInterfaceImpl) MUL(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "*")
}
func (i *integerInterfaceImpl) DIV(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "/")
2019-03-31 14:07:58 +02:00
}
func (i *integerInterfaceImpl) BitAnd(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "&")
2019-03-31 14:07:58 +02:00
}
func (i *integerInterfaceImpl) BitOr(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "|")
2019-03-31 14:07:58 +02:00
}
func (i *integerInterfaceImpl) BitXor(expression IntegerExpression) IntegerExpression {
return NewBinaryIntegerExpression(i.parent, expression, "#")
2019-03-31 14:07:58 +02:00
}
func (i *integerInterfaceImpl) BitNot() IntegerExpression {
return NewPrefixIntegerOpExpression(i.parent, "~")
2019-03-31 14:07:58 +02:00
}
//---------------------------------------------------//
type binaryIntegerExpression struct {
expressionInterfaceImpl
integerInterfaceImpl
2019-05-29 14:03:38 +02:00
binaryOpExpression
2019-03-31 14:07:58 +02:00
}
func NewBinaryIntegerExpression(lhs, rhs IntegerExpression, operator string) IntegerExpression {
2019-03-31 14:07:58 +02:00
integerExpression := binaryIntegerExpression{}
integerExpression.expressionInterfaceImpl.parent = &integerExpression
integerExpression.integerInterfaceImpl.parent = &integerExpression
2019-05-29 14:03:38 +02:00
integerExpression.binaryOpExpression = newBinaryExpression(lhs, rhs, operator)
2019-03-31 14:07:58 +02:00
return &integerExpression
}
//---------------------------------------------------//
type prefixIntegerOpExpression struct {
2019-03-31 14:07:58 +02:00
expressionInterfaceImpl
integerInterfaceImpl
2019-05-29 14:03:38 +02:00
prefixOpExpression
2019-03-31 14:07:58 +02:00
}
func NewPrefixIntegerOpExpression(expression IntegerExpression, operator string) IntegerExpression {
integerExpression := prefixIntegerOpExpression{}
2019-05-29 14:03:38 +02:00
integerExpression.prefixOpExpression = newPrefixExpression(expression, operator)
2019-03-31 14:07:58 +02:00
integerExpression.expressionInterfaceImpl.parent = &integerExpression
integerExpression.integerInterfaceImpl.parent = &integerExpression
return &integerExpression
}