1616
1717import typing
1818
19+ import pandas as pd
1920import sqlglot .expressions as sge
2021
2122from bigframes import dtypes
@@ -46,18 +47,22 @@ def _(
4647 return apply_window_if_present (sge .func ("COUNT" , column .expr ), window )
4748
4849
49- @UNARY_OP_REGISTRATION .register (agg_ops .SumOp )
50+ @UNARY_OP_REGISTRATION .register (agg_ops .MaxOp )
5051def _ (
51- op : agg_ops .SumOp ,
52+ op : agg_ops .MaxOp ,
5253 column : typed_expr .TypedExpr ,
5354 window : typing .Optional [window_spec .WindowSpec ] = None ,
5455) -> sge .Expression :
55- expr = column .expr
56- if column .dtype == dtypes .BOOL_DTYPE :
57- expr = sge .Cast (this = column .expr , to = "INT64" )
58- # Will be null if all inputs are null. Pandas defaults to zero sum though.
59- expr = apply_window_if_present (sge .func ("SUM" , expr ), window )
60- return sge .func ("IFNULL" , expr , ir ._literal (0 , column .dtype ))
56+ return apply_window_if_present (sge .func ("MAX" , column .expr ), window )
57+
58+
59+ @UNARY_OP_REGISTRATION .register (agg_ops .MinOp )
60+ def _ (
61+ op : agg_ops .MinOp ,
62+ column : typed_expr .TypedExpr ,
63+ window : typing .Optional [window_spec .WindowSpec ] = None ,
64+ ) -> sge .Expression :
65+ return apply_window_if_present (sge .func ("MIN" , column .expr ), window )
6166
6267
6368@UNARY_OP_REGISTRATION .register (agg_ops .SizeUnaryOp )
@@ -67,3 +72,20 @@ def _(
6772 window : typing .Optional [window_spec .WindowSpec ] = None ,
6873) -> sge .Expression :
6974 return apply_window_if_present (sge .func ("COUNT" , sge .convert (1 )), window )
75+
76+
77+ @UNARY_OP_REGISTRATION .register (agg_ops .SumOp )
78+ def _ (
79+ op : agg_ops .SumOp ,
80+ column : typed_expr .TypedExpr ,
81+ window : typing .Optional [window_spec .WindowSpec ] = None ,
82+ ) -> sge .Expression :
83+ expr = column .expr
84+ if column .dtype == dtypes .BOOL_DTYPE :
85+ expr = sge .Cast (this = column .expr , to = "INT64" )
86+
87+ expr = apply_window_if_present (sge .func ("SUM" , expr ), window )
88+
89+ # Will be null if all inputs are null. Pandas defaults to zero sum though.
90+ zero = pd .to_timedelta (0 ) if column .dtype == dtypes .TIMEDELTA_DTYPE else 0
91+ return sge .func ("IFNULL" , expr , ir ._literal (zero , column .dtype ))
0 commit comments