jet/sqlbuilder/numeric_expression.go

113 lines
3.3 KiB
Go
Raw Normal View History

2019-03-31 14:07:58 +02:00
package sqlbuilder
2019-05-13 12:33:11 +02:00
import "errors"
2019-05-07 19:06:21 +02:00
type numericExpression interface {
expression
2019-03-31 14:07:58 +02:00
2019-05-29 14:03:38 +02:00
EQ(expression numericExpression) boolExpression
NOT_EQ(expression numericExpression) boolExpression
LT(rhs numericExpression) boolExpression
LT_EQ(rhs numericExpression) boolExpression
GT(rhs numericExpression) boolExpression
GT_EQ(rhs numericExpression) boolExpression
ADD(expression numericExpression) numericExpression
SUB(expression numericExpression) numericExpression
MUL(expression numericExpression) numericExpression
DIV(expression numericExpression) numericExpression
2019-03-31 14:07:58 +02:00
}
type numericInterfaceImpl struct {
2019-05-07 19:06:21 +02:00
parent numericExpression
2019-03-31 14:07:58 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) EQ(expression numericExpression) boolExpression {
return EQ(n.parent, expression)
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) NOT_EQ(expression numericExpression) boolExpression {
return NOT_EQ(n.parent, expression)
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) GT(expression numericExpression) boolExpression {
return GT(n.parent, expression)
2019-03-31 14:07:58 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) GT_EQ(expression numericExpression) boolExpression {
return GT_EQ(n.parent, expression)
2019-05-20 17:37:55 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) LT(expression numericExpression) boolExpression {
return LT(n.parent, expression)
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) LT_EQ(expression numericExpression) boolExpression {
return LT_EQ(n.parent, expression)
2019-03-31 14:07:58 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) ADD(expression numericExpression) numericExpression {
2019-05-06 12:42:15 +02:00
return newBinaryNumericExpression(n.parent, expression, "+")
2019-03-31 14:07:58 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) SUB(expression numericExpression) numericExpression {
2019-05-06 12:42:15 +02:00
return newBinaryNumericExpression(n.parent, expression, "-")
2019-03-31 14:07:58 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) MUL(expression numericExpression) numericExpression {
2019-05-06 12:42:15 +02:00
return newBinaryNumericExpression(n.parent, expression, "*")
2019-03-31 14:07:58 +02:00
}
2019-05-29 14:03:38 +02:00
func (n *numericInterfaceImpl) DIV(expression numericExpression) numericExpression {
2019-05-06 12:42:15 +02:00
return newBinaryNumericExpression(n.parent, expression, "/")
2019-03-31 14:07:58 +02:00
}
//---------------------------------------------------//
type binaryNumericExpression struct {
expressionInterfaceImpl
numericInterfaceImpl
2019-05-29 14:03:38 +02:00
binaryOpExpression
2019-03-31 14:07:58 +02:00
}
2019-05-07 19:06:21 +02:00
func newBinaryNumericExpression(lhs, rhs expression, operator string) numericExpression {
2019-03-31 14:07:58 +02:00
numericExpression := binaryNumericExpression{}
2019-05-29 14:03:38 +02:00
numericExpression.binaryOpExpression = newBinaryExpression(lhs, rhs, operator)
2019-03-31 14:07:58 +02:00
numericExpression.expressionInterfaceImpl.parent = &numericExpression
numericExpression.numericInterfaceImpl.parent = &numericExpression
return &numericExpression
}
//---------------------------------------------------//
type numericExpressionWrapper struct {
expressionInterfaceImpl
numericInterfaceImpl
2019-05-07 19:06:21 +02:00
expression expression
}
2019-05-07 19:06:21 +02:00
func newNumericExpressionWrap(expression expression) numericExpression {
numericExpressionWrap := numericExpressionWrapper{}
numericExpressionWrap.expression = expression
numericExpressionWrap.expressionInterfaceImpl.parent = &numericExpressionWrap
numericExpressionWrap.numericInterfaceImpl.parent = &numericExpressionWrap
return &numericExpressionWrap
}
2019-05-13 12:33:11 +02:00
func (n *numericExpressionWrapper) serialize(statement statementType, out *queryData) error {
if n == nil {
return errors.New("Numeric expression wrapper is nil. ")
}
2019-05-12 18:15:23 +02:00
//out.writeString("(")
2019-05-13 12:33:11 +02:00
err := n.expression.serialize(statement, out)
2019-05-12 18:15:23 +02:00
//out.writeString(")")
return err
}