71 lines
2.2 KiB
Go
71 lines
2.2 KiB
Go
package sqlbuilder
|
|
|
|
type integerExpression interface {
|
|
numericExpression
|
|
|
|
BitAnd(expression integerExpression) integerExpression
|
|
BitOr(expression integerExpression) integerExpression
|
|
BitXor(expression integerExpression) integerExpression
|
|
BitNot() integerExpression
|
|
}
|
|
|
|
type integerInterfaceImpl struct {
|
|
parent integerExpression
|
|
}
|
|
|
|
func (i *integerInterfaceImpl) BitAnd(expression integerExpression) integerExpression {
|
|
return NewBinaryIntegerExpression(i.parent, expression, " & ")
|
|
}
|
|
|
|
func (i *integerInterfaceImpl) BitOr(expression integerExpression) integerExpression {
|
|
return NewBinaryIntegerExpression(i.parent, expression, " | ")
|
|
}
|
|
|
|
func (i *integerInterfaceImpl) BitXor(expression integerExpression) integerExpression {
|
|
return NewBinaryIntegerExpression(i.parent, expression, " # ")
|
|
}
|
|
|
|
func (i *integerInterfaceImpl) BitNot() integerExpression {
|
|
return NewPrefixIntegerExpression(i.parent, " ~")
|
|
}
|
|
|
|
//---------------------------------------------------//
|
|
type binaryIntegerExpression struct {
|
|
expressionInterfaceImpl
|
|
numericInterfaceImpl
|
|
integerInterfaceImpl
|
|
|
|
binaryOpExpression
|
|
}
|
|
|
|
func NewBinaryIntegerExpression(lhs, rhs integerExpression, operator string) integerExpression {
|
|
integerExpression := binaryIntegerExpression{}
|
|
|
|
integerExpression.expressionInterfaceImpl.parent = &integerExpression
|
|
integerExpression.numericInterfaceImpl.parent = &integerExpression
|
|
integerExpression.integerInterfaceImpl.parent = &integerExpression
|
|
|
|
integerExpression.binaryOpExpression = newBinaryExpression(lhs, rhs, operator)
|
|
|
|
return &integerExpression
|
|
}
|
|
|
|
//---------------------------------------------------//
|
|
type prefixIntegerExpression struct {
|
|
expressionInterfaceImpl
|
|
numericInterfaceImpl
|
|
integerInterfaceImpl
|
|
|
|
prefixOpExpression
|
|
}
|
|
|
|
func NewPrefixIntegerExpression(expression integerExpression, operator string) integerExpression {
|
|
integerExpression := prefixIntegerExpression{}
|
|
integerExpression.prefixOpExpression = newPrefixExpression(expression, operator)
|
|
|
|
integerExpression.expressionInterfaceImpl.parent = &integerExpression
|
|
integerExpression.numericInterfaceImpl.parent = &integerExpression
|
|
integerExpression.integerInterfaceImpl.parent = &integerExpression
|
|
|
|
return &integerExpression
|
|
}
|