2020from bigframes import dtypes
2121from bigframes import operations as ops
2222import bigframes .core .compile .sqlglot .expressions .constants as constants
23- from bigframes .core .compile .sqlglot .expressions .op_registration import OpRegistration
2423from bigframes .core .compile .sqlglot .expressions .typed_expr import TypedExpr
24+ import bigframes .core .compile .sqlglot .scalar_compiler as scalar_compiler
2525
26- BINARY_OP_REGISTRATION = OpRegistration ()
26+ register_binary_op = scalar_compiler . scalar_op_compiler . register_binary_op
2727
28-
29- def compile (op : ops .BinaryOp , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
30- return BINARY_OP_REGISTRATION [op ](op , left , right )
28+ # TODO: add parenthesize for operators
3129
3230
33- # TODO: add parenthesize for operators
34- @BINARY_OP_REGISTRATION .register (ops .add_op )
35- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
31+ @register_binary_op (ops .add_op )
32+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
3633 if left .dtype == dtypes .STRING_DTYPE and right .dtype == dtypes .STRING_DTYPE :
3734 # String addition
3835 return sge .Concat (expressions = [left .expr , right .expr ])
@@ -66,15 +63,15 @@ def _(op, left: TypedExpr, right: TypedExpr) -> sge.Expression:
6663 )
6764
6865
69- @BINARY_OP_REGISTRATION . register (ops .eq_op )
70- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
66+ @register_binary_op (ops .eq_op )
67+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
7168 left_expr = _coerce_bool_to_int (left )
7269 right_expr = _coerce_bool_to_int (right )
7370 return sge .EQ (this = left_expr , expression = right_expr )
7471
7572
76- @BINARY_OP_REGISTRATION . register (ops .eq_null_match_op )
77- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
73+ @register_binary_op (ops .eq_null_match_op )
74+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
7875 left_expr = left .expr
7976 if right .dtype != dtypes .BOOL_DTYPE :
8077 left_expr = _coerce_bool_to_int (left )
@@ -93,8 +90,8 @@ def _(op, left: TypedExpr, right: TypedExpr) -> sge.Expression:
9390 return sge .EQ (this = left_coalesce , expression = right_coalesce )
9491
9592
96- @BINARY_OP_REGISTRATION . register (ops .div_op )
97- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
93+ @register_binary_op (ops .div_op )
94+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
9895 left_expr = _coerce_bool_to_int (left )
9996 right_expr = _coerce_bool_to_int (right )
10097
@@ -105,8 +102,8 @@ def _(op, left: TypedExpr, right: TypedExpr) -> sge.Expression:
105102 return result
106103
107104
108- @BINARY_OP_REGISTRATION . register (ops .floordiv_op )
109- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
105+ @register_binary_op (ops .floordiv_op )
106+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
110107 left_expr = _coerce_bool_to_int (left )
111108 right_expr = _coerce_bool_to_int (right )
112109
@@ -138,41 +135,41 @@ def _(op, left: TypedExpr, right: TypedExpr) -> sge.Expression:
138135 return result
139136
140137
141- @BINARY_OP_REGISTRATION . register (ops .ge_op )
142- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
138+ @register_binary_op (ops .ge_op )
139+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
143140 left_expr = _coerce_bool_to_int (left )
144141 right_expr = _coerce_bool_to_int (right )
145142 return sge .GTE (this = left_expr , expression = right_expr )
146143
147144
148- @BINARY_OP_REGISTRATION . register (ops .gt_op )
149- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
145+ @register_binary_op (ops .gt_op )
146+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
150147 left_expr = _coerce_bool_to_int (left )
151148 right_expr = _coerce_bool_to_int (right )
152149 return sge .GT (this = left_expr , expression = right_expr )
153150
154151
155- @BINARY_OP_REGISTRATION . register (ops .JSONSet )
156- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
152+ @register_binary_op (ops .JSONSet , pass_op = True )
153+ def _ (left : TypedExpr , right : TypedExpr , op ) -> sge .Expression :
157154 return sge .func ("JSON_SET" , left .expr , sge .convert (op .json_path ), right .expr )
158155
159156
160- @BINARY_OP_REGISTRATION . register (ops .lt_op )
161- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
157+ @register_binary_op (ops .lt_op )
158+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
162159 left_expr = _coerce_bool_to_int (left )
163160 right_expr = _coerce_bool_to_int (right )
164161 return sge .LT (this = left_expr , expression = right_expr )
165162
166163
167- @BINARY_OP_REGISTRATION . register (ops .le_op )
168- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
164+ @register_binary_op (ops .le_op )
165+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
169166 left_expr = _coerce_bool_to_int (left )
170167 right_expr = _coerce_bool_to_int (right )
171168 return sge .LTE (this = left_expr , expression = right_expr )
172169
173170
174- @BINARY_OP_REGISTRATION . register (ops .mul_op )
175- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
171+ @register_binary_op (ops .mul_op )
172+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
176173 left_expr = _coerce_bool_to_int (left )
177174 right_expr = _coerce_bool_to_int (right )
178175
@@ -186,20 +183,20 @@ def _(op, left: TypedExpr, right: TypedExpr) -> sge.Expression:
186183 return result
187184
188185
189- @BINARY_OP_REGISTRATION . register (ops .ne_op )
190- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
186+ @register_binary_op (ops .ne_op )
187+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
191188 left_expr = _coerce_bool_to_int (left )
192189 right_expr = _coerce_bool_to_int (right )
193190 return sge .NEQ (this = left_expr , expression = right_expr )
194191
195192
196- @BINARY_OP_REGISTRATION . register (ops .obj_make_ref_op )
197- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
193+ @register_binary_op (ops .obj_make_ref_op )
194+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
198195 return sge .func ("OBJ.MAKE_REF" , left .expr , right .expr )
199196
200197
201- @BINARY_OP_REGISTRATION . register (ops .sub_op )
202- def _ (op , left : TypedExpr , right : TypedExpr ) -> sge .Expression :
198+ @register_binary_op (ops .sub_op )
199+ def _ (left : TypedExpr , right : TypedExpr ) -> sge .Expression :
203200 if dtypes .is_numeric (left .dtype ) and dtypes .is_numeric (right .dtype ):
204201 left_expr = _coerce_bool_to_int (left )
205202 right_expr = _coerce_bool_to_int (right )
0 commit comments