82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
package sqlbuilder
|
|
|
|
type IntegerExpression interface {
|
|
NumericExpression
|
|
|
|
//AddInt(value int) IntegerExpression
|
|
//AddInt64(value int) IntegerExpression
|
|
|
|
BitAnd(expression IntegerExpression) IntegerExpression
|
|
BitOr(expression IntegerExpression) IntegerExpression
|
|
BitXor(expression IntegerExpression) IntegerExpression
|
|
BitNot() IntegerExpression
|
|
}
|
|
|
|
type integerInterfaceImpl struct {
|
|
parent IntegerExpression
|
|
}
|
|
|
|
//func (i *integerInterfaceImpl) AddInt(expression IntegerExpression) IntegerExpression {
|
|
// return NewBinaryIntegerExpression(i.parent, expression, " & ")
|
|
//}
|
|
//
|
|
//func (i *integerInterfaceImpl) AddInt64(expression IntegerExpression) IntegerExpression {
|
|
// return NewBinaryIntegerExpression(i.parent, expression, " & ")
|
|
//}
|
|
|
|
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
|
|
|
|
binaryExpression
|
|
}
|
|
|
|
func NewBinaryIntegerExpression(lhs, rhs IntegerExpression, operator string) IntegerExpression {
|
|
integerExpression := binaryIntegerExpression{}
|
|
|
|
integerExpression.expressionInterfaceImpl.parent = &integerExpression
|
|
integerExpression.numericInterfaceImpl.parent = &integerExpression
|
|
integerExpression.integerInterfaceImpl.parent = &integerExpression
|
|
|
|
integerExpression.binaryExpression = newBinaryExpression(lhs, rhs, []byte(operator))
|
|
|
|
return &integerExpression
|
|
}
|
|
|
|
//---------------------------------------------------//
|
|
type prefixIntegerExpression struct {
|
|
expressionInterfaceImpl
|
|
numericInterfaceImpl
|
|
integerInterfaceImpl
|
|
|
|
prefixExpression
|
|
}
|
|
|
|
func NewPrefixIntegerExpression(expression IntegerExpression, operator string) IntegerExpression {
|
|
integerExpression := prefixIntegerExpression{}
|
|
integerExpression.prefixExpression = newPrefixExpression(expression, []byte(operator))
|
|
|
|
integerExpression.expressionInterfaceImpl.parent = &integerExpression
|
|
integerExpression.numericInterfaceImpl.parent = &integerExpression
|
|
integerExpression.integerInterfaceImpl.parent = &integerExpression
|
|
|
|
return &integerExpression
|
|
}
|