Skip to content

Commit 012e92c

Browse files
authored
Merge pull request #607 from 1llu5ion/fix/606-window-expression-arithmetic
Fix chained operators on window expressions
2 parents 3f68c5d + 4d071ae commit 012e92c

4 files changed

Lines changed: 35 additions & 0 deletions

File tree

internal/jet/bool_expression.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ type boolExpressionWrapper struct {
101101
Expression
102102
}
103103

104+
func (b *boolExpressionWrapper) setRoot(root Expression) {
105+
b.Expression.setRoot(root)
106+
if boolRoot, ok := root.(BoolExpression); ok {
107+
b.boolInterfaceImpl.root = boolRoot
108+
}
109+
}
110+
104111
func newBoolExpressionWrap(expression Expression) BoolExpression {
105112
boolExpressionWrap := &boolExpressionWrapper{Expression: expression}
106113
boolExpressionWrap.boolInterfaceImpl.root = boolExpressionWrap

internal/jet/float_expression.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,13 @@ type floatExpressionWrapper struct {
101101
Expression
102102
}
103103

104+
func (f *floatExpressionWrapper) setRoot(root Expression) {
105+
f.Expression.setRoot(root)
106+
if floatRoot, ok := root.(FloatExpression); ok {
107+
f.floatInterfaceImpl.root = floatRoot
108+
}
109+
}
110+
104111
func newFloatExpressionWrap(expression Expression) FloatExpression {
105112
floatExpressionWrap := &floatExpressionWrapper{Expression: expression}
106113
floatExpressionWrap.floatInterfaceImpl.root = floatExpressionWrap

internal/jet/integer_expression.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,13 @@ type integerExpressionWrapper struct {
140140
Expression
141141
}
142142

143+
func (i *integerExpressionWrapper) setRoot(root Expression) {
144+
i.Expression.setRoot(root)
145+
if integerRoot, ok := root.(IntegerExpression); ok {
146+
i.integerInterfaceImpl.root = integerRoot
147+
}
148+
}
149+
143150
func newIntExpressionWrap(expression Expression) IntegerExpression {
144151
intExpressionWrap := &integerExpressionWrapper{Expression: expression}
145152
intExpressionWrap.integerInterfaceImpl.root = intExpressionWrap

internal/jet/window_func_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,17 @@ func TestWindowFunctions(t *testing.T) {
1919
assertClauseSerialize(t, ORDER_BY(table1Col1).RANGE(PRECEDING(UNBOUNDED), CURRENT_ROW),
2020
"(ORDER BY table1.col1 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)")
2121
}
22+
23+
func TestWindowFunctionChainedOperators(t *testing.T) {
24+
assertClauseSerialize(t,
25+
ROW_NUMBER().OVER(ORDER_BY(table1ColInt)).ADD(Int(1)),
26+
"(ROW_NUMBER() OVER (ORDER BY table1.col_int) + $1)", int64(1))
27+
assertClauseSerialize(t,
28+
SUMf(table1ColFloat).OVER(PARTITION_BY(table1ColInt)).SUB(
29+
SUMf(table2ColFloat).OVER(PARTITION_BY(table1ColInt)),
30+
),
31+
"(SUM(table1.col_float) OVER (PARTITION BY table1.col_int) - SUM(table2.col_float) OVER (PARTITION BY table1.col_int))")
32+
assertClauseSerialize(t,
33+
BOOL_AND(table1ColBool).OVER(PARTITION_BY(table1ColInt)).AND(table2ColBool),
34+
"(BOOL_AND(table1.col_bool) OVER (PARTITION BY table1.col_int) AND table2.col_bool)")
35+
}

0 commit comments

Comments
 (0)