init - add project files
This commit is contained in:
146
tools/jet-2.12.0/internal/jet/window_expression.go
Normal file
146
tools/jet-2.12.0/internal/jet/window_expression.go
Normal file
@@ -0,0 +1,146 @@
|
||||
package jet
|
||||
|
||||
type commonWindowImpl struct {
|
||||
expression Expression
|
||||
window Window
|
||||
}
|
||||
|
||||
func (w *commonWindowImpl) over(window ...Window) {
|
||||
if len(window) > 0 {
|
||||
w.window = window[0]
|
||||
} else {
|
||||
w.window = newWindowImpl(nil)
|
||||
}
|
||||
}
|
||||
|
||||
func (w *commonWindowImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
w.expression.serialize(statement, out)
|
||||
if w.window != nil {
|
||||
out.WriteString("OVER")
|
||||
w.window.serialize(statement, out, FallTrough(options)...)
|
||||
}
|
||||
}
|
||||
|
||||
// --------------------------------------
|
||||
|
||||
type windowExpression interface {
|
||||
Expression
|
||||
OVER(window ...Window) Expression
|
||||
}
|
||||
|
||||
func newWindowExpression(Exp Expression) windowExpression {
|
||||
newExp := &windowExpressionImpl{
|
||||
Expression: Exp,
|
||||
}
|
||||
|
||||
newExp.commonWindowImpl.expression = Exp
|
||||
|
||||
return newExp
|
||||
}
|
||||
|
||||
type windowExpressionImpl struct {
|
||||
Expression
|
||||
commonWindowImpl
|
||||
}
|
||||
|
||||
func (f *windowExpressionImpl) OVER(window ...Window) Expression {
|
||||
f.commonWindowImpl.over(window...)
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *windowExpressionImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
f.commonWindowImpl.serialize(statement, out, FallTrough(options)...)
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
|
||||
type floatWindowExpression interface {
|
||||
FloatExpression
|
||||
OVER(window ...Window) FloatExpression
|
||||
}
|
||||
|
||||
func newFloatWindowExpression(floatExp FloatExpression) floatWindowExpression {
|
||||
newExp := &floatWindowExpressionImpl{
|
||||
FloatExpression: floatExp,
|
||||
}
|
||||
|
||||
newExp.commonWindowImpl.expression = floatExp
|
||||
|
||||
return newExp
|
||||
}
|
||||
|
||||
type floatWindowExpressionImpl struct {
|
||||
FloatExpression
|
||||
commonWindowImpl
|
||||
}
|
||||
|
||||
func (f *floatWindowExpressionImpl) OVER(window ...Window) FloatExpression {
|
||||
f.commonWindowImpl.over(window...)
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *floatWindowExpressionImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
f.commonWindowImpl.serialize(statement, out, FallTrough(options)...)
|
||||
}
|
||||
|
||||
// ------------------------------------------------
|
||||
|
||||
type integerWindowExpression interface {
|
||||
IntegerExpression
|
||||
OVER(window ...Window) IntegerExpression
|
||||
}
|
||||
|
||||
func newIntegerWindowExpression(intExp IntegerExpression) integerWindowExpression {
|
||||
newExp := &integerWindowExpressionImpl{
|
||||
IntegerExpression: intExp,
|
||||
}
|
||||
|
||||
newExp.commonWindowImpl.expression = intExp
|
||||
|
||||
return newExp
|
||||
}
|
||||
|
||||
type integerWindowExpressionImpl struct {
|
||||
IntegerExpression
|
||||
commonWindowImpl
|
||||
}
|
||||
|
||||
func (f *integerWindowExpressionImpl) OVER(window ...Window) IntegerExpression {
|
||||
f.commonWindowImpl.over(window...)
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *integerWindowExpressionImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
f.commonWindowImpl.serialize(statement, out, FallTrough(options)...)
|
||||
}
|
||||
|
||||
// ------------------------------------------------
|
||||
|
||||
type boolWindowExpression interface {
|
||||
BoolExpression
|
||||
OVER(window ...Window) BoolExpression
|
||||
}
|
||||
|
||||
func newBoolWindowExpression(boolExp BoolExpression) boolWindowExpression {
|
||||
newExp := &boolWindowExpressionImpl{
|
||||
BoolExpression: boolExp,
|
||||
}
|
||||
|
||||
newExp.commonWindowImpl.expression = boolExp
|
||||
|
||||
return newExp
|
||||
}
|
||||
|
||||
type boolWindowExpressionImpl struct {
|
||||
BoolExpression
|
||||
commonWindowImpl
|
||||
}
|
||||
|
||||
func (f *boolWindowExpressionImpl) OVER(window ...Window) BoolExpression {
|
||||
f.commonWindowImpl.over(window...)
|
||||
return f
|
||||
}
|
||||
|
||||
func (f *boolWindowExpressionImpl) serialize(statement StatementType, out *SQLBuilder, options ...SerializeOption) {
|
||||
f.commonWindowImpl.serialize(statement, out, FallTrough(options)...)
|
||||
}
|
||||
Reference in New Issue
Block a user